본문 바로가기
좋은 개발자가 되기위한 방법들/객체지향

객체지향 4대특성(캡슐화)

by chief_sac 2021. 9. 24.
반응형

 

 

우리가 개발을 하면서 인터페이스와 구현을 분리한다는 것은 변경될만한 부분에대해 객체의 내부에 꽁꽁 숨겨놓는 다는것을 의미합니다. 또한 이 방법을 실행 하기위해서는 객체지향에서 말하는 캡슐화에대한 이해를 명확히 하는것이 좋다 생각됩니다.

 

캡슐화의 정의


 

객체의 자율성을 보존하기 위해 구현을 외부로부터 감추는 것을 " 캡슐화 " 라고한다.
  • 객체란 상태행위를 구현할때 해당되는 중요한 데이터들을 보존하고, 보호하는 역할이 필요한데 그럼에도 충분히 협력적이고 자율적일수 있어야합니다.

  • 캡슐화는 보통 연관되는 변수, 함수를 Class로 묶는작업을 말합니다.

  • 하지만 일반적인 Class의 생성과는 다른점은 정보를 외부에서 접근하지 못하도록 하는 것인데 이로 인하여 캡슐화의 이명으로는 " 정보은닉 " (Ingormation hiding)이라 부릅니다.
  • 객체지향에서 캡슐화를 바라보는 관점은 크게 두가지관점입니다.
    • 상태와 행위의 캡슐화
    • 사적인 비밀의 캡슐화

 

 

상태와 행위의 캡슐화


 

위에서도 말했다 싶이 객체는 상태와 행동을 하나의 단위로 묶는 자율적인 실체이다.

 

전통적으로 시행되는 개발방법은 데이터와 프로세스를 엄격하게 구분하지만 객체지향에서는 하나의 틀로 묶음으로서 객체의 자율성을 보장한다.

 

  • 객체는 스스로 자신의 상태를 관리하고 변경하며 외부에 응답한는 행동조차 내부에 함께 보과한다 이러한 관점에서 캡슐화는 " 데이터 캡슐화(Data encapsulartion) "이라고 부른다.

  • 객체는 상태와 행위를 하나로 묶은 후에 외부에서는 반드시 접근해야하만 하는 행위만을 골라서 공용 인터페이스를 통해서 노출해야한다.

  • 그럼으로 데이터 캡슐화는 인터페이스와 구현을 분리하기 위한 전제 조건이라는 것이다.

  • 또한 객체는 자율적인 행동을 위해 자기자신의 상태를 스스로 관리할수 있어야하기 때문에 데이터의 캡슐화는 자율적인 객체를 만들기위한 전제조건이 될 수 있다.

 

 

사적인 비밀의 캡슐화


 

객체는 데이터의 상태와 행위를 가지고있기 때문에 만약 타인이 외부에서 조작할 수 있는 것을 대비하여 외부에서 특정 속성이나 메서드를 사용자가 사용할 수 없도록 숨겨놓아야 합니다. 그러면서도 의사소통을 원활하게 할 수 있기위해 특별한 경로만을 외부에 노출합니다.

  • 외부에서 객체와 의사소통을 할 수있는 경로를 공용인터페이스라고합니다.

  • 객체의 공용인터페이스는 외부에서 전송가능한 메세지의 집합을 뜻합니다.

  • 외부에 제공해야할 필요가 있는 메세지라면 객체의 공용인터페이스에 포함시키고 Private는 공용 인터페이스 뒤로 감춰 공격과 불필요한 간섭을 피할 수 있습니다.

  • 이러한 공용 인터페이스가 있음으로서 객체는자율성을 띌수 있게 되는 것입니다.

 

위의 내용을 정리하였지만 조금더 간추려서 정리하게된다면 객체지향은 내부,외부를 명확하게 구분하고 캡슐화를 통해 자율적인것을 보장하며 결합력은 낮추고 응집력은 증가시킬 수 있게 한다는 포인트를 살펴 볼 수 있었습니다.

객체를 생성할 때에는 외부와 내부를 명확하게 구분짓는다면 단순하면서 유연하고 변경하는것 조차 쉬운 객체를 만들수있을것입니다. 그것은 개발 설계에서 말하는 KISS(keep it simple)원칙을 지킬수 있는 것이 되겠습니다.

반응형