Java에서 클래스와 필드를 설계할 때 가장 먼저 고민해야 하는 게 **접근 제어자(Access Modifier)**다. 접근 제어자는 말 그대로 “어디까지 접근을 허용할 것이냐”를 결정한다.
잘 쓰면 객체의 안정성이 올라가고, 잘못 설계하면 유지보수가 지옥이 된다.
그래서 네 가지 접근 제어자를 정확하게 알고 쓰는 게 중요하다.
🔒 1. private — 가장 강력한 캡슐화
클래스 내부에서만 접근 가능.
class User { private String name; private void validate() { ... } }
- 같은 클래스 안에서만 접근할 수 있음
- 외부에서 절대 접근 불가
- 필드, 메서드를 완전히 숨기고 싶을 때 사용
- 객체지향에서 캡슐화의 핵심
실무에서 제일 자주 쓰는 접근 제어자
(필드는 거의 대부분 private + getter/setter 로 처리)
🟦 2. (default) — 패키지 내부 공개 (아무것도 안 쓰는 상태)
패키지 안에서만 접근 가능.
class UserService { ... } // ← default 클래스
- 접근 제어자를 안 쓰면 default
- 같은 패키지에 있는 클래스들은 접근 가능
- 다른 패키지에서는 접근 불가
언제 쓰냐?
- 외부에 절대 노출할 필요 없는 내부 유틸 클래스
- 패키지 단위의 모듈 경계 설정할 때
🟡 3. protected — 패키지 + 상속 관계 내부 공개
default 범위 + 상속받은 클래스에서 접근 가능.
class User { protected String role; } class Admin extends User { void checkRole() { System.out.println(role); // 가능 } }
- 같은 패키지면 접근 가능 (default와 같음)
- 다른 패키지여도 상속받은 클래스라면 접근 가능
실무에서 주로 쓰는 곳
- 상속 구조에서 서브클래스가 필요한 정보만 넘겨줄 때
- 확장 가능성을 열어두고 싶을 때
🟢 4. public — 전역 접근 허용
모든 곳에서 접근 가능.
public class UserController { public void createUser() { ... } }
- 어디서든 접근 가능
- API 엔드포인트, 라이브러리에서 외부 공개용 클래스 등에 사용
진짜 필요한 경우에만 사용해야 한다.
불필요하게 public을 쓰면 모듈 경계가 흐려지고 유지보수 난이도가 올라감.
📚 접근 제어자 비교표
접근 제어자같은 클래스같은 패키지상속받은 클래스외부
| private | ✔️ | ❌ | ❌ | ❌ |
| default | ✔️ | ✔️ | ❌ | ❌ |
| protected | ✔️ | ✔️ | ✔️ | ❌ |
| public | ✔️ | ✔️ | ✔️ | ✔️ |
'개발일지 > JAVA,SPRING' 카테고리의 다른 글
| @Bean 객체 만들기, @Component vs @Configuration (4) | 2025.05.23 |
|---|---|
| JAVA, JDK 에 대한 진실. (1) | 2025.05.20 |
| JAVA , 추상화,인터페이스 와 캡슐화 다루기. (0) | 2025.05.19 |
| 쿠키,세션 알아보기 (With Spring) (2) | 2025.05.19 |