getter와 setter는 데이터 캡슐화를 구현하는 데 사용되는 메서드입니다. 주로 private으로 선언된 인스턴스 변수의 값을 읽거나 설정하는 역할을 합니다. 이 메서드들은 객체 지향 프로그래밍에서 정보 은닉(information hiding)을 실현하는 데 중요한 역할을 합니다.
Getter 메서드
Getter 메서드는 주로 인스턴스 변수의 값을 반환하는 역할을 합니다. 일반적으로 다음과 같은 특징을 가집니다:
- 접근 제어자: 대부분 public으로 선언되어야 합니다. 외부에서 접근할 수 있어야 변수 값을 읽을 수 있습니다.
- 메서드 이름: 보통 get으로 시작하며, 그 뒤에 변수명의 첫 글자를 대문자로 시작한 이름을 붙입니다. 예를 들어, getName() 메서드는 name 변수의 값을 반환합니다.
- 반환 값: 메서드가 읽어야 할 변수의 데이터 타입과 일치하는 값을 반환합니다.
public class Person {
private String name;
// Getter 메서드
public String getName() {
return name;
}
}
Setter 메서드
Setter 메서드는 주로 인스턴스 변수의 값을 설정하는 역할을 합니다. 일반적으로 다음과 같은 특징을 가집니다:
- 접근 제어자: 대부분 public으로 선언되어야 합니다. 외부에서 접근하여 변수 값을 설정할 수 있어야 합니다.
- 메서드 이름: 보통 set으로 시작하며, 그 뒤에 변수명의 첫 글자를 대문자로 시작한 이름을 붙입니다. 예를 들어, setName(String name) 메서드는 name 변수의 값을 설정합니다.
- 매개변수: 메서드가 설정해야 할 변수의 데이터 타입과 일치하는 매개변수를 받습니다.
- 역할: 주로 입력된 매개변수의 값을 인스턴스 변수에 대입하여 설정합니다.
public class Person {
private String name;
// Setter 메서드
public void setName(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
// Setter를 사용하여 변수 설정
person.setName("Alice");
// Getter를 사용하여 변수 읽기
String personName = person.getName();
System.out.println("Person's name: " + personName); // 출력: Person's name: Alice
}
}
위 예제에서 Person 클래스의 setName() 메서드는 name 변수의 값을 설정하고, getName() 메서드는 name 변수의 값을 반환합니다. 이렇게 하면 외부에서 Person 객체의 name 변수에 접근하거나 값을 설정할 수 있지만, 직접적으로 변수에 접근할 수 없기 때문에 데이터 캡슐화를 실현할 수 있습니다.
Getter와 setter는 객체의 상태를 캡슐화하고, 외부에 안전하게 접근할 수 있는 인터페이스를 제공하여 객체 지향 프로그래밍의 캡슐화 원칙을 지원합니다.
데이터 캡슐화의 장점
- 데이터 보호: 외부에서 데이터에 직접 접근하는 것을 제한하여 데이터 무결성을 유지합니다.
- 유지보수 용이: 클래스의 내부 구현을 변경하더라도 외부 인터페이스는 동일하게 유지할 수 있습니다.
- 코드의 가독성 및 재사용성 향상: 명확한 인터페이스를 제공하여 코드를 더 쉽게 이해하고 재사용할 수 있습니다.
게터(getter)와 세터(setter)는 객체 지향 프로그래밍에서 캡슐화 원칙을 구현하기 위해 사용되는 메서드입니다. 이 메서드들은 클래스의 멤버 변수에 접근하고 수정할 수 있는 방법을 제공합니다. 일반적으로 멤버 변수는 private으로 선언하여 직접 접근을 제한하고, 대신 public으로 선언된 게터와 세터 메서드를 통해 간접적으로 접근하도록 합니다.
'Java Study' 카테고리의 다른 글
this 키워드와 super 키워드 (0) | 2024.07.15 |
---|---|
접근 제어자(access modifier) (0) | 2024.07.15 |
클래스(static) 메서드와 인스턴스 메서드 (0) | 2024.07.11 |
리팩토링(Refactoring) (0) | 2024.07.10 |
"섀도잉(Shadowing)"과 "하이딩(Hiding)" (0) | 2024.07.08 |