본문 바로가기

[TIL] this , this()

인포꿀팁 발행일 : 2020-08-04

this 란?

현재 클래스의 인스턴스로 객체 자신에 대한 참조 값을 갖는다.

this는 현재 클래스의 인스턴스를 참조하기 때문에 생성자나 인스턴스 메소드 내에서만 사용하며 클래스 메소드에서는 사용할 수 없다.

 

특징"

지역변수(메소드 내에 선언된 변수나 메소드 인수)와 멤버변수(인스턴스 변수나 클래스 변수)의 이름이 동일한 경우

지역 변수가 우선순위가 높다.

 

따라서 인스턴스 변수를 명확하게 접근하기 위해서 this키워드를 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package ex0804;
 
public class This_Ex1 {
 
    public static void main(String[] args) {
        Demo4 ob1 = new Demo4();
        Demo4 ob2 = new Demo4();
 
        ob1.set1(10);
        ob1.write(); //0:1
        
        System.out.println(ob1);
        ob1.set2(10);
        ob1.write();
        System.out.println("----------------");
        
        System.out.println(ob2);
        ob2.set2(5);
        ob2.write();
    }
//    0:1
//    0:1
//    ex0804.Demo4@15db9742
//    ex0804.Demo4@15db9742
//    20:1
//    20:1
//    ----------------
//    ex0804.Demo4@6d06d69c
//    ex0804.Demo4@6d06d69c
//    15:1
//    15:1
 
}
 
class Demo4 {
    int a;
    int b;
 
    public void set1(int a) {
        //지역변수와 인스턴스 변수의 이름이 같으면
        // 지역변수가 우선순위가 높다.
        a = a + 10;
        b = 1;
    }
    public void set2(int a) {
        System.out.println(this);
        this.a= a+10;
        this.b=1;
    }
    public void write() {
        System.out.println(a+":"+b);
        System.out.println(this.a+":"+this.b);
    }
 
}
 
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package ex0804;
 
public class This_Ex2 {
 
    public static void main(String[] args) {
        Demo5 ob = new Demo5();
        ob.sub();
        ob.write(); //0:0
        
        ob.sub2();
        ob.write(); //5:10
    }
//    sub:10,20
//    0:0
//    5:10
 
}
 
class Demo5{
    int a;
    static int b;
    
    public void sub() {
        int a;
        int b;
        
        a=10;
        b=20;
        System.out.println("sub:"+a+","+b);
    }
    
    public void sub2() {
        int a;
        int b;
        
//        a=1;
//        b=2;
//        System.out.println("sub2:"+a+","+b);
        this.a=5;        // 인스턴스 변수
        //this.b=10; // 경고 : 일반적으로 클래스변수는 this 대신 클래스명으로 접근
        Demo5.b=10;
    }
    
    public void write() {
        System.out.println(a+":"+b);
    }
}
cs

 

this()란?

  • 생성자에서 중복 정의된 다른 생성자를 호출하기 위해 사용한다.
  • 하나의 클래스에 여러개의 생성자가 오버로딩된 경우 중복된 코드가 존재할 수 있는데, this(인수)를 이용하여 다른 생성자를 호출 코드의 중복을 최소화 할 수 있다.
  • 생성자의 최상단에 한번만 사용 가능하며 super()와 같이 사용할 수 없다.

'Language > JAVA' 카테고리의 다른 글

[TIL] JVM :Java Virtual Machine  (0) 2020.08.04
[TIL] 생성자 , 초기화  (0) 2020.08.04
[TIL] 비정형 인자 (가변 인수)  (0) 2020.08.04
[TIL] 재귀 호출  (0) 2020.08.04
[TIL] 메소드 오버로딩  (0) 2020.08.03

댓글