본문 바로가기
* Web/[Back] Java

[Java] 자바 : 햇갈리는 this? 원리로 이해하는 개념

by codinguser 2021. 3. 17.

자바를 공부하다보면 this라는 것이 나온다. 이는 파이썬에서 self와 비슷하다.

하지만 왜 쓰는지 이유가 햇갈릴 때가 있다.

 

 

어떠한 개념이 나왔다는 것은 어떠한 문제점이 발생하여 해당 개념을 도입했다는 것이다.

발생한 문제점이 무엇인지 먼저 살펴보자.

 

 

 

Problem)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Main {  
  public static void main(String args[]) { 
    User u = User("회원1"1);
  } 
}
 
class User {
  private String name;
  private int num;
 
  public User(String name, int num){
    name = name;
    num = num;
  }
}
 
cs

 

 

* 실행 로직

 

1. Main 클래스에서 u객체는 User를 참조하여 회원1, 1 이라는 객체를 생성한다.

 

2. User() 메소드 즉 생성자에서 String name과, int num 을 받는다.

 

(문제 발생)

3. 하지만 이 때 필드에서 선언된 private String name과 private int num;과 이름이 중복된다.

 

private String name = null;(초기값)

private int num = 0;(초기값)

 

이 때 User("회원1", 1)로 들어오게 되면

name = "회원1" - > name = "회원1"로 담는 현상이 발생

num = 1 - > num = 1 로 담는 현상이 발생

즉, 자기 자신이 자기 자신을 담는 현상이 발생한 것이다.

 

그렇기에 컴파일 순서로 인해 결과적으로 null과 0으로 출력이 되어버린다.

 

 

 

 

 

 

 

그렇다면

"회원1"과 1을 출력할려면 어떻게 해야할까?

 

 

Solution)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Main {  
  public static void main(String args[]) { 
    User u = User("회원1"1);
  } 
}
 
class User {
  private String name;
  private int num;
 
  public User(String name, int num){
    this.name = name;
    this.num = num;
  }
}
 
cs

 

 

A)

수행 객체를 명확하게 지정해주는 this를 쓰면 된다.

 

 

this.name은 필드 name을 가리킨다. 즉 초기 값 null을 가리킴

this.num은 필드 num을 가리킨다. 즉 초기 값 0을 가리킴

 

즉, 명확한 주체를 지정해주는 것이다.

 

 

[ 그림으로 이해하기 ]

 

< this >

name : null

num : 0

 

< User >

name : 회원1

num : 1

 

 

그러면 자동적으로 null을 회원1로 바꾸어 실행순서에 알맞게 회원1이 출력된다.

 

 

 

 

정 리


this란?

 

- 객체를 명확하게 지정해준다.

댓글