CodeGym/Java Blog/무작위의/자바 이 키워드
John Squirrels
레벨 41
San Francisco

자바 이 키워드

무작위의 그룹에 게시되었습니다
회원
CodeGym에서 학생들은 첫 번째 수업에서 문자 그대로 Java this 키워드를 접하게 됩니다. 시간이 지남에 따라 그 의미가 명확해집니다. 그러나 돌이켜보면 많은 사람들이 오랫동안 이 키워드의 선을 이해할 수 없었다는 것을 스스로 인정했을 것입니다. 이 기사는 아직 그렇게 할 수 없는 사람을 위해 this 키워드 의 비밀을 다루는 장막을 뒤로 젖힐 것입니다 ... Schildt의 Java 참조를 얻었고 171페이지에서 this 키워드를 볼 수 있습니다. 메서드가 자신을 호출한 개체를 참조하는 데 필요합니다. 그것으로 수업을 끝낼 수 있습니다. 그러나 세부 사항이 필요합니다. 일반적으로 다음 두 가지 경우에 사용해야 합니다.
  1. 인스턴스 변수와 메소드/생성자 변수의 이름이 같은 경우;
  2. 다른 유형의 생성자에서 특정 유형의 생성자(예: 기본 생성자 또는 매개 변수가 있는 생성자)를 호출해야 하는 경우. 이를 명시적 생성자 호출이라고도 합니다.
그게 전부입니다. 이 두려운 키워드가 사용되는 경우는 두 가지뿐입니다. 이제 예제에서 이 두 가지 경우를 살펴보겠습니다.

예 1: 인스턴스 변수와 메서드 변수의 이름이 동일합니다.

이름 필드를 정의하는 Human 클래스 가 있다고 가정합니다 . 이름 변수 에 대한 setter를 생성해 보겠습니다 (setter는 완전히 작동합니다. 여기에 catch가 없습니다).
class Human {
    String name;


    public void setName(String newName) {
        name = newName;
    }
}
String newName을 setName setter 메서드 에 전달합니다. 새 변수를 선언했고 setName 메서드를 묶는 중괄호({}) 내에서만 볼 수 있기 때문에 원하는 대로 이름을 지정할 수 있었습니다. setter에는 한 줄이 있습니다.
name = newName;
여기에서는 newName 이라는 새 변수를 도입 하고 개체의 기존 이름 변수에 할당했습니다. 많은 프로그래머는 궁극적으로 같은 것에 대해 이야기할 때 새 이름으로 변수를 도입하는 것을 이상하게 여길 수 있습니다. 즉, Human 클래스의 이름 필드에 대해 이야기하고 있습니다. 그렇기 때문에 Java 제작자는 동일한 변수 이름을 편리하게 사용할 수 있는 방법을 고안했습니다. 즉, 동일한 것을 나타내는 변수에 대해 두 개의 이름이 있는 이유는 무엇입니까? 즉, 다음과 같은 작업을 수행하려고 합니다.
class Human {
    String name;


    public void setName(String name) {
        name = name;
    }
}
그러나 여기서 우리는 문제에 봉착합니다 . 이제 이름이 같은 두 개의 변수가 있습니다. 한 문자열 이름은 Human 클래스 에 속 하고 다른 문자열 이름은 setName 메서드 에 속합니다 . 결과적으로 JVM은 setter에 다음 줄을 작성할 때 참조하는 변수를 알 수 없습니다.
name = name;
Java는 가장 가까운 이름 변수, 즉 setName 메소드의 변수를 의미한다고 가정합니다 . this 키워드(예시 포함) - 3따라서 단순히 메소드의 이름 변수를 자신에게 할당하는 것입니다. 물론 말이되지 않습니다. 따라서 언어는 Human 클래스의 이름 변수를 setName 메서드 의 이름 변수 와 구별할 방법이 필요했습니다 . 이 문제 는 this 키워드 를 도입하여 해결되었습니다 . 이 경우 메서드의 변수가 아니라 Human 클래스 의 instancen과 연결된 변수를 참조하려고 함을 나타냅니다 .this 키워드(예시 포함) - 4이 문서의 시작 부분에서 언급한 것처럼 호출 개체를 참조합니다. 결과적으로 setName 메소드는 생성된 객체에 사람의 이름을 설정합니다. 아래는 this 키워드를 사용하지 않은 프로그램의 코드입니다 . 이 코드는 Human 개체를 만들고 여기에 이름을 할당합니다. 다음은 thisthis 키워드(예시 포함) - 5 키워드가 있는 코드입니다 .
public class Solution {
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Vinny");
        human1.print();
    }
}
class Human {
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    void print() {
        System.out.println(name);
    }
}
따라서 동일한 것을 나타내기 위해 새 변수를 도입하지 않아도 되므로 코드가 더 깔끔해지고 추가 변수로 덜 어수선해집니다 .

예제 2: 명시적 생성자 호출에 사용

다른 생성자에서 하나의 생성자를 호출하는 것은 (이상하게도 충분히) 여러 생성자가 있고 새 생성자가 이전에 다른 생성자에서 작성된 초기화 코드를 복제하지 않으려는 경우에 유용할 수 있습니다. 혼란스러운? 그것은 보이는 것처럼 그렇게 무섭지 않습니다. 아래 코드를 보세요. 여기에는 Human 클래스 에 대한 두 개의 생성자가 있습니다 .
class Human {
    int age;
    int weight;
    int height;

    Human(int age, int weight) {
        this.age = age;
        this.weight = weight;
    }
    Human(int age, int weight, int height) {
        // Call the constructor with two parameters
        this(age, weight);
        // and then initialize the missing variable
        this.height = height;
    }
}
여기서 우리는 먼저 int ageint weight 라는 두 개의 매개변수를 가진 생성자를 제공했습니다 . 두 줄의 코드가 있다고 가정합니다.
this.age = age;
this.weight = weight;
나중에 세 개의 매개변수가 있는 다른 생성자를 추가하기로 결정하고 기존 연령 및 체중 매개변수에 키를 추가합니다. 다음과 같이 새 생성자를 작성할 수 있습니다.
this.age = age;
this.weight = weight;
this.height = height;
그러나 이 생성자에서 기존 코드를 반복하는 대신 this 키워드를 사용하여 두 개의 매개 변수로 생성자를 명시적으로 호출할 수 있습니다.
this(age, weight);
// and then initialize the missing variable:
this.height = height;
마치 매개변수가 3개인 생성자에게 다음과 같이 말하는 것과 같습니다.
  • 두 개의 매개변수가 있는 다른 생성자를 호출합니다.
  • 그런 다음 다른 변수를 추가합니다.
그게 다야 =). 마지막으로 Java에서 this 키워드는 메서드와 생성자에서만 사용됩니다. 그러나 이것은 모든 비정적 메서드에 암시적으로 전달되며(그래서 암시 적 매개 변수라고도 함) 메서드를 호출한 개체를 참조하는 데 사용할 수 있습니다. 이것은 무서운 것이 아니므 로 이 키워드를 두려워하지 마십시오 .
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다