🔸 접근 제어자(access modifier)란?

접근 제어자 어디서 접근 가능?
public 어디서나 (전체 공개)
protected 같은 패키지 + 상속 클래스
(default) 같은 패키지 내에서만
private 해당 클래스 내부에서만

✅ 코드 예시: public vs private

public class Person {
    public String name;    // 공개
    private int age;       // 비공개

    public void sayHello() {
        System.out.println("안녕하세요, 저는 " + name + "입니다.");
    }

    // private 필드에 접근하려면 메서드를 통해 접근
    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}


✅ 사용 예

public class HelloApplication {
    public static void main(String[] args) {
        Person p = new Person();

        // public 필드: 직접 접근 가능
        p.name = "박하";

        // private 필드: 직접 접근 ❌
        // p.age = 30; ← 오류!

        // 대신 메서드를 통해 간접 접근 ✅
        p.setAge(30);
        System.out.println("나이: " + p.getAge());
    }
}


💬 왜 private을 쓰는 걸까?

  1. 잘못된 값이 들어가지 않도록 보호
  2. 객체의 내부 상태를 외부에서 함부로 바꾸지 못하게 함
  3. 유지보수 쉬움

즉, "외부엔 최소한만 공개"하는 게 좋은 습관이야.

이걸 캡슐화(Encapsulation) 라고 해.


📌 정리

제어자 설명
public 어디서든 접근 가능 (완전 공개)
private 클래스 내부에서만 접근 가능 (보안용)
get, set 메서드 private 값을 읽고 수정할 수 있는 창구 역할
캡슐화 정보를 보호하는 객체지향 원칙 (private + getter/setter)