- 클래스의 필드(멤버 변수)에 접근하고 값을 설정하거나 가져오는데 사용하는 메서드
[ 예시코드 ]
class Car {
// Member Variable
private String fuel;
private String name;
private int sale;
// Getter
public String getFuel() {
return fuel;
}
public String getName() {
return name;
}
public int getSale() {
return sale;
}
// Setter
public void setFuel(String Fuel) {
this.fuel = fuel;
}
public void setName(String name) {
this.name = name;
}
public void setSale(int sale) {
this.sale = sale;
}
}
- 위 예제코드에서 멤버변수의 접근제어자는 private으로 설정되어있다.
- private는 외부에선 접근이 불가하기 때문에 값을 꺼내거나 넣을때 메서드의 도움이 필요하다.
- Getter는 값을 꺼내올때, Setter는 값을 넣을때 사용하는 메서드이다.
[ Getter ]
- 멤버변수에 저장된 값을 외부로 return(반환)
- 매개변수 없이, 리턴값만 있는 메서드
- 메스드 형식은 getㅁㅁㅁ()
- ㅁㅁㅁ는 해당하는 멤버변수의 변수명 작성.
[ Setter ]
- 외부로부터 데이터를 받아 멤버변수에 저장
- 매개변수가 있고, 리턴값이 없는 메서드
[ 그럼 Getter()와 Setter()는 왜 사용할까? ]
- 위에서 private으로 선언된 멤버변수는 타 클래스에서 메서드를 통해서만 접근이 가능하다고 했다.
- 외부에서 멤버변수에 직접 접근할 경우 다음과 같은 문제가 발생할 수 있다.
1. 캡슐화 위반
- 캡슐화는 객체의 상태를 외부에서 은닉하여 객체의 내부구현을 보호하는 것이다.
- 객체의 내부구현에 의존성이 높아지고, 코드의 유지보수와 확장이 어려워진다.
2. 무결성 제어 어려움
- Setter()를 사용하지 않고 멤버변수에 직접 접근할 경우, 데이터에 대한 유효성 검사나, 제어를 할 수 없게 된다.
- 이는 잘못된 데이터가 객체의 저장되어 예기치 않은 동작을 유발할 수 있다,
3. 의도하지 않은 상태 변경
- 외부에서 멤버변수에 직접 접근할 경우, 객체의 상태가 의도하지 않게 변경될 수 있으며, 객체의 상태를 추적하
기 어렵게 하고, 예기치 않은 버그를 발생 시킬 수 있다.
4. 다형성 및 확장성 저하
- Getter()와 Setter()를 사용하지 않고 멤버변수에 직접 접근한 경우, 해당 멤버 변수를 사용하는 코드를 변경하기
어려워진다.
- 이는 코드의 재사용성, 다형성 및 확장성을 저하시킬 수 있다.
'#Java' 카테고리의 다른 글
| 배열(Array) (0) | 2024.04.05 |
|---|---|
| 생성자(constructor) (0) | 2024.04.04 |
| 재귀함수(Recusion Function) (0) | 2024.04.04 |
| Java 클래스(Class) (0) | 2024.04.03 |
| 오버로딩(Overloding) vs 오버라이딩(Overriding) (0) | 2024.04.03 |