정보처리기술사/03. SW공학

객체지향 설계에서 캡슐화란? 쉽게 이해하는 개념 정리

남훈 멘토 2025. 3. 3. 03:22

객체지향 프로그래밍(Object-Oriented Programming, OOP)에서 캡슐화(Encapsulation)는 데이터 보호와 정보 은닉을 위한 핵심 원칙입니다. 프로그램의 안정성을 높이고 유지보수를 쉽게 만들어주는 중요한 개념이죠.

이번 포스트에서는 캡슐화의 개념, 원리, 장점, 그리고 실생활에서의 예시까지 쉽게 정리해보겠습니다.

1. 캡슐화(Encapsulation)란?

캡슐화는 객체 내부의 데이터를 외부에서 직접 접근하지 못하도록 보호하는 기법입니다. 대신, 데이터를 안전하게 다룰 수 있도록 객체가 제공하는 메서드를 통해서만 접근할 수 있도록 제한합니다.

즉, 중요한 정보는 숨기고, 필요한 기능만 공개한다는 원칙을 따르는 것이죠.

📌 캡슐화의 핵심 개념


데이터 보호: 클래스 내부 변수(필드)에 private 접근 제한자를 사용하여 외부에서 직접 변경할 수 없도록 함.
정보 은닉: 객체 내부 구현을 감추고 필요한 기능만 공개하여 유지보수를 쉽게 만듦.
제어된 접근 제공: getter, setter 메서드를 사용해 필요한 경우에만 데이터를 읽거나 수정할 수 있도록 제한

2. 캡슐화 적용 예제 (Java 코드)

아래 예제는 Person 클래스에서 이름(name)과 나이(age) 데이터를 캡슐화한 코드입니다.

public class Person {
    private String name;  // private: 외부에서 직접 접근 불가
    private int age;

    // 생성자
    public Person(String name, int age) {
        this.name = name;
        setAge(age);  // 유효성 검사 적용
    }

    // Getter: 데이터 조회
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    // Setter: 데이터 수정 (유효성 검사 포함)
    public void setAge(int age) {
        if (age > 0) {
            this.age = age;
        } else {
            System.out.println("나이는 0보다 커야 합니다.");
        }
    }
}

🧐 코드 설명

• private 키워드를 사용하여 name, age 변수는 외부에서 직접 수정할 수 없음.
• getter 메서드(getName(), getAge())를 통해 데이터를 읽을 수 있음.
• setter 메서드(setAge())를 통해 나이가 0보다 작은 값으로 설정되지 않도록 보호.

이처럼 캡슐화를 적용하면, 객체의 내부 상태를 안정적으로 관리할 수 있습니다.

3. 캡슐화의 장점

✅ 1) 데이터 보호 (Data Integrity)

잘못된 데이터 입력을 방지하여 객체의 상태를 안전하게 유지할 수 있습니다.
예를 들어, setAge(-5) 같은 비정상적인 값이 입력되지 않도록 제어할 수 있죠.


✅ 2) 유지보수성 향상 (Maintainability)

내부 구현을 변경해도 외부 코드에 영향을 주지 않기 때문에, 코드를 수정할 때 안정성을 유지할 수 있습니다.


✅ 3) 모듈화(Modularity) 향상

캡슐화를 적용하면 객체의 기능이 독립적으로 동작할 수 있도록 설계할 수 있어, 재사용성이 증가합니다.


✅ 4) 보안(Security) 강화

중요한 데이터가 외부에서 무분별하게 변경되는 것을 방지할 수 있습니다.
예를 들어, 금융 애플리케이션에서 사용자의 계좌 잔고를 직접 변경할 수 있다면 심각한 문제가 되겠죠?

4. 실생활에서 보는 캡슐화의 예

🏎 자동차와 캡슐화

자동차를 운전할 때 엔진 내부 구조(데이터)에 직접 접근할 수 없고, 대신 핸들, 페달, 기어(메서드)를 통해 조작하는 방식과 같습니다.
• 운전자는 엑셀을 밟으면 가속하고, 브레이크를 밟으면 멈춘다는 기능만 사용 가능.
• 자동차의 엔진 내부에서 어떤 일이 벌어지는지는 알 필요 없음.

이처럼, 불필요한 정보를 숨기고, 필요한 기능만 제공하는 것이 바로 캡슐화의 핵심 원리입니다.

5. 결론

캡슐화는 객체 내부 데이터를 보호하면서도 안정적인 코드 유지와 보안성을 높이는 필수 개념입니다.
✔ 데이터는 숨기고, 필요한 기능만 공개하는 원칙을 따르는 것이 핵심!
✔ private 변수를 사용하고, getter와 setter 메서드로 데이터를 안전하게 다룸.
✔ 유지보수성이 좋아지고, 보안이 강화되며, 실수로 인해 데이터가 변경되는 것을 방지 가능.