Java에서 getter와 setter는 객체의 캡슐화(encapsulation)를 지원하는 중요한 메서드이다. 이 메서드들은 클래스의 멤버 변수를 외부에서 직접 접근하지 못하도록 보호하고, 대신 간접적으로 접근하고 수정할 수 있는 방법을 제공한다. getter와 setter의 주요 목적은 데이터의 무결성을 유지하면서 접근을 제어하는 것이다.
Getter와 Setter의 개념
- Getter 메서드: 클래스의 멤버 변수 값을 반환하는 메서드이다. 일반적으로 get이라는 접두사와 함께 변수의 이름을 사용하여 메서드를 정의한다.
- Setter 메서드: 클래스의 멤버 변수 값을 설정하는 메서드이다. 일반적으로 set이라는 접두사와 함께 변수의 이름을 사용하여 메서드를 정의한다.
[예제]
public class Person {
// private 멤버 변수
private String name;
private int age;
// name의 getter 메서드
public String getName() {
return name;
}
// name의 setter 메서드
public void setName(String name) {
this.name = name;
}
// age의 getter 메서드
public int getAge() {
return age;
}
// age의 setter 메서드
public void setAge(int age) {
// age가 0 이상일 때만 설정
if (age >= 0) {
this.age = age;
} else {
System.out.println("Age cannot be negative.");
}
}
public static void main(String[] args) {
Person person = new Person();
// setter 메서드를 사용하여 값 설정
person.setName("John");
person.setAge(25);
// getter 메서드를 사용하여 값 가져오기
System.out.println("Name: " + person.getName()); // 출력: Name: John
System.out.println("Age: " + person.getAge()); // 출력: Age: 25
}
}
주요 특징
- 캡슐화: 멤버 변수를 private로 선언하고 getter와 setter를 통해 접근함으로써, 외부 코드가 변수에 직접 접근하지 못하게 하고 데이터의 무결성을 유지할 수 있다.
- 유효성 검사: setter 메서드 내부에서 유효성 검사를 할 수 있다. 예를 들어, 나이(age)가 음수가 되지 않도록 제약을 걸 수 있다.
- 변경 용이성: 클래스의 내부 구현을 변경하더라도, getter와 setter를 통해 외부 인터페이스를 유지할 수 있다. 예를 들어, 멤버 변수의 이름을 변경하더라도 getter와 setter 이름을 그대로 유지하면 외부 코드에 영향을 주지 않는다.
장단점
- 장점:
- 데이터 캡슐화를 통해 클래스 내부 데이터를 보호할 수 있다.
- setter 메서드를 통해 데이터 설정 시 유효성 검사를 할 수 있다.
- 객체의 상태를 제어하고 관리하기 쉬워진다.
- 단점:
- 단순히 변수에 접근하는 경우에도 메서드를 사용해야 하므로 코드가 길어질 수 있다.
- 잘못된 사용 시 오히려 코드의 가독성이 떨어질 수 있다.
getter와 setter를 사용하면 객체 지향 프로그래밍의 기본 원칙인 캡슐화를 효과적으로 구현할 수 있으며, 데이터의 무결성을 유지하면서 클래스의 멤버 변수에 접근하고 수정할 수 있다.
'Computer Science' 카테고리의 다른 글
[객체지향프로그래밍] static 멤버 안에서 this 변수를 사용할 수 없는 이유 (0) | 2024.06.13 |
---|---|
[객체지향프로그래밍] static 변수에 대하여(non-static 변수와 어떻게 다를까?) (0) | 2024.06.12 |
[객체지향프로그래밍] JAVA의 garvage collection 개념 (0) | 2024.06.05 |
[객체지향프로그래밍] 절차적 언어 vs 객체지향 언어의 특징 (0) | 2024.06.05 |
[자료구조] Text pattern matching- Naive Approach 방법, 코드 구현 (0) | 2024.06.04 |