티스토리 뷰

Design Pattern

객체의 추상화 (Abstraction)

siyoon210 2018. 12. 4. 10:58
반응형

추상화(Abstraction)

객체 설계를 위해 추상화 작업은 중요한 것은 남기고, 불필요한 것은 제거하는 일입니다. (비즈니스 적으로 추상화가 잘 된 객체는 오히려 재사용성이 떨어지게 니다.) 


추상?

개념은 쉽게 이해가 되나 용어의 혼선이 오는 초보개발자가 있을 겁니다. (물론 제가 그랬다는 겁니다. 그리고 저와 같은 고통을 받고 있던 친구들도 포함이죠.) 이러한 분들이 생각하는 추상은 '구체적'의 반댓말로 모호한(?)것이라는 개념으로 이해하고 있기 때문입니다. 


실제 추상에 대한 사전적 정의는 아래와 같습니다.

추상(抽象) : 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용.


사전적 의미를 생각하면서 객체의 추상화를 진행해봅시다. 

앞서 예제로 설명한 '강아지, 사자, 코끼리, 고양이 ... ' 를 추상화 한다면 공통적인 속성인 '포유류'나 '동물'로 나타낼 수 있습니다. 하지만 '강아지'를 추상화 할때는 '강아지'라는 객체 그 자체에 집중해봐야 합니다. '강아지1, 강아지2, 강아지3, ... ' 처럼 많은 강아지들의  공통되는 특성을 생각해보는 것이죠. 만약 우리집 강아지가 특별한 개인기가 있다고 해도, 그 개인기는 모든 강아지들의 공통되는 특성은 아닙니다. 반대로 모든 강아지들은 주인을 사랑한다로 추상화 할 수 있습니다. 이런 사고의 방식으로 '강아지' 라는 객체를 추상화 합니다. 이제 이해가 되신다면, 위에서 설명한 추상클래스와 객체의 추상화라는 개념이 전혀 상충되지 않고 사전적 의미와도 자연스럽게 어우러 진다는 것을 알 수 있습니다.


객체 설계의 추상화

다시 객체 설계의 추상화로 돌아와보겠습니다. 중요한 것은 남기고, 불필요한 것은 제거하는 일로 말이죠. 실제 세상에 존재하는 강아지가 아닌 '로봇 경비  강아지'를 만든다고 생각해보겠습니다. '로봇 경비 강아지'는 낯선 사람을 보면 짖도록 만들 수 있습니다. 하지만 '로봇 경비 강아지'가 굳이 밥을 먹고, 잠을 자도록 만들 필요는 있을까요? 실제 세상의 모든 강아지가 밥을 먹고, 잠을 잔다고 하더라도 불필요한 기능입니다. 이런 고민을 지속하여 정말 개발자가 필요한 혹은 비지니스적으로 필요한 객체를 만들도록 설계한 것이 추상화가 잘된 설계라고 할 수 있습니다.

반응형

'Design Pattern' 카테고리의 다른 글

전략 패턴 (strategy pattern)  (0) 2019.01.23
객체 설계의 응집도란?  (2) 2019.01.15
객체지향의 4대 특성  (2) 2018.12.31
객체의 캡슐화(Encapsulation), 접근제어자  (0) 2018.11.21
객체의 다형성(polymorphism)  (0) 2018.10.30
댓글