개발공부/Java & Spring

[Java] private 멤버 변수를 사용하는 이유

승돌 2023. 4. 24. 17:36

객체의 멤버 변수에 직접 접근하지않도록 하기위해 클래스 안에 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