Java 캡슐화 마스터: 데이터 은닉 실전 가이드
Java 캡슐화 마스터하기
명확한 예제로 Java 캡슐화와 데이터 은닉 원칙이 어떻게 코드를 보호하고 유지보수성을 높이는지 알아봅니다.
캡슐화란 무엇인가?
캡슐화는 관련 필드와 메서드를 단일 클래스 내에 묶는 관행입니다. 잘 정의된 인터페이스 뒤에 구현 세부 사항을 숨김으로써 결합도를 낮추고 더 견고한 코드베이스를 만듭니다.
데이터 은닉과 혼동되기 쉽지만 캡슐화는 단순히 데이터와 행동을 함께 묶는 더 넓은 개념입니다. 데이터 은닉은 캡슐화가 가능하게 하는 강력한 이점 중 하나입니다.
예제 1: 기본 캡슐화
class Area { // 면적 계산용 필드 int length; int breadth; // 차원 초기화 생성자 Area(int length, int breadth) { this.length = length; this.breadth = breadth; } // 면적 계산 및 출력 public void getArea() { int area = length * breadth; System.out.println("Area: " + area); } } class Main { public static void main(String[] args) { Area rectangle = new Area(5, 6); rectangle.getArea(); } }
출력
Area: 30
여기서 Area 클래스는 length, breadth 필드와 getArea() 메서드를 묶습니다. 하지만 필드가 패키지-프라이빗이므로 다른 클래스가 직접 수정 가능해 진정한 데이터 은닉은 달성되지 않습니다.
캡슐화만으로는 관련 멤버를 함께 유지할 뿐, 데이터 은닉은 명시적 접근 제어가 필요합니다.
캡슐화가 중요한 이유
- 관련 멤버를 논리적으로 그룹화하여 코드 가독성 향상
- 세터를 통한 검증 로직 강제로 잘못된 상태 방지. 예:
class Person { private int age; public void setAge(int age) { if (age >= 0) { this.age = age; } } }
- 게터/세터로 읽기 전용 또는 쓰기 전용 접근 제공
- 컴포넌트 분리 촉진; 각 모듈 독립적 진화 가능
- private 필드와 결합 시 진정한 데이터 은닉 지원
접근 제어자로 데이터 은닉
private 같은 접근 제어자는 클래스 내부를 외부 조작으로부터 보호하여 의도된 인터페이스만 상태를 수정할 수 있게 합니다.
예제 2: Private 필드로 데이터 은닉
class Person { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } } class Main { public static void main(String[] args) { Person p1 = new Person(); p1.setAge(24); System.out.println("My age is " + p1.getAge()); } }
출력
My age is 24
age가 private로 선언되어 직접 접근 시도(예: p1.age = 24;)는 컴파일 타임 에러가 되어 캡슐화의 보호 장벽을 강화합니다.
getAge()와 setAge()만 노출하여 필드 읽기/수정 방식을 제어, 견고한 객체 설계의 핵심 원칙입니다.
실무에서는 캡슐화를 채택해 명확하고 유지보수 가능하며 안전한 Java 애플리케이션을 만드세요. 기억하세요: 데이터 은닉은 별도 개념이 아니라 규율 있는 캡슐화의 결과입니다.