아직 메서드 개념도 포스팅 하지 않았는데 멤버 변수 초기화에 관련하여 먼저 포스팅을 하게 됐다.
복습하면서 재밌는 비유를 찾아냈기에 먼저 설명하겠다.
자바 생성자에서 this.x = x;와 같은 코드를 "멤버 변수 초기화" 또는 "필드 초기화"라고 부른다.
이 과정은 보통 생성자의 매개변수로 전달된 값을 객체의 멤버 변수에 할당하여 초기화하는 것을 의미한다.
예시 코드를 보자
public class MyClass {
private String s;
public MyClass(String s) {
this.s = s;
}
}
- this.s = s;는 생성자의 매개변수 s를 객체의 멤버 변수 s에 할당하는 과정이다.
- this 키워드는 현재 객체 자신을 참조하며, 이를 통해 멤버 변수와 매개변수를 구분한다.
이런 작업은 주로 객체지향 프로그램에서 객체를 초기화할 때 사용한다.
그냥 변수로 초기화하면 되는거 아닌가? 하고 생각할 수도 있다.
그러나 자바에서 생성자의 매개변수로 전달된 값을 멤버 변수에 할당하는 과정은 필수적이다.
생성자의 매개변수를 직접 멤버 변수로 초기화하지 않으면, 객체 내부에서 해당 값을 참조할 수 없기 때문이다.
public class MyClass {
private String s;
public MyClass(String s) {
s = s; // 오류
}
}
코드를 보면 s = s;는 매개변수 s를 다시 매개변수 s에 할당하는 것을 볼 수 있다.
따라서 멤버 변수 s는 초기화되지 않는다.
객체 내부에서 s에 접근하면 null 값을 가질 것이다.
객체의 멤버 변수에 할당해야 하므로 this를 써야 한다.
이해하기 쉽게 비유를 들어보자.
간단한 주소록 프로그램으로 예시를 들어보겠다.
비유:
- 주소록 - 사람의 정보를 저장하는 노트.
- 사람 - 주소록에 추가할 새로운 사람.
- 이름과 전화번호 - 저장해야 할 정보.
비유 확장:
- 주소록 프로그램의 클래스 - 주소록 자체, 여러 사람의 정보를 담을 수 있는 노트.
- 생성자 매개변수 - 새로 추가할 사람의 이름과 전화번호, 주소록에 적어야 할 정보.
public class AddressBook {
private String name;
private String phoneNumber;
public AddressBook(String name, String phoneNumber) {
this.name = name; // 주소록에 사람의 이름을 적는 것
this.phoneNumber = phoneNumber; // 주소록에 사람의 전화번호를 적는 것
}
}
이 프로그램에서 주소록 클래스는 사람의 정보를 담을 수 있는 구조라고 할 수 있다.
생성자는 주소록에 새로운 사람을 추가할 때 사용한다.
( 생성자(Constructor)는 객체가 생성될 때 호출되는 특수한 메서드이다. 생성자의 주요 역할은 객체의 초기 상태를 설정하는 것. 추후에 다시 설명하겠다.)
필드 부분인 name과 phoneNumber을 보자.
Name은 새로 추가할 사람의 이름이고 phoneNumber은 새로 추가할 사람의 전화번호이다.
this.name은 주소록 노트의 이름 칸이다.
this.phoneNumber은 주소록 노트의 전화번호 칸이다.
this.name = name; 부분은 새로 추가할 사람의 이름을 주소록 노트의 이름 칸에 적는 것이다.
this.phoneNumber = phoneNumber; 부분은 새로 추가할 사람의 전화번호를 주소록 노트의 전화번호 칸에 적는 것이다.
this를 사용하지 않는 다면?
public class AddressBook {
private String name;
public AddressBook(String name) {
name = name; // 주소록 노트에 이름을 적지 않고, 새로 추가할 사람의 이름을 다시 반복하는 것과 같습니다.
}
}
이 코드는 주소록 노트에 새로운 사람의 이름을 적는 것이 아니라 이름을 어디에도 저장하지 않는 것이다.
주소록에 제대로 적지 못하였다.
public class AddressBook {
private String name;
private String phoneNumber;
public AddressBook(String name, String phoneNumber) {
this.name = name; // 주소록 노트의 이름 칸에 새로 추가할 사람의 이름을 적는 것.
this.phoneNumber = phoneNumber; // 주소록 노트의 전화번호 칸에 새로 추가할 사람의 전화번호를 적는 것.
}
}
이 코드에서는 새로 추가할 사람의 이름과 전화번호를 각각 주소록 노트의 적절한 칸에 적은 것이다.
결론적으로, this 키워드는 매개변수로 전달된 값을 객체의 멤버 변수(클래스에 속한 변수. 객체마다 다른 변수를 가짐)에 할당하는 것이다.
이를 통해 주소록 노트에 새로운 사람의 이름과 전화번호를 적는 것이라고 생각하면 이해하기 쉽다.
'Language > Java' 카테고리의 다른 글
[Java] 다형성의 본질과 활용 (1) | 2024.12.31 |
---|---|
[Java] String / StringBuffer / StringBuilder 차이점 (0) | 2024.10.04 |
[Java] 인터페이스 (50) | 2024.06.22 |
[Java] 형변환, 조건문, 반복문 (46) | 2024.06.14 |
[Java] 자바 설명, 자료형, 변수, 상수 개념 및 사용 (2) | 2024.04.28 |