객체 지향의 기본 원리 중 하나인 캡슐화(Encapsulation) 한다는 것은, 데이터와 메소드를 단위 하나로 묶는 것을 말합니다.
데이터는 객체의 개념 중 상태를 대표하고, 메소드는 객체의 행동을 대표한다고 할 수 있습니다. 따라서 객체 하나는 캡슐 하나라고 말 할 수 있죠.
데이터와 메소드는 접근자를 통해 외부에 공개될지의 여부가 결정됩니다.
public이나 private 등의 키워드가 접근자로서의 역할을 합니다.
- public
메소드나 데이터에 public이라는 접근자를 지정하면 객체 외부에서도 직접적으로 객체의 메소드를 사용하고 데이터의 직접적인 변경이 가능합니다. - private
public과는 달리, 같은 클래스 내에서만 접근이 가능합니다. 다른 클래스에서는 접근하지 못합니다. - protected
같은 클래스와 상속관계에 있는 파생 클래스에서만 접근할 수 있습니다.
기반 클래스의 멤버를 파생 클래스에서 상속받아서 사용할 수 있게 할 경우에 사용합니다. - internal
동일한 물리적 파일 안에 있는 클래스에서만 접근 할 수 있습니다. - protected internal
protected와 internal의 조합입니다. 같은 물리적 파일 안의 파생 클래스에서만 접근 할 수 있습니다.
객체를 캡슐화하기 위해서는 보통 데이터는 private로, 메소드는 public으로 지정합니다.
이에 대한 이유는 '은행계좌'라는 객체의 예를 통해서 이해할 수 있습니다.
은행계좌 개체를 '입금하다()', '출금하다()' 라는 메소드와 '금리', '잔고'라는 데이터로 정의한다고 가정해 봅시다.
은행의 창구를 통해서만 돈을 입금하고 출금할 수 있어야 하기 때문에 은행계좌는 잔고를 직접적으로 변경할 수 없도록 객체를 구성해야 할 것입니다.
이를 위해서 금리나 잔고와 같은 데이터는 private로 지정해야 하고, 잔고와 같은 데이터의 변경은 외부에 공개(public)된 '입금하다()', '출금하다()' 메소드를 통해서 가능하게 해야 합니다.
외부의 객체와는 공개된 통로로만 접금하게 하고 내부적인 구조는 외부에 감춤으로써 하나의 부품처럼 캡슐화가 가능합니다. 객체의 캡슐화 특징과 그에 따른 이점은 다음과 같이 정리 할 수 있습니다.
- 모듈화
모든 내부적인 코드들은 객체 내에서 기술되고 외부와의 인터페이스 부분만을 공개해서 하나의 독립적인 단위를 만들 수 있습니다. 이렇게 만들어진 객체는 상속 등의 방법을 통해 재새용이 가능합니다. - 정보 은닉
객체 내의 변수와 같은 데이터를 직접적으로 제어하지 앟고 객체 안에서 내부적으로 제어합니다. 직접적으로 데이터를 조작할 경우 오류가 발생할 수 있기 때문입니다. 이렇게 데이터를 안정적으로 구조화 된 객체 내부에서 직접 제어하면, 데이터의 직접적인 조작에 따른 오류를 미연에 방지 할 수 있습니다.
[출처] 캡슐화(Encapsulation)|작성자 웃진
댓글 없음:
댓글 쓰기