Java 에서 클래스를 만들다 보면 자연스럽게 만나게 되는 문법이 바로 생성자와 this 키워드이다.
예를 들어 아래 코드가 있다고 하자.
public class Member {
private Long id;
private String name;
private Grade grade;
//생성자 정의
public Member(Long id, String name, Grade grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
}
생성자란 무엇인가?
생성자는 객체를 만들 때 초기값을 설정해주는 메서드이다.
Java에서 객체를 만들 때는 new 키워드를 사용한다.
Member member = new Member(1L, "Moong", Grade.VIP);
이때 Member 클래스의 생성자가 자동으로 호출되며,
객체 내부의 필드(id, name, grade)에 우리가 전달한 값이 들어가게 된다.
즉, 생성자는 객체가 만들어질 때 필드에 값을 넣어주는 메서드라고 보면 된다.
생성자를 왜 쓸까?
Java는 생성자를 생략하면 기본 생성자를 자동으로 만들어준다.
하지만 객체를 만들 때 값을 반드시 넣도록 강제하고 싶을 땐, 아예 생성자에 매개변수를 넣는 방식이 좋다.
this 키워드는 왜 쓸까?
생성자 안을 보면 아래처럼 this.id = id; 와 같은 코드가 반복된다.
public Member(Long id, String name, Grade grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
this는 현재 객체 자기 자신을 가르키는 키워드로, 주로 필드와 매개변수 이름이 같을 때 구분용으로 사용한다.
왜 이렇게 this. 를 붙일까?
Java에서는 변수 이름이 같을 때 우선순위가 있다.
- 생성자 안의 id는 매개변수를 의미한다.
- 그래서 id = id; 라고 쓰면 자기 자신한테 복사하는 셈이 되어 아무 의미가 없다. (둘 다 매개변수 id를 가르킨다.)
그래서 오른쪽 id(매개변수)를 왼쪽 필드 this.id에 넣기 위해 this를 붙여줘야 한다.
this.id = id; // 오른쪽 id(매개변수)를 왼쪽 필드 this.id에 넣음
- this.id 는 현재 객체의 필드
- id는 생성자의 매개변수
이렇게 해야 비로소 필드에 값이 제대로 들어가게 된다.
'Java' 카테고리의 다른 글
| [Java 기초] HashMap 대신 왜 ConcurrentHashMap을 써야 할까? (1) | 2025.07.07 |
|---|---|
| [Java 기초] 인터페이스란 무엇인가? 왜 구현 클래스가 필요할까 (1) | 2025.05.04 |