Getter와 Setter란?
Getter와 Setter는 객체 지향 프로그래밍에서 사용되는 메소드로, 객체의 데이터(상태)를 캡슐화하고 제어하기 위해 사용된다. 이들 메소드는 클래스의 인스턴스 변수(멤버 변수)에 접근하고 값을 가져오거나 설정하는 데 사용된다.
public class Person {
private String name;
public String getName() {
return name; // name 변수의 값을 반환
}
}
public class Person {
private String name;
public void setName(String name) {
this.name = name; // name 변수에 값을 설정
}
}
캡슐화 : Getter와 Setter는 데이터 캡슐화의 핵심 요소이다. 직접 인스턴스 변수에 접근하지 않고 메소드를 통해 데이터에 접근하면 데이터의 무결성을 유지하고 보호할 수 있다.
제어 : Setter를 사용하면 데이터에 대한 입력을 검증하거나 제한할 수 있으며, Getter를 통해 읽기 전에 데이터를 가공할 수 있다.
유지보수 : 클래스의 내부 표현을 변경하지 않고도 Getter와 Setter를 수정할 수 있다. 이로써 다른 코드에 영향을 주지 않고 객체의 동작을 변경할 수 있다.
확장성 : 나중에 인스턴스 변수에 더 많은 로직 또는 계산을 추가하려면 Getter와 Setter를 수정하면 된다.
일반적으로 인스턴스 변수를 private로 선언하고, Getter와 Setter를 통해 외부에서 해당 변수에 접근하도록 하는 것이 객체 지향 프로그래밍의 모범 사례이다.
Getter와 Setter 추가 설명
public class Person {
private int age;
public void setAge(int age) {
if (age >= 0) {
this.age = age;
}
}
}
public class Temperature {
private double fahrenheit;
public double getCelsius() {
return (fahrenheit - 32) * 5/9;
}
}
Lombok은 Java의 Getter와 Setter를 자동으로 생성하는 라이브러리이다. Lombok을 사용하면 코드의 간결성을 유지하면서 Getter와 Setter를 생성할 수 있다.
import lombok.Getter;
import lombok.Setter;
public class Person {
@Getter @Setter
private String name;
}
몇몇 통합 개발 환경(IDE)과 코드 생성 도구는 Getter와 Setter를 자동으로 생성할 수 있다. 이를 통해 일일이 Getter와 Setter 메소드를 작성할 필요 없이 편리하게 사용할 수 있다.
인스턴스 변수에 직접 접근하는 것과 Getter와 Setter를 사용하는 것 간의 선택은 개발자의 필요에 따라 다를 수 있다. 보안성, 데이터 유효성 검사, 로깅 및 계산 등의 요소를 고려하여 결정할 수 있다.
Setter 메소드를 사용하여 값을 변경하는 대신, 불변 객체를 생성하는 방식을 선택할 수 있다. 불변 객체는 객체의 상태를 변경할 수 없도록 설계되며, 불변성을 유지하기 위해 Setter를 사용하지 않는다. 이러한 방식은 다중 스레드 환경에서 안전하고 예측 가능한 객체를 만들 때 유용하다.