ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [객체지향의 사실과 오해] 7. 함께 모으기 ~ 부록 추상화기법
    책/객체지향의 사실과 오해 2023. 1. 25. 01:05
    반응형

    이번 장에서 설명하는 내용

    인터페이스와 구현을 잘 분리해야 한다.

    추상화는 복잡도를 줄이기 위해 다양한 방법을 사용한다.


     

     

     

    1. 객체지향 설계 관점


    객체지향을 설계할 때 3가지 관점으로 설계할 수 있다.

    개념 관점 : 사용자가 도메인을 바라보는 관점을 반영. 실제 도메인의 규칙과 제약을 최대한 유사하게 반영함

    명세 관점 : 객체가 협력을 위해 무엇을 하느냐에 초점을 맞춤. 인터페이스와 구현을 분리해서 설계함

    구현 관점 : 개발자에게 가장 익숙한 관점으로 객체의 책임을 어떻게 어떻게 수행하느냐에 초점을 맞춤

     

    좋은 설계란 한 클래스에서 개념 / 명세 / 구현 관점을 모두 볼 수 있어야 한다.

    클래스가 은유하는 개념은 개념 관점, 공용 인터페이스는 명세 관점, 속성과 메서드는 구현 관점을 반영해야 한다.


     

     

    2. 추상화 기법


    추상화를 사용하는 이유는 현실세계의 도메인에 대한 복잡성을 줄이고, 단순하고 직관적인 모델을 만드는데 사용하는 기술이다.

    대표적인 추상화 기법은 세 가지가 존재하는데, 각각의 기법 모두 복잡성을 줄이기 위해 특정 측면을 없다고 생각하며 설계한다.


    [분류와 인스턴스화]

    객체지향에서 분류는 특정 색안경을 끼고 본다고 생각하면 좋다. 예를 들어 아이스 아메리카노, 카푸치노, 맥북, 아이폰, 고양이, 강아지 이런 객체가 있다면 커피 범주에는 아이스 아메리카노, 카푸치노 객체만 보일 것이고, 애플 범주에는 맥북과 아이폰만 보일 것이다.

    분류는 위와 같이 다양한 객체들을 하나의 키워드로 묶어서 복잡도를 낮추는 행동을 한다. 이때 어떤 분류에 해당하는 객체를 만드는 것이 인스턴스화라고 부른다.


    [일반화와 특수화]

    일반화와 특수화는 타입의 범위라고 생각하는게 좋다. 만약 벵갈 고양이와 웰시코기가 있다면 벵갈과 웰시코기는 동물이라는 범주에 속하지만, 더 자세히 따지면 벵갈은 고양이 범주에 속하고, 웰시코기는 강아지 범주에 속한다.

    여기서 일반화는 좀 더 넓은 범위인 동물이고, 특수화는 고양이, 강아지라고 생각하면 좋다. 그래서 어떤 타입(동물)이 다른 타입(고양이)보다 일반적이면 그것(동물)을 슈퍼타입이라고 부르고, 어떤 타입(강아지)이 다른 타입(동물)보다 더 특수하다면 서브타입이라고 부른다.

    서브타입은 슈퍼타입이 가진 속성을 기본적으로 가지고 있지만, 서브타입만의 속성을 추가로 가지고 있다.

    일반화는 파편화된 사실을 모르더라도 큰 틀에서는 복잡성을 쉽게 이해할 수 있다.


    [집합과 분해]

    여기서 말하는 집합은 분할정복과 같이 큰 목표를 작은 목표로 나누어 안정적인 형태를 취해 전체를 구축하는 것이고, 분해는 전체를 부분으로 분할하는 것을 뜻한다. 집합은 내부에 있는 세부 사항을 감추기 때문에 추상화이면서 동시에 캡슐화를 만족한다.

    클래스 수가 많아지면 의존성을 관리하기 힘들어지고, 복잡도가 높아진다. 이때 더 큰 구조가 필요한데, 그것이 패키지 또는 모듈이라고 부른다. 이것은 클래스 집합을 하나로 묶어서 추상화하고 캡슐화하기 때문에 복잡도가 낮아지고, 코드를 확인할 때 다른 패키지를 왔다갔다하면서 확인하지 않아도 될 장점을 얻을 수 있다.


     

    반응형

    댓글

Designed by Tistory.