예제

은행 계좌를 나타내는 클래스인 BankAccount

BankAccount에 잔고 역할인 balance는 외부에서 클래스에서 직접 접근하지 못하도록 private 사용

잔고는 Getter & Setter 형식으로만 접근 가능

 

 

구현

1. 최소한의 공개 - 필요한 것은 public으로 공개, 그 외는 private 또는 protected로 보호한다.

public class BankAccount {
    private double balance; // 잔고
}

 

2. 정보 은닉 - private를 사용해 객체 상태를 숨기고 public 메서드를 통해 안전하게 데이터에 접근 및 수정한다.

public class BankAccount {
    private double balance; // 잔고

    // 잔고 조회
    public double getBalance() {
        return balance;
    }

    // 입금
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }
}

 

3. 유효성 검사 - 메서드 내에서 입력 데이터의 유효성을 검사하고, 유효하지 않은 경우 예외 발생

public void deposit(double amount) {
    if (amount <= 0) {
        throw new IllegalArgumentException("입금 금액은 양수여야 합니다.");
    }
    balance += amount;
}

 

4. getter & setter 사용 - 필드에 직접 접근하는 것이 아니라 getter(getBalance), setter(setBalance) 메서드 사용해 데이터 접근 및 수정한다.

public class BankAccount {
    private double balance; // 잔고

    // 잔고 조회 - Getter
    public double getBalance() {
        return balance;
    }

    // 잔고 설정 - Setter
    public void setBalance(double balance) {
        this.balance = balance;
    }
}

 

5. final 사용 - 필드나 메서드를 final로 선언하여 불변성을 유지하거나 메서드 오버라이딩을 방지한다.

public final class ImmutableClass {
    private final int value; // 불변 필드

    public ImmutableClass(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

 

6. static 활용 - 유틸리티 메서드나 상수에 static을 사용하여 클래스 수준에서 접근 가능하도록 만든다.

public class MathUtils {
    public static final double PI = 3.14159265359;

    public static int add(int a, int b) {
        return a + b;
    }
}

 

7. 주석 - 코드 동작과 사용법 명확하게 설명

/**
 * 이 클래스는 은행 계좌를 나타냄.
 * @author hmw0908
 */
public class BankAccount {
    // ...
}

 

반응형