이 키워드

게시물 저장

자막 추가

자바에서 이 키워드 [#3]

쓰다

시사

가이드

요약



이전 기사에서는 객체 지향 프로그래밍이 무엇인지, 객체, 클래스 및 각 생성자, 클래스 멤버에 액세스하는 방법에 대해 논의했습니다.
또한 이전 두 기사에서 이러한 개념의 예를 보았습니다.

오늘은 자바에서 "this"키워드가 왜 유용한지 살펴보겠습니다.

이 키워드



Java에서 이 키워드는 메서드 또는 생성자 내부의 현재 개체를 참조하는 데 사용됩니다.

class Animal {
    int instanceVariable;

    Animal(int instanceVariable) {
          this.instanceVariable = instVariable;
          System.out.println("the this reference =" + this);
   }

public static void main(String[] args) {
      Animal age = new Animal(7);
      System.out.println("the object reference =" + age);
       }
}


산출:




the this reference = Animal@78gd345f
the object reference = Animal@78gd345f


위의 이 예에서는 우리가 생성한 개체의 이름을 Animal 클래스의 age로 지정하고 일단 개체에 대한 참조와 클래스의 this 키워드를 인쇄합니다.
여기에서 우리는 age와 this의 참조가 동일한 의미임을 알 수 있습니다. this는 현재 개체에 대한 참조일 뿐입니다.

this 키워드의 사용


1. 모호한 변수 이름



자바뿐만 아니라 다른 프로그래밍 언어에서도 클래스나 메서드라는 범위 내에서 같은 이름을 가진 변수를 둘 이상 선언하는 것은 허용되지 않는다. 그러나 인스턴스 변수와 매개변수는 "this"키워드를 사용하지 않고 동일한 이름을 가질 수 있습니다.

class Exam {
    // instance variable
    int tm;

    // parameter
    Exam(int tm){
              tm =  tm;
    }

     public static void main(String[] args) {
               Exam examOne = new Exam(3);
               System.out.println("examOne.tm = " examOne.tm);
    }
}




산출:



examOne.tm = 0


위의 이 예에서 생성자에 3을 전달했지만 출력으로 0을 얻었습니다. 인스턴스 변수와 매개 변수 사이의 이름이 모호하기 때문에 Java 컴파일러가 혼동을 일으키기 때문입니다.

위의 코드를 this 키워드로 다시 작성합니다.

class Exam {

    int tm;
    Exam(int tm){
        this.tm = tm;
    }

    public static void main(String[] args) {
        Exam oj = new Exam(3);
        System.out.println("oj.tm = " + oj.tm);
    }
}


산출:




oj.tm = 3


위의 경우 예상 출력을 얻고 있습니다. 이는 생성자가 호출되면 생성자 내부의 this가 생성자를 호출한 객체 oj로 대체되기 때문입니다. 따라서 tm 변수에는 값 3이 할당됩니다.

또한 매개변수와 인스턴스 변수의 이름이 다른 경우 컴파일러는 자동으로 this 키워드를 추가합니다. 예를 들어 아래 코드는 다음과 같습니다.

class Exam {
    int size;

    Exam(int p) {
        size = p;
    }
}


다음과 같습니다.

class Exam {
    int size;

    Exam(int p) {
        this.size = p;
    }
}


이것은 게터와 세터와 함께



이 키워드의 또 다른 일반적인 용도는 클래스의 setter 및 getters 메서드입니다. 예를 들어:

class Main {
   String name;

   // setter method
   void setName( String name ) {
       this.name = name;
   }

   // getter method
   String getName(){
       return this.name;
   }

   public static void main( String[] args ) {
       Main obj = new Main();

       // calling the setter and the getter method
       obj.setName("Toshiba");
       System.out.println("obj.name: "+obj.getName());
   }
}


산출:

obj.name: Toshiba


여기서는 이 키워드를 사용했습니다.
  • setter 메서드 내부에 값을 할당하는 경우
  • getter 메서드 내부의 값에 액세스

  • this()의 큰 장점 중 하나는 중복 코드의 양을 줄이는 것입니다. 그러나 this()를 사용하는 동안 항상 주의해야 합니다.

    다른 생성자에서 생성자를 호출하면 오버헤드가 추가되고 프로세스가 느려지기 때문입니다. this()를 사용하는 또 다른 큰 이점은 중복 코드의 양을 줄이는 것입니다.

    참고: 다른 생성자에서 한 생성자를 호출하는 것을 명시적 생성자 호출이라고 합니다.

    이것을 인수로 전달



    이 키워드를 사용하여 현재 개체를 메서드의 인수로 전달할 수 있습니다. 예를 들어,

    class ThisExample {
        // declare variables
        int x;
        int y;
    
        ThisExample(int x, int y) {
           // assign values of variables inside constructor
            this.x = x;
            this.y = y;
    
            // value of x and y before calling add()
            System.out.println("Before passing this to addTwo() method:");
            System.out.println("x = " + this.x + ", y = " + this.y);
    
            // call the add() method passing this as argument
            add(this);
    
            // value of x and y after calling add()
            System.out.println("After passing this to addTwo() method:");
            System.out.println("x = " + this.x + ", y = " + this.y);
        }
    
        void add(ThisExample o){
            o.x += 2;
            o.y += 2;
        }
    }
    
    class Main {
        public static void main( String[] args ) {
            ThisExample obj = new ThisExample(1, -2);
        }
    }
    


    산출:

    Before passing this to addTwo() method:
    x = 1, y = -2
    After passing this to addTwo() method:
    x = 3, y = 0
    


    위의 예에서 생성자 ThisExample() 내부에 다음 행이 있습니다.

    add(this);
    


    여기에서는 이것을 인수로 전달하여 add() 메서드를 호출합니다. 이 키워드에는 클래스의 개체 obj에 대한 참조가 포함되어 있으므로 add() 메서드 내에서 x 및 y 값을 변경할 수 있습니다.

    객체 지향 프로그래밍에 대한 더 깊고 자세한 설명을 보려면 이 멋진 재생 목록을 확인하세요.
    쿠날 쿠슈와하.

    , github에서 저에게 연락해 주시면 감사하겠습니다.

    좋은 웹페이지 즐겨찾기