logo

Java의 이 키워드

활용도가 많을 수 있어요 자바 이 키워드 . 자바에서 이것은 참조변수 현재 객체를 가리키는 말입니다.

자바 이 키워드

Java this 키워드 사용법

여기에는 java this 키워드의 6가지 사용법이 나와 있습니다.

  1. 이는 현재 클래스 인스턴스 변수를 참조하는 데 사용될 수 있습니다.
  2. 이는 현재 클래스 메소드를 (암시적으로) 호출하는 데 사용될 수 있습니다.
  3. this()를 사용하여 현재 클래스 생성자를 호출할 수 있습니다.
  4. 이는 메서드 호출에서 인수로 전달될 수 있습니다.
  5. 이는 생성자 호출에서 인수로 전달될 수 있습니다.
  6. 이는 메서드에서 현재 클래스 인스턴스를 반환하는 데 사용할 수 있습니다.

제안: Java 초보자라면 이 키워드의 사용법을 세 번만 찾아보세요.

Java this 키워드 사용법

1) this: 현재 클래스 인스턴스 변수를 참조합니다.

this 키워드는 현재 클래스 인스턴스 변수를 참조하는 데 사용할 수 있습니다. 인스턴스 변수와 매개변수 사이에 모호성이 있는 경우 이 키워드는 모호성 문제를 해결합니다.

이 키워드가 없는 문제 이해

아래 예제를 통해 이 키워드를 사용하지 않을 경우 문제를 이해해 보겠습니다.

스프링 부트
 class Student{ int rollno; String name; float fee; Student(int rollno,String name,float fee){ rollno=rollno; name=name; fee=fee; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis1{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }} 
지금 테스트해보세요

산출:

 0 null 0.0 0 null 0.0 

위의 예에서는 매개변수(형식인자)와 인스턴스 변수가 동일합니다. 그래서 우리는 이 키워드를 사용하여 지역변수와 인스턴스변수를 구별하고 있습니다.

위의 문제를 이 키워드로 해결

 class Student{ int rollno; String name; float fee; Student(int rollno,String name,float fee){ this.rollno=rollno; this.name=name; this.fee=fee; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis2{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }} 
지금 테스트해보세요

산출:

 111 ankit 5000.0 112 sumit 6000.0 

지역 변수(형식 인수)와 인스턴스 변수가 다른 경우에는 다음 프로그램처럼 이 키워드를 사용할 필요가 없습니다.

이 키워드가 필요하지 않은 프로그램

 class Student{ int rollno; String name; float fee; Student(int r,String n,float f){ rollno=r; name=n; fee=f; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis3{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }} 
지금 테스트해보세요

산출:

자바 쌍
 111 ankit 5000.0 112 sumit 6000.0 

변수에 의미 있는 이름을 사용하는 것이 더 나은 접근 방식입니다. 그래서 실시간으로 인스턴스 변수와 매개변수에 동일한 이름을 사용하고, 항상 이 키워드를 사용합니다.


2) 이: 현재 클래스 메소드를 호출합니다.

this 키워드를 사용하여 현재 클래스의 메서드를 호출할 수 있습니다. this 키워드를 사용하지 않으면 컴파일러는 메서드를 호출하는 동안 자동으로 이 키워드를 추가합니다. 예를 보자

 class A{ void m(){System.out.println('hello m');} void n(){ System.out.println('hello n'); //m();//same as this.m() this.m(); } } class TestThis4{ public static void main(String args[]){ A a=new A(); a.n(); }} 
지금 테스트해보세요

산출:

 hello n hello m 

3) this() : 현재 클래스 생성자를 호출합니다.

this() 생성자 호출을 사용하여 현재 클래스 생성자를 호출할 수 있습니다. 생성자를 재사용하는 데 사용됩니다. 즉, 생성자 체이닝에 사용됩니다.

매개변수화된 생성자에서 기본 생성자 호출:

 class A{ A(){System.out.println('hello a');} A(int x){ this(); System.out.println(x); } } class TestThis5{ public static void main(String args[]){ A a=new A(10); }} 
지금 테스트해보세요

산출:

 hello a 10 

기본 생성자에서 매개변수화된 생성자를 호출합니다.

 class A{ A(){ this(5); System.out.println('hello a'); } A(int x){ System.out.println(x); } } class TestThis6{ public static void main(String args[]){ A a=new A(); }} 
지금 테스트해보세요

산출:

문자열 메소드
 5 hello a 

this() 생성자 호출의 실제 사용법

생성자에서 생성자를 재사용하려면 this() 생성자 호출을 사용해야 합니다. 생성자 간의 체인을 유지합니다. 즉 생성자 연결에 사용됩니다. 이 키워드의 실제 사용을 표시하는 아래 예제를 살펴보겠습니다.

 class Student{ int rollno; String name,course; float fee; Student(int rollno,String name,String course){ this.rollno=rollno; this.name=name; this.course=course; } Student(int rollno,String name,String course,float fee){ this(rollno,name,course);//reusing constructor this.fee=fee; } void display(){System.out.println(rollno+' '+name+' '+course+' '+fee);} } class TestThis7{ public static void main(String args[]){ Student s1=new Student(111,'ankit','java'); Student s2=new Student(112,'sumit','java',6000f); s1.display(); s2.display(); }} 
지금 테스트해보세요

산출:

 111 ankit java 0.0 112 sumit java 6000.0 

규칙: this()에 대한 호출은 생성자의 첫 번째 문이어야 합니다.

 class Student{ int rollno; String name,course; float fee; Student(int rollno,String name,String course){ this.rollno=rollno; this.name=name; this.course=course; } Student(int rollno,String name,String course,float fee){ this.fee=fee; this(rollno,name,course);//C.T.Error } void display(){System.out.println(rollno+' '+name+' '+course+' '+fee);} } class TestThis8{ public static void main(String args[]){ Student s1=new Student(111,'ankit','java'); Student s2=new Student(112,'sumit','java',6000f); s1.display(); s2.display(); }} 
지금 테스트해보세요

산출:

 Compile Time Error: Call to this must be first statement in constructor 

4) this: 메서드에 인수로 전달합니다.

this 키워드는 메서드의 인수로 전달될 수도 있습니다. 주로 이벤트 처리에 사용됩니다. 예를 살펴보겠습니다:

 class S2{ void m(S2 obj){ System.out.println('method is invoked'); } void p(){ m(this); } public static void main(String args[]){ S2 s1 = new S2(); s1.p(); } } 
지금 테스트해보세요

산출:

 method is invoked 

인수로 전달될 수 있는 적용:

이벤트 처리(또는) 클래스에 대한 참조를 다른 클래스에 제공해야 하는 상황에서. 하나의 객체를 여러 메소드에 재사용할 때 사용됩니다.


5) 이: 생성자 호출에서 인수로 전달합니다.

생성자에 this 키워드를 전달할 수도 있습니다. 여러 클래스에서 하나의 객체를 사용해야 하는 경우 유용합니다. 예를 살펴보겠습니다:

i d e의 완전한 형태
 class B{ A4 obj; B(A4 obj){ this.obj=obj; } void display(){ System.out.println(obj.data);//using data member of A4 class } } class A4{ int data=10; A4(){ B b=new B(this); b.display(); } public static void main(String args[]){ A4 a=new A4(); } } 
지금 테스트해보세요
 Output:10 

6) 이 키워드는 현재 클래스 인스턴스를 반환하는 데 사용될 수 있습니다.

이 키워드를 메서드의 명령문으로 반환할 수 있습니다. 이 경우 메서드의 반환 유형은 클래스 유형(비원시형)이어야 합니다. 예를 살펴보겠습니다:

명령문으로 반환될 수 있는 구문

 return_type method_name(){ return this; } 

메소드에서 명령문으로 반환하는 이 키워드의 예

 class A{ A getA(){ return this; } void msg(){System.out.println('Hello java');} } class Test1{ public static void main(String args[]){ new A().getA().msg(); } } 
지금 테스트해보세요

산출:

 Hello java 

이 키워드를 증명

이 키워드가 현재 클래스 인스턴스 변수를 참조한다는 것을 증명해 보겠습니다. 이 프로그램에서는 참조 변수를 인쇄하고 있으며 두 변수의 출력은 동일합니다.

 class A5{ void m(){ System.out.println(this);//prints same reference ID } public static void main(String args[]){ A5 obj=new A5(); System.out.println(obj);//prints the reference ID obj.m(); } } 
지금 테스트해보세요

산출:

 A5@22b3ea59 A5@22b3ea59