접근 제어자 | 어디서 접근 가능? |
---|---|
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
을 쓰는 걸까?즉, "외부엔 최소한만 공개"하는 게 좋은 습관이야.
이걸 캡슐화(Encapsulation) 라고 해.
📌 정리
제어자 | 설명 |
---|---|
public |
어디서든 접근 가능 (완전 공개) |
private |
클래스 내부에서만 접근 가능 (보안용) |
get , set 메서드 |
private 값을 읽고 수정할 수 있는 창구 역할 |
캡슐화 | 정보를 보호하는 객체지향 원칙 (private + getter/setter) |