캡슐화의 기본 개념
정의
캡슐화는 객체의 데이터(상태)와 그 데이터를 조작하는 메서드(행위)를 하나의 단위로 묶는 것을 의미한다. 이를 통해 데이터와 메서드가 서로 밀접하게 연관되며, 객체의 내부 구현은 외부로부터 숨겨진다.
정보 은닉(information hiding)
객체의 내부 상태는 외부에서 직접 접근할 수 없도록 숨겨지며, 오직 객체가 제공하는 메서드를 통해서만 조작될 수 있다.
이로 인해 내부의 구현은 감추고 한 모듈 내에서의 응집도(얼마나 관련성이 높은 책임들이 할당되었는지)를 높여 외부로의 노출을 최소화한다. 이로 인해 코드의 유연성과 유지보수성을 높일 수 있다.
(정보 은닉은 캡슐화로부터 파생된 보조 개념이다. 캡슐화 = 정보 은닉은 아니다.)
캡슐화의 목적과 장점
유지보수성
객체의 내부 구현이 외부로부터 숨겨져 있기 때문에, 내부 구현을 변경하더라도 외부에 영향을 미치지 않는다.
재사용성
잘 캡슐화된 객체는 다른 프로그램이나 모듈에서 쉽게 재사용될 수 있다. 이는 코드의 재사용성을 높이고, 당연히 효율적인 개발을 할 수 있게 한다.
데이터 무결성
외부에서 객체의 내부 상태를 직접 조작할 수 없기 때문에, 객체는 데이터의 무결성을 유지할 수 있다. 데이터의 유효성 검사는 객체 내의 메서드에서 수행되어, 잘못된 데이터의 입력을 방지한다.
캡슐화의 구현 방법
접근 제어자
대부분의 객체지향 언어는 데이터와 메서드에 대한 접근을 제한하기 위해 접근 제어자를 제공한다. 예를 들어, Java에서는 private, protected, public과 같은 키워드를 사용하여 클래스 멤버의 접근 범위를 지정할 수 있다.
인터페이스
필요한 기능만을 외부에 노출하는 인터페이스를 제공해서, 다른 객체가 해당 객체의 내부 구현에 대해 알 필요 없이 객체를 사용할 수 있게 한다.
메서드를 통한 데이터 조작
객체의 상태 변경은 객체가 제공하는 메서드를 통해서만 이루어져야 한다. 이 메서드들은 필요한 유효성 검사를 수행하고, 적절한 방식으로 객체의 상태를 변경한다.
'이론 > OOP' 카테고리의 다른 글
[객체 지향] 다형성(polymorphism) (0) | 2024.01.02 |
---|---|
[객체 지향] 상속(inheritance) (0) | 2024.01.02 |
[객체 지향] 객체 지향 프로그래밍이란? (1) | 2024.01.02 |