Setter
객체의 필드를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성이 깨질 수 있다.
예를 들어 자동차의 속력은 음수가 될 수 없는데 외부에서 음수로 변경하면 객체의 무결성이 깨지게 된다.
이러한 문제점 때문에 직접적인 외부에서의 필드 접근을 막고, 그 대신 메소드를 통해 필드에 접근하는것을 선호한다.
메소드가 데이터를 검증해서 유효한 값만 필드에 저장할 수 있기 때문이다. 이러한 역할을 하는게 Setter 이다.
요약: Java에서 Setter를 사용하면 private 필드에 접근하고 값을 설정할 수 있다. 이 때 유효성 검사를 수행할 수 있다.
Setter의 장점
1. 정보 은닉: private필드에 직접 접근할 수 없도록 해 객체 내부 상태를 보호
2. 유효성 검사: Setter 메서드 내부에서 필드 값에 대한 유효성 검사 가능
3. 제어된 접근: 필드 값을 설정할 때 추가 로직을 적용할 수 있음
Getter
외부에서 객체의 필드를 읽을 때에도 메소드가 필요한 경우가 있다. 필드값이 객체 외부에서 사용하기에 부적절한 경우,
메소드로 적절한 값으로 변환해서 리턴할 수 있기 때문이다. 이러한 역할을 하는 메소드가 Getter 이다.
요약: Getter를 사용하면 private 필드에 대한 읽기 접근할 수 있다. 외부에서 접근할 수 없기 때문에 Getter를 통해 간접적으로 필드 값을 읽을 수 있다.
Getter의 장점
1. 정보 은닉: 위와 같음
2. 읽기 전용 접근: 필드 값을 읽기만 할 수 있게해 외부에서 객체 상태를 변경할 수 없도록 할 수 있음
3. 추가 로직 적용: Getter 메서드 내부에서 필드 값을 반환하기 전 추가 로직을 적용할 수 있음
public class Person {
private String name;
private int age;
// Setter 메서드에서 유효성 검사 포함
public void setName(String name) {
if (name != null && !name.isEmpty()) {
this.name = name;
} else {
throw new IllegalArgumentException("Name cannot be null or empty");
}
}
public void setAge(int age) {
if (age > 0) {
this.age = age;
} else {
throw new IllegalArgumentException("Age must be greater than 0");
}
}
// Getter 메서드
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setName("John");
person.setAge(30);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
}
}
Getter / Setter는 private한 값을 보호하기 위해 사용된다고 이해하면 될 것 같다.
'Java' 카테고리의 다른 글
인터페이스 - private 메소드 (0) | 2024.07.01 |
---|---|
싱글톤 (0) | 2024.06.23 |
이것이 자바다 - 클래스(2) (0) | 2024.06.21 |
이것이 자바다 - 클래스 (0) | 2024.06.19 |
이것이 자바다 - 열거(Enum) 타입 (0) | 2024.06.17 |