[Day 3 | Java] this

y♡ding·2024년 10월 16일
1

데브코스 TIL

목록 보기
9/163

☝🏻 this 키워드

자바에서 this 키워드는 인스턴스의 자기자신을 의미한다. 인스턴스화 되었을 때 자기자신의 메모리 주소를 담고있는 키워드이다.

✔️ this 키워드의 주요 용도

  1. 객체 자신을 가리키는 참조

    • this현재 객체를 가리키는 참조 변수이다. 클래스 내부에서 자신이 속한 객체를 참조할 수 있다. 실행 클래스에서 사용하는 것이 아니라 데이터 클래스 내부에서 사용된다.
  2. 멤버 변수와 매개변수 구분

    • 메서드나 생성자의 매개변수와 멤버 변수의 이름이 동일할 때 이를 구분하기 위해 사용한다. 이때, this를 통해 객체의 멤버 변수임을 명확히 할 수 있다. 이를 통해 변수명 혼동을 방지하고, 코드 가독성을 높일 수 있다.

      class Variable {
       // 인스턴스 멤버 필드
       String instanceVariable;
      
       void doFunc() {
           // 지역 변수
           String instanceVariable = "20"; 
           System.out.println("doFunc() 호출 : " + instanceVariable); // 20
           System.out.println("doFunc() 호출 : " + this.instanceVariable); // 10
       }
       
       // 메서드의 아규먼트도 지역변수임
       void doFunc2(String instanceVariable) {
           System.out.println("doFunc2() 호출 : " + instanceVariable);   // 20
           System.out.println("doFunc2() 호출 : " + this.instanceVariable);  // 10    }
      }
      
      public class VariableMainEx02 {
       public static void main(String[] args) {
           Variable v = new Variable();
      
           v.instanceVariable = "10";
      
           v.doFunc();
           v.doFunc2("20");
       }
      }
  1. 내부 생성자 호출

    • 생성자 내에서 다른 생성자를 호출할 때 this(매개변수) 형식으로 사용된다. 이를 통해 중복되는 코드를 줄이고, 코드 재사용성을 높일 수 있다.

         class This {
             This() {
                System.out.println("생성자 호출");
         }
      
           This(String name) {
               //This();              // 에러 발생
               this();
               System.out.println("생성자 오버로딩 호출");
               //this();   //errer - this must be first statement in constructor
               }
          }
      
         public class ThisMainEx01 {
             public static void main(String[] args) {
                 This t = new This("홍길동");
            }    
       }
      
      
      class Constructor {
         
         String hakbun;
         String name;
      
         // 기본 생성자
         Constructor() {
             this("0000", "아무개");
         }
      
         Constructor(String name) {
             this("0000",name);
         }
      		// 매개변수가 있는 생성자
         Constructor (String hakbun, String naem) {
             this.hakbun = hakbun;
             this.name = naem;
         }
      }
      
      public class ThisMainEx02 {
         public static void main(String[] args) {
             Constructor c1 = new Constructor();       // 전체
             System.out.println(c1.hakbun);
             System.out.println(c1.name);
      
             Constructor c2 = new Constructor("홍길동");    // 학번
             System.out.println(c2.hakbun);
             System.out.println(c2.name);
      
             Constructor c3 = new Constructor("1111", "박문수");
             System.out.println(c3.hakbun);
             System.out.println(c3.name);
         }
      }
  1. static 메서드에서는 사용 불가
    • this인스턴스 자신을 가리키는 참조 변수이므로, 인스턴스가 아닌 클래스 레벨에서 동작하는 static 메서드에서는 사용할 수 없다. static 메서드는 특정 인스턴스와 무관하게 호출되기 때문이다.
  2. 자기 호출 불가
    • this()를 사용하여 자기 자신을 호출하거나, 순환 참조를 만들 수 없다. 이는 무한 루프를 방지하기 위한 규칙이다.

📌 객체의 독립성
같은 클래스의 여러 객체가 생성되더라도, 각각의 객체는 자신만의 this를 가진다. 따라서 this는 각 객체가 자신의 멤버에 접근하는 방법을 제공한다.


  • this는 객체 자신을 가리키는 참조 변수로, 클래스 내부에서 자신의 멤버 변수나 메서드에 접근할 때 사용한다.
  • 주로 멤버 변수와 매개변수가 동일할 때 이를 구분하기 위해 사용되며, 다른 생성자를 호출하는 데도 사용한다.
  • static 메서드에서는 인스턴스와 관계없기 때문에 this를 사용할 수 없다.

0개의 댓글

관련 채용 정보