반응형

출처 : https://velog.io/@minthug94_/%EC%BA%A1%EC%8A%90%ED%99%94-Encapsulation

캡슐화(Encapsulation)는 객체 지향 프로그래밍(OOP)의 기본 원칙 중 하나로, 데이터와 그 데이터를 처리하는 코드(메서드 또는 함수)를 하나로 묶어서 외부로부터의 접근을 제어하는 것을 의미합니다. 이를 통해 객체의 내부 구현을 외부에 감추고, 오직 정의된 인터페이스를 통해서만 객체와 상호작용할 수 있도록 하는 것이 목적입니다.


캡슐화는 다음과 같은 특징을 가지고 있습니다

1. 데이터 은닉(Data Hiding): 객체 내부의 상태(멤버 변수)는 외부에서 직접 접근할 수 없도록 보호됩니다. 오직 객체의 메서드를 통해서만 데이터에 접근할 수 있습니다.

2. 메서드를 통한 접근 제어: 캡슐화된 객체의 동작은 해당 객체의 메서드를 통해서만 수행됩니다. 이를 통해 객체의 내부 동작을 조절하고 유효성을 검사할 수 있습니다.

3. 구현의 변경을 감춤: 객체 내부 구현이 변경되어도 외부에서는 영향을 받지 않습니다. 오직 인터페이스가 유지되는 한, 객체를 사용하는 코드는 안정적으로 유지됩니다.

4. 코드의 모듈화와 재사용: 캡슐화는 코드를 모듈화하여 코드의 일부를 수정하거나 교체할 수 있게 합니다. 이는 유지보수성을 향상시키고 코드의 재사용을 촉진합니다.

5. 보안 강화: 중요한 데이터를 보호하고, 외부에서는 필요한 기능만 사용할 수 있도록 하는데 도움이 됩니다.

간단한 예시로, 다음은 C++에서 클래스를 사용하여 캡슐화를 구현한 예시입니다:

#include <iostream>

class Car {
private:
    int speed;  // private 멤버 변수

public:
    Car() : speed(0) {}  // 생성자

    void setSpeed(int newSpeed) {
        if (newSpeed >= 0) {
            speed = newSpeed;
        } else {
            std::cout << "속도는 음수가 될 수 없습니다." << std::endl;
        }
    }

    int getSpeed() const {
        return speed;
    }
};

int main() {
    Car myCar;
    myCar.setSpeed(60);
    std::cout << "현재 속도: " << myCar.getSpeed() << "km/h" << std::endl;

    // speed는 private이므로 직접 접근할 수 없음
    // myCar.speed = -10;  // 오류: 'int Car::speed' is private within this context

    return 0;
}



이 예제에서 `Car` 클래스는 `speed`라는 private 멤버 변수를 가지며, 이를 설정하고 조회하는 메서드를 통해 외부에 접근을 허용하고 있습니다. 이를 통해 데이터의 은닉과 메서드를 통한 접근 제어가 이루어지고 있습니다.

반응형

+ Recent posts