게터(Getter)와 세터(Setter)는 객체 지향 프로그래밍에서 캡슐화(Encapsulation)를 구현하는 방법 중 하나이다. 클래스의 필드(속성)에 직접 접근하는 대신, 간접적으로 접근하고 수정할 수 있도록 만들어진 메서드들이다. 이를 통해 데이터의 무분별한 접근을 방지하고, 외부에서 객체의 상태를 제어할 수 있다.
private
필드 값을 외부에서 읽을 수 있도록 함.get
으로 시작하고 필드의 이름을 붙여서 메서드 이름을 만듦.name
필드의 getter는 getName()
이 됨.public class Person {
private String name;
private int age;
// Getter for name
public String getName() {
return name;
}
// Getter for age
public int getAge() {
return age;
}
}
private
필드 값을 외부에서 수정할 수 있도록 함.set
으로 시작하고 필드의 이름을 붙여서 메서드 이름을 만듦.name
필드의 setter는 setName()
이 됨.public class Person {
private String name;
private int age;
// Setter for name
public void setName(String name) {
this.name = name;
}
// Setter for age
public void setAge(int age) {
this.age = age;
}
}
Getter와 Setter 메서드를 사용하여 객체의 필드 값을 읽고, 수정할 수 있다. 이때 필드는 private
로 설정되어 직접 접근이 불가능하지만, 게터와 세터를 통해 안전하게 값을 관리할 수 있기 때문이다.
필드를 private
으로 설정하면 외부에서 직접 접근할 수 없다. 필드의 무분별한 수정이나 읽기를 방지하고, 객체의 무결성을 유지할 수 있다.
Setter 메서드에서 필드 값을 설정하기 전에 유효성 검사를 추가할 수 있다. 잘못된 값이 설정되는 것을 방지할 수 있다.
public void setAge(int age) {
if (age > 0) {
this.age = age;
} else {
System.out.println("Invalid age");
}
}
외부에서 Getter와 Setter만 사용하고 있다면 클래스의 내부 구현을 바뀌더라도 외부 코드에 큰 영향을 미치지 않는다.
public class Person {
private String name;
private int age;
// Getter and Setter for name
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// Getter and Setter for age
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
// 객체 생성
Person person = new Person();
// Setter를 사용해 필드 값 설정
person.setName("Alice");
person.setAge(30);
// Getter를 사용해 필드 값 읽기
System.out.println("Name: " + person.getName()); // Name: Alice
System.out.println("Age: " + person.getAge()); // Age: 30
}
}