자바에서 사용하는 키워드
이 키워드는 자바를 많이 사용할 수 있습니다. Java에서 이 변수는 현재 개체를 참조하는 참조 변수입니다.
여기 java의 6가지 사용법이 이 키워드로 제시되어 있습니다.
- 현재 클래스 인스턴스 변수를 참조하는 데 사용할 수 있습니다.
- 현재 클래스 메서드를 호출하는 데 사용할 수 있습니다.
- 이 명령을 사용하여 현재 클래스 생성자를 호출할 수 있습니다.
- 메서드 호출에서 인수로 전달할 수 있습니다.
- 생성자 호출에서 인수로 전달될 수 있습니다.
- 메소드에서 현재 클래스 인스턴스를 반환하는 데 사용할 수 있습니다.
1) this: 현재 클래스 인스턴스 변수를 참조합니다.
this 키워드는 현재 클래스 인스턴스 변수를 참조하는 데 사용할 수 있습니다. 인스턴스 변수와 매개 변수 사이에 모호성이 있는 경우 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();
}}
위의 예제에서는 모수(공식 인수)와 인스턴스(instance) 변수가 동일합니다. 따라서 이 키워드를 사용하여 로컬 변수와 인스턴스 변수를 구분합니다.
this 키워드로 위의 문제를 해결합니다.
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();
}}
로컬 변수(공식 인수)와 인스턴스 변수가 다르면 다음 프로그램과 같이 이 키워드를 사용할 필요가 없습니다.
this 키워드가 필요하지 않은 프로그램입니다.
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();
}}
변수에 의미 있는 이름을 사용하는 것이 더 좋습니다. 따라서 인스턴스 변수 및 매개 변수에 대해 실시간으로 동일한 이름을 사용하고 항상 this 키워드를 사용합니다.
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();
}}
3) this class : 현재 클래스 생성자를 호출합니다.
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);
}}
기본 생성자에서 매개 변수화된 생성자를 호출합니다.
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();
}}
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();
}}
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();
}}
4) 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();
}
}
인수로 전달될 수 있는 이 적용은 다음과 같습니다.
다른 클래스에 대한 참조를 제공해야 하는 경우 처리(또는)입니다. 여러 가지 방법으로 한 개체를 재사용하는 데 사용됩니다.
5) this: 생성자 호출에서 인수로 전달합니다.
키워드를 생성자에서도 전달할 수 있습니다. 여러 클래스에서 하나의 개체를 사용해야 할 경우 유용합니다. 예를 들어 보겠습니다.
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();
}
}
6) this 키워드를 사용하여 현재 클래스 인스턴스를 반환할 수 있습니다.
메소드에서 this 키워드를 문으로 반환할 수 있습니다. 이 경우 메서드의 반환 유형은 클래스 유형이어야 합니다. 예를 들어 보겠습니다.
문으로 반환될 수 있는 구문입니다.
return_type method_name(){
return this;
}
메소드에서 문으로 반환하는 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();
}
}
this 키워드를 증명
this 키워드가 현재 클래스 인스턴스 변수를 참조한다는 것을 증명해 보겠습니다. 이 프로그램에서는 기준 변수를 출력하고 있으며, 두 변수의 출력은 동일합니다.
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();
}
}
'SW > Java' 카테고리의 다른 글
Java : Java 모듈의 이점, 예제, 설명 (0) | 2023.06.24 |
---|---|
RxJava 사용한 비동기 HTTP 요청 (0) | 2023.06.09 |
Java : 자바 생성자 : 개념, 예제, 개요, 설명 (0) | 2023.02.26 |
Java : 자바 OOP 컨셉, 개념, 개요, 설명 (0) | 2023.02.22 |
Java : 자바 제어문, 제어흐름 : 개요, 개념, 설명 (0) | 2023.02.21 |