객체지향 모델의 캡슐화 (Encapsulation)

1. 객체 정보 은닉, 객체지향 모델의 캡슐화의 개념 및 목적

(1) 캡슐화 (Encapsulation)의 개념

개념도개념
캡슐화 개념관련 있는 데이터(속성)와 기능(메서드)을 하나의 클래스로 묶고, 구현 내용을 외부에 숨겨 외부의 직접적인 접근을 제한하는 객체지향 모델의 특성

(2) 캡슐화의 목적

내부 데이터 보호– 외부에서 클래스 내부의 데이터/기능에 직접 접근 및 조작 차단
모듈 독립성 향상– 객체의  응집도 향상, 결합도 최소화
  • 캡슐화는 정보 은닉을 확장하여 내부 데이터 및 메소드를 묶어 처리하는 개념

 

2. 객체지향 모델의 캡슐화 원리 및 접근제한자

(1) 캡슐화의 원리

캡슐화 원리
  • 외부 메서드에서 선언된 클래스 내 private 접근제한자의 name 변수에 직접 접근이 불가하고, public 접근제한자의 getName() 메서드를 통해 name 변수에 접근하도록 제한

(2) 캡슐화의 접근제한자 (접근 범위 순서)

접근 구분접근제한자역할
클래스 내부private– 선언된 클래스 내부에서만 접근 가능
동일 패키지default– 클래스 내부, 동일 패키지 접근 가능
protected– 클래스 내부, 동일 패키지, 자식 클래스 접근 가능
클래스 외부public– 클래스 내부, 동일/다른 패키지, 자식 클래스 접근 가능
  • 클래스 내 응집도를 높이고 접근제한자를 통해 최소한의 기능 노출로 결합도 최소화

 

3. 객체지향 모델의 캡슐화 코드 사례

class Engineer {
  // name 변수는 Engineer 클래스 내부에서만 접근 가능
    private String name;

    // 데이터를 가져오는 메서드
    public String getName() { return name; }

    // 데이터를 설정하거나 수정하는 메서드
    public void setName(String name) {
        this.name = name;
    }
}

public class Dori {
    public static void main(String[] args){
    // 생성된 Engineer 객체 내 메서드를 통해 변수에 접근(캡슐화)
        Engineer e = new Engineer();
        e.setName("dori");
        System.out.println("Engineer's name: " + e.getName());
    }
}
  • 객체 데이터와 기능을 보호하고 직접 개입이 불가하도록 적절한 접근제한자를 통해 객체지향 모델 설계 필요

 
[참고]

  • 리프레임, 최은만, 객체지향 설계와 패턴 워크북, 2024.2

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^