본문 바로가기
Language/Java

[JAVA] 객체지향의 방어막, 접근 제어자(Access Modifier) 완벽 설계 가이드

by Papa Martino V 2026. 1. 15.
728x90

 

Java 접근 제어자(public, protected, default, private)
Java 접근 제어자(public, protected, default, private)

자바(Java) 언어를 배우기 시작하면 가장 먼저 마주하는 키워드가 public입니다. 하지만 단순히 관습적으로 붙이는 이 단어 뒤에는 객체지향 프로그래밍(OOP)의 핵심 철학인 캡슐화(Encapsulation)가 숨어 있습니다. 소프트웨어의 규모가 커질수록 "누가 이 데이터를 고칠 수 있는가?"를 통제하는 것은 시스템의 안정성을 결정짓는 결정적인 요소가 됩니다. 본 포스팅에서는 자바의 4가지 접근 제어자(public, protected, default, private)의 차이점을 상세히 분석하고, 실무에서 어떤 기준으로 이를 선택해야 하는지 전문적인 통찰을 공유하겠습니다.


1. 접근 제어자란 무엇인가?

접근 제어자는 클래스, 메서드, 멤버 변수의 '가시성(Visibility)'을 결정합니다. 이는 단순히 코드를 숨기는 것이 아니라, 외부 클래스가 내부 구현 방식에 의존하지 않도록 인터페이스와 구현을 분리하는 역할을 합니다.

적절한 접근 제어는 코드의 결합도(Coupling)를 낮추고 응집도(Cohesion)를 높여, 향후 코드 수정 시 발생할 수 있는 부작용(Side Effect)을 최소화합니다.

2. 4가지 접근 제어자의 상세 분석

① public: 제한 없는 완전 개방

어디서든 접근이 가능합니다. 주로 외부 라이브러리에 제공할 API나 공용 유틸리티 클래스에 사용됩니다. 하지만 과도한 public 사용은 객체의 무결성을 해칠 수 있으므로 주의해야 합니다.

② protected: 상속을 위한 배려

동일 패키지 내 클래스와 해당 클래스를 상속받은 하위 클래스(다른 패키지 포함)에서 접근할 수 있습니다. 프레임워크 설계 시 자식 클래스에서 기능을 확장하거나 커스터마이징할 수 있도록 열어줄 때 핵심적으로 사용됩니다.

③ default (package-private): 패키지 단위의 모듈화

접근 제어자를 명시하지 않았을 때 적용되는 기본값입니다. 동일 패키지 내부에서만 접근이 가능합니다. 패키지를 하나의 독립된 모듈로 보고, 모듈 외부에는 감추고 싶은 내부 로직을 구현할 때 적합합니다.

④ private: 철저한 은닉

오직 해당 클래스 내부에서만 접근할 수 있습니다. 객체지향의 핵심인 '정보 은닉'을 구현하는 가장 강력한 수단입니다. 멤버 변수는 기본적으로 private으로 설정하고, 필요한 경우에만 Getter/Setter를 통해 통제된 접근을 허용하는 것이 표준입니다.


3. 접근 범위 비교 요약표

각 제어자가 허용하는 범위를 한눈에 비교할 수 있도록 정리했습니다.

제어자 클래스 내부 동일 패키지 자식 클래스 전체(World)
public O O O O
protected O O O X
default O O X X
private O X X X

4. 실무 설계 팁: 어떤 제어자를 선택할 것인가?

전문적인 개발자라면 다음의 원칙을 기반으로 접근 제어자를 선택합니다.

  • 최소 권한의 원칙: 항상 가장 좁은 범위인 private부터 시작하세요. 외부 노출이 반드시 필요한 경우에만 단계를 높이는 것이 안전합니다.
  • API 설계와 캡슐화: 클래스의 필드(데이터)는 무조건 private으로 보호하고, 외부와의 소통은 public 메서드를 통해 유효성을 검증하며 수행하세요.
  • 확장성을 고려한 protected: 라이브러리 제작 시 사용자가 로직을 재정의해야 할 가능성이 있다면 protected를 고려하세요.

5. 마무리하며

접근 제어자는 단순한 문법이 아니라, "이 코드는 어떻게 사용되어야 한다"는 개발자의 의도를 전달하는 커뮤니케이션 도구입니다. 올바른 접근 제어자 사용을 통해 더 견고하고 유지보수가 쉬운 자바 애플리케이션을 구축하시길 바랍니다.


참고 문헌 및 출처

  • Oracle Java Documentation: Controlling Access to Members of a Class
  • Joshua Bloch, "Effective Java 3rd Edition", Pearson Education
  • James Gosling, "The Java Programming Language", Addison-Wesley

 

728x90