SW/Java

Java : this 키워드 : 개념, 개요, 예제, 설명

얇은생각 2023. 2. 28. 07:30
반응형

Java : this 키워드 : 개념, 개요, 예제, 설명 1

 

 

자바에서 사용하는 키워드

이 키워드는 자바를 많이 사용할 수 있습니다. Java에서 이 변수는 현재 개체를 참조하는 참조 변수입니다.

Java : this 키워드 : 개념, 개요, 예제, 설명 2

 

여기 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: 현재 클래스 메서드를 호출합니다.

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

Java : this 키워드 : 개념, 개요, 예제, 설명 3

 

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();  
    }  
}

 

반응형