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