본문 바로가기


Java

[OOP] 객체, 추상화, 캡슐화

객체

객체와 일반적인 값이 구분되는 것은 식별자때문이다. 객체를 고유하게 만들어주는 식별자 그게 바로 객체이다 식별자는 ID나 이름 같은 하나의 값일수도 ID와 이름이 합쳐진 또 다른 타입의 값일 수도있다.

 

추상화(Abstraction)

추상화는 특성을 일반화하고 세부사항을 제거하여 단순하게 만드는 과정이다. 모든 지형들을 표시하기 보다는 필요에 따라 필요한 특성들을 골라냄을 통해 복잡한 지형을 단순하게 길을 찾기 위한 용도만으로 사용할 수 있다.

이를 객체에 적용하여 하나의 새로운 타입으로 만들어 낼 수 있다. 

 

토끼, 강아지, 고양이 이라는 객체가 있다고 하자 이 객체들을  '동물' 이라는 개념으로 추상화할 수 있다.

추상화의 과정

  1. 공통점을 찾아 일반화한다.
    • 숨을 쉰다.
    • 스스로 움직일 수 있다.
      토끼가 빠르게뛰고 강아지가 짖는 등의 차이점은 무시한다.
  2. 특징의 세부사항을 제거하여 단순하게 한다.
    • 다리가 네개있다.
    • 몸에 털이 있다.
      이외의 특징들을 무시한다.

이를 통해 몸에털이있고 다리가 네개있으며 스스로 움직이고 숨을 쉴 수 있는 동물로 추상화 할 수 있다.

동물은 SuperType 이 되고 각 토끼, 강아지, 고양이는 SubType 이 된다.

 

캡슐화(Capsulation)

캡슐화는 정보의 은닉을 위해 외부로내부를 캡슐처럼 감싸서 숨기는 것을 의미한다. 자바로 쓰는 객체지향에서는 외부인터페이스를 두고 구현을 숨기는 것이 이에 해당된다. 캡슐화는 외부에 공개하는 인터페이스에는 외부에서 보고 접근가능한 정보만 공개하고 실 구현이나 상태변경등에 대한 내용은 내부로 숨기는 것이다.

자동차의 캡슐화

자동차라는 객체가 있다고 해보자 자동차는 외부의 클라이언트로는 사람이 있다. 사람은 자동차의 인터페이스에 해당하는 핸들, 브레이크, 계기판 등을 통해 자동차를 움직이고 상태를 확인할 수 있다. 자동차가 움직일 때 작동하는 엔진의원리나 브레이크를 눌렀을 때 어떤과정을 통해 자동차가 멈추지는 지는 사람은 모른다. 또한 계기판의 나타난 정보들이 어떤 과정을 통해 변경되는 지도 모른다.

여기서 캡슐화는 2가지로 구분된다.

  • 데이터 캡슐화
    행위나 상태를 캡슐화한다. 외부에 노출할 상태,행위와 내부에 감춰둘 상태,행위를 구분해서 감춘다. 
    • 외부 : 자동차의 계기판에 나타나는 상태, 핸들로 방향조절하라는 지시행위, 브레이크로 자동차를 멈추라는 지시행위
    • 내부 : 자동차의 내부에서 작동하는 데이터값, 엔진작동 원리
  • 사적인 비밀 캡슐화(은닉화)
    외부로 노출되어서는 안되는 민감한 정보를 접근이 막히도록 제한하는 캡슐화 자동차의 치명적인 상태값등의 변경을 막아두는 것 자바객체에서는 private 으로 숨기는 메소드정도가 될 수 있다.

끝!