Getter와 Setter란?
- 객체지향 프로그래밍에서 클래스의 속성(필드)을 외부에서 접근할 수 있도록 하는 메서드
- 데이터 보존을 위해 private으로 객체를 보호하므로, 이 객체의 값에 접근하기 위해서는 같은 클래스 안의 메서드를 만들어두고 해당 메서드를 통해 접근해야 함.
- Getter : 클래스의 필드 값을 반환하는 메서드
- Setter : 클래스의 필드 값을 설정하는 메서드
작성법
- Getter 메서드 :
- 반환타입은 필드의 타입과 동일
- get + 필드이름(첫 글자 대문자) - Setter 메서드 :
- 반환타입은 void
- set + 필드이름(첫 글자 대문자)
public class Person {
// private으로 객체보호
private String name;
private int age;
// 이름 반환
public String getName() {
return name;
}
// 이름 설정
public void setName(String name) {
this.name = name;
}
// 나이 반환
public int getAge() {
return age;
}
// 나이 설정
public void setAge(int age) {
this.age = age;
}
}
사용하는 이유?
- 캡슐화: 클래스 내부 구현을 숨기고(정보 은닉), 외부에서의 접근을 제한하여 객체 보호
>> 마치 TV를 볼 때 TV가 어떻게 작동하는지 원리를 우리가 모르고 쓰는 것과 같음 - 유효성 검사 : Setter를 통해 값 설정 시 유효성 검사 수행 가능
- 디버깅, 유지보수 : 코드의 가독성을 높이고 메서드 수정을 통해 유지보수 용이하게 함
장점
- 데이터 접근 제어: 객체의 속성에 대한 읽기 및 쓰기 권한 제어
- 캡슐화
단점
- 실질적인 정보 노출: 변수를 private를 선언하더라도 getter, setter를 통해 접근하면 데이터 접근이 가능
- 외부 접근 시 캡슐화가 지켜지지 않아 코드 안정성이 무너질 수 있음
Getter, Setter 메서드 사용 시 데이터에 접근 권한을 주는 것과 마찬가지.
데이터의 무결성을 약화시킨다.
따라서 사용을 지양하는 것이 좋다.
인텔리제이 꿀팁
인텔리제이에서 편리하게 getter, setter 메서드를 작성하는 팁이 있다.