객체의 멤버 변수에 직접 접근하지않도록 하기위해 클래스 안에 private 변수를 사용하고 public setter, getter 메서드를 사용하는데 이렇게 구현하는 이유가 궁금했음
그 이유는 캡슐화를 구현하기 위함
캡슐화란, 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶는 것
캡슐화를 하면 얻을 수 있는 이점은?
1. 데이터의 무결성을 보장할 수 있음
public 메서드를 사용하여 데이터에 접근하기때문에 클래스 외부에서 데이터를 무분별하게 변경할 수 없음
데이터의 정확성, 일관성, 유효성을 보장할 수 있음
2. 클래스 내부 구현을 숨길 수 있음
클래스 사용자는 public 메서드를 사용하여 클래스를 사용할 수 있고 클래스 내부 구현에 대해서 신경쓰지않아도됨
3. 코드의 유지보수성을 높일 수 있음
변수의 값을 변경하는 로직이 여러군데 분산되어 있으면, 변경할 때마다 모든 로직을 수정해야하는데 이러한 문제를 방지하기 위해 setter, getter 메서드를 제공해 변수의 값을 변경하는 로직을 하나의 메서드로 정의할 수 있음
예시 코드
public class Account {
private int balance; // 계좌 잔액
public Account(int balance) {
this.balance = balance;
}
public void deposit(int amount) {
balance += amount;
}
public void withdraw(int amount) {
if (amount > balance) {
throw new IllegalArgumentException("Insufficient balance");
}
balance -= amount;
}
public int getBalance() {
return balance;
}
}
1. 데이터의 무결성
계좌 잔액은 private 변수이기때문에 무분별하게 외부에서 변경할 수 없고 반드시 deposit, withdraw 메서드를 사용해서만 변경이 가능함
2. 내부 구현 은닉
withdraw, deposit 등의 메서드에서 수행하는 일들 즉, 계좌 잔액을 어떻게 변경하는지, 어떤 예외를 발생시키는지와 같은 내부 구현에 대해서 신경쓰지않아도 됨
3. 유지보수성
계좌 잔액을 변경하는 로직은 deposit, withdraw 메서드에만 구현되어있음. 변수의 값을 변경하는 로직이 여러군데 분산되어있지 않기때문에 유지보수하기 수월함
'개발공부 > Java & Spring' 카테고리의 다른 글
[Java] 생성자 (0) | 2023.04.24 |
---|---|
[Spring] CSR, SSR (0) | 2023.04.24 |
[Springboot] 기본 동작 환경 (0) | 2023.04.21 |