접근 제어자

클래스, 메서드, 변수에 대한 외부 접근 범위를 제한하는 키워드입니다.

4가지 접근 제어자

제어자같은 클래스같은 패키지자식 클래스외부
publicOOOO
protectedOOOX
default (없음)OOXX
privateOXXX
package com.example;

public class Person {
    public    String name;      // 어디서든 접근 가능
    protected int    age;       // 같은 패키지 + 자식 클래스
    int           height;    // 같은 패키지만 (default)
    private   String ssn;       // 이 클래스 내부만
}

캡슐화와의 관계

필드는 private으로 감추고, 필요한 경우만 public getter/setter로 노출하는 것이 캡슐화의 기본.

public class Account {
    private long balance;   // 외부 직접 접근 차단

    public long getBalance() { return balance; }

    public void deposit(long amount) {
        if (amount <= 0) throw new IllegalArgumentException();
        this.balance += amount;   // 검증 로직을 통해서만 변경
    }
}

상속에서의 주의점

자식 클래스가 메서드를 오버라이딩할 때 접근 범위를 좁힐 수 없음 (넓히는 것만 가능).

class Parent {
    protected void method() {}
}

class Child extends Parent {
    public void method() {}      // O protected → public (확장 가능)
    // private void method() {}  // X 컴파일 에러 (범위 축소 불가)
}

핵심 정리

→ 캡슐화 | 다형성

CSLOG에서 보기