X

객체지향 모델의 캡슐화 (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
도리: