자바(Java)에서 'this'는 특별한 키워드이다. 클래스 내부에서 사용되며, 주로 인스턴스 변수와 메서드를 구변하거나 현재 객체애 대한 참조를 나타내는 데 사용된다.
이번 포스팅에서는 클래스 내부에서 사용하는 'this' 키워드에 대해서 알아보자.
'this' 키워드
자바에서 'this' 키워드는 클래스 내부에서 사용된다. 현재 객체에 대한 참조, 생성자에서 다른 생성자를 호출, 매개변수와 멤버변수의 이름 충돌 시 사용된다. 하나씩 알아보자.
현재 객체에 대한 참조
'this' 키워드는 현재 객체에 대한 참조를 나타낸다. 클래스 내부에서 'this'를 사용하면 현재 객체를 가리키게 된다. 이를 통해 객체 내부에서 다른 멤버 변수나 메서드를 참조하거나 호출할 수 있다.
// 학생 클래스
public class Student {
private Integer id; // 식별자
private String name; // 이름
private Integer age; // 나이
// 생성자
public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
// 출력 메서드
public String toString() {
return "id: " + this.id + ", name: " + this.name + ", age: " + this.age;
}
}
생성자에서 다른 생성자 호출
'this' 키워드를 사용하여 동일한 클래스 내에서 다른 생성자를 호출 할 수 있다. 이는 생성자 오버로딩을 편리하게 처리할 때 유용하다.
// 학생 클래스
public class Student {
private Integer id; // 식별자
private String name; // 이름
private Integer age; // 나이
// 생성자
public Student() {
this(-1, "None", 0);
}
public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
}
기본 인자가 없는 생성자를 호출하는 경우에는 내부에서 'this'를 이용해서 다른 생성자를 호출하여 멤버 변수의 값을 초기화할 수 있다.
메서드 매개변수와 동일한 멤버 변수의 이름 충돌 해결
종종 메서드 내부에서 메서드의 매개변수와 인스턴스 내부의 멤버 변수의 이름이 충돌 할 수 있다. 이런 경우 'this' 키워드를 사용하여 인스턴스 변수를 참조할 수 있다.
// 학생 클래스
public class Student {
private Integer id; // 식별자
private String name; // 이름
private Integer age; // 나이
// 생성자
public Student() {
this(-1, "None", 0);
}
public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
// ...
/* setter */
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
}
'setter' 메서드의 매개 변수는 내부 멤버 변수의 이름과 동일한 name 또는 age를 받고 있다. 따라서 이를 구분 짓기 위해서 'this' 키워드를 사용한다.
'this' 키워드는 자바에서 객체 지향 프로그래밍을 할 때 유용하며, 현재 객체에 대한 명확한 참조를 제공하여 코드의 가독성을 향상시키고 오류를 방지하는 데 도움이 된다.
'쿤즈 Dev > Java' 카테고리의 다른 글
[Java] 메서드 오버라이딩 (Method Overriding) (0) | 2023.09.11 |
---|---|
[Java] 자바에서 사용하는 상속(Inheritance)에 대해 알아보자 (0) | 2023.09.10 |
[Java] 멤버 변수 접근 메서드 Getter, Setter (0) | 2023.09.08 |
[Java] 캡슐화 (Encapsulation)란 무엇일까 (0) | 2023.09.07 |
[Java] 자바의 정적(Static) 변수 사용하기 (0) | 2023.09.06 |
댓글