[Java] 자바 캡슐화의 이해 (Encapsulation)

728x90

캡슐화(Encapsulation)란?

캡슐화는 객체지향 프로그래밍(OOP)의 중요한 개념 중 하나로 데이터를 외부에서 접근할 수 없도록 숨기고 필요한 경우에만 공개된 메서드를 통해 접근하도록 하는 원칙이다.

이를 통해 데이터의 무결성을 보호하고 객체 내부의 상태를 직접 변경하지 못하게 한다.

 

접근 제어자와 캡슐화

자바에서는 접근 제어자(Access Modifiers)를 통해 필드와 메서드의 접근 범위를 제어할 수 있다. 접근 제어자는 데이터와 메서드가 외부에 어느 정도 노출될지를 결정하며 대표적인 접근 제어자는 다음과 같다.

  • public: 어디서든 접근 가능
  • private: 같은 클래스 내에서만 접근 가능
  • protected: 같은 패키지 및 상속 관계에서 접근 가능
  • default(패키지 접근): 같은 패키지 내에서만 접근 가능

왜 캡슐화를 해야 하는가?

  • 데이터 무결성 보호: 필드를 외부로 노출하지 않고 getter나 setter와 같은 메서드를 통해 제한된 방식으로만 데이터를 수정하거나 읽을 수 있게 하여 데이터의 무결성을 보호한다.
  • 모듈화: 클래스의 내부 구현을 감추어 외부에선 클래스의 동작 방식만 알면 된다. 이를 통해 모듈화가 쉬워지고 유지보수성을 높일 수 있다.
  • 의도된 데이터 사용 보장: 필드 자체를 노출하지 않고 메서드로 데이터를 노출할 경우 데이터를 검증하거나 변환한 뒤 반환할 수 있다.

필드와 메서드의 접근 범위 설정

  • 필드: 필드는 가능한 한 private으로 설정하고 외부에서 필드에 접근해야 할 경우 getter, setter를 통해 접근하는 것이 일반적이다. 이렇게 하면 필드에 대한 직접 접근을 차단하고, 값 설정 시 유효성 검사를 할 수 있다.
  • 메서드: 메서도 또한 가능하면 private으로 숨긴 뒤 외부에서 필요한 경우에만 public으로 노출하는 것이 좋다.

상속과 캡슐화

상속(Inheritance)을 사용하면 부모 클래스의 필드와 메서드를 자식 클래스가 상속받게 됩니다. 이때 부모 클래스에서 public으로 선언된 필드나 메서드는 자식 클래스에서도 그대로 노출된다. 그러나 모든 경우에 상속을 사용하는 것이 적절한 것은 아니다. 때로는 상속보다 조합(Composition)을 활용하는 것이 더 나은 방법일 수 있다. 조합은 객체를 구성요소로 포함하여 새로운 기능을 추가하는 방식으로 상속과 달리 의도치 않은 필드나 메서드의 노출을 피할 수 있다.

728x90

'Backend > Java' 카테고리의 다른 글

[Java] DTO와 VO의 차이점  (0) 2024.10.15
[Java] 객체 생성 방법  (0) 2024.10.15
[Java] JVM : Java Virtual Machine  (0) 2024.10.08
[Java] Exception - 자바 예외 처리  (0) 2024.10.07
[Java] JDK와 JRE의 개념과 차이점  (2) 2024.09.30