ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [객체지향의 사실과 오해] 3. 타입과 추상화
    책/객체지향의 사실과 오해 2023. 1. 12. 20:59
    반응형

    이번 장에서 설명하는 내용

    추상화는 개념을 사용하여 단순화한다.

    타입(개념)은 행동에 의해 결정된다.

    분류, 일반화는 추상화를 위한 도구이다.

     


     

     

     

    1. 객체지향과 추상화


    추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이라는 점을 생각할 수 있다. 그래서 추상화에서 중요한 점은 필요한 내용만 가지고 오면서, 공통점은 하나로 합치는 것이다.

     

    현실 세계에서는 수 많은 객체들이 존재하지만, 이 객체들을 개별적인 단위로 취급해서 본다면 알아야할 내용이 너무나 많아진다. 예를 들어서 샤프심이 다 떨어진 샤프, 샤프심이 2개 들어간 샤프, 내부가 고장난 샤프, ... 이렇게 샤프 하나를 개별적인 단위로 취급하면 너무 복잡하다. 그래서 우리는 이런 샤프들을 하나의 샤프 그룹으로 생각하고, 더 나아가면 샤프와 연필, 볼펜, 지우개를 필기도구로 합쳐서 부르듯이 객체를 특정 그룹으로 묶어 상황을 단순화하려고 노력한다.

     

    이처럼 공통점을 기반으로 객체들을 묶기 위한 그릇을 개념(concept)라고 부른다.

    개념을 사용하면 매우 많은 객체들을 소수의 그룹으로 단순화할 수 있다.


    [개념의 세 가지 관점]

     

    개념은 심볼, 내연, 외연으로 설명할 수 있다.

    - 심볼 : 개념을 가리키는 간략한 이름이나 명칭

    - 내연 : 개념의 완전한 정의

    - 외연 : 개념에 속하는 모든 객체의 집합

     

    휴대폰이라는 개념을 개념의 심볼, 내연, 외연을 아래와 같이 적을 수 있다.

    심볼 : 휴대폰

    내연 : 카톡도 하고, 노래도 듣고, 전화도 하고, 인터넷도 할 수 있는 한 손으로 기기의 전체를 잡을 수 있는 전자기기

    외연 : 갤럭시 노트, 아이폰, ...

     

    이런 개념을 통해 객체들을 적절히 분류한다면 유지보수가 용이하고, 변경에 유연하게 대처할 수 있게 된다.


    [분류는 추상화를 하기 위한 도구]

     

    추상화를 하는 방법은 아래와 같이 정리할 수 있다.

    - 공통점은 취하고, 차이점은 버리는 일반화를 통해 단순화한다.

    - 중요한 점을 강조하기 위해 불필요한 내용은 제거하여 단순화한다.

     

    개념은 객체들의 복잡성을 극복하기 위한 추상화 도구이다.

    갤럭시 노트, 아이폰을 휴대폰이라는 개념으로 묶은 것은 공통점만 취하는 첫번째 방법을 적용한 결과이다.

    휴대폰에 속하는 객체들의 중요한 공통점은 여러가지 기능을 사용하면서 이것이 한 손에 들어올 수 있는 전자기기를 뜻한다. 나머지 내용은 불필요한 내용이기 때문에 제거한 것으로 이것은 두번째 방법을 적용한 결과이다.


     

     

     

    2. 타입


    타입(Type)은 근본적으로 개념과 동일한 의미를 가지지만, 코드에서는 살짝 다르게 사용하고 있다.

    컴퓨터 내부 메모리에서는 0과 1로만 값이 이루어지고 있다. 그래서 만약 사람이 '10111000'라는 값을 본다면 이것이 무엇을 나타내는 것인지 전혀 모른다. 그래서 메모리 안의 데이터에 특정한 의미를 부여하기 시작하며, 타입 시스템이 성장하기 시작했다.

    타입 시스템의 목적은 데이터가 잘못 사용되지 않도록 제약사항을 부과하는 것이다.


    [객체와 타입]

    위에서 언급한 타입과 객체지향의 타입은 긴밀한 관계이다.

    객체에서 중요한 것은 객체의 행동이라고 지금까지 말해왔는데, 객체의 타입에도 그 내용이 해당된다.

    - 어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다.

    - 객체의 내부적인 표현은 외부로부터 철저히 감춰진다.

     

    위 내용을 토대로하면 아래의 의미를 지닐 수 있다.

    - 동일한 타입에 속한 객체는 데이터가 다르더라도 동일한 메시지를 수신하고 처리할 수 있다. (다형성)

    - 객체지향 설계는 외부의 행동만을 제공하고, 데이터는 행동 뒤로 감춰야 한다. (캡슐화)


     

     

     

    3. 타입의 계층


    갤럭시 노트, 아이폰은 휴대폰 대신 스마트폰이라고도 부를 수 있다.

    휴대폰의 기본적인 기능은 한 손으로 전체 기기를 잡을 수 있으며, 문자나 통과가 가능한 전자기기이다.

    여기에 스마트폰은 인터넷과 카톡등을 할 수 있으므로 휴대폰의 기능을 가지면서 특화된 기능이 더 있는 것이다.

    여기서 휴대폰은 스마트폰을 포괄하는 큰 개념이다. 이런 두 개념의 관계를 일반화/특수화 관계라고 부른다.


    [일반화/특수화 관계]

    일반화와 특수화는 동시에 일어난다. 스마트폰은 휴대폰을 특수화하는 것이므로 스마트폰은 휴대폰의 부분집합이라고 말할 수 있고, 반대로 휴대폰은 스마트폰에서 일부 행동만 가지는 타입으로 일반화한 것이다.

    이런 일반화와 특수화 관계도 결국엔 객체 내부 데이터가 아니라 객체가 외부에 제공하는 행동이다.

     

    [슈퍼타입과 서브타입]

    일반적인 타입을 슈퍼타입(Supertype)이라 부르고, 특수한 타입을 서브타입(Subtype)이라고 부른다.

    일반적으로 서브타입은 슈퍼타입의 모든 행동을 할 수 있으므로 슈퍼타입은 서브타입에 상속된다.


    [일반화는 추상화를 위한 도구]

    추상화를 하는 방법중에 두번째 방법은 '중요한 점을 강조하기 위해 불필요한 내용은 제거하여 단순화'하는 것이다.

    여기서 갤럭시 노트와 아이폰을 휴대폰이라고 불렀는데, 카톡과 인터넷등을 제거하고 문자와 통화가 가능한 곳에 집중하여 불필요한 스마트폰의 특징을 삭제해서 단순하게 만들었다.

     

    이렇게 해서 결론적으로 분류, 일반화를 사용하여 추상화를 하였다.

    - 분류 : 갤럭시 노트와 아이폰은 차이점이 여러가지가 있지만, 둘의 공통점만을 보고 스마트폰으로 분류

    - 일반화 : 스마트폰을 더 단순하게 봐서 불필요한 특성을 배제하고, 포괄적인 의미인 휴대폰으로 일반화


     

     

     

    4.  정적 모델


    타입은 시간에 따라 동적으로 변하는 객체의 상태를 시간과 무관하게 정적인 모습으로 다룰 수 있게 한다.

    이런 점에서 타입은 추상화라고 말할 수 있다. 특정 시점에서 시간이라는 요소와 상태 변화라는 요소를 제거하고, 정적인 관점에서 객체의 동적인 특성을 추상화할 수 있다.


    [클래스]

    객체지향 프로그래밍에서는 클래스를 사용하여 타입을 구현하고 있다. (클래스와 타입이 동일한게 아님)

    타입은 객체를 분류하기 위해 사용하는 개념이고, 클래스는 타입을 구현할 수 있는 메커니즘중에 하나이다.

    결국 객체지향에서는 객체를 분류하는 기준은 타입이고, 동적으로 변하는 객체의 '상태'와 상태를 변경하는 '행위'가 중요하다


     

    반응형

    댓글

Designed by Tistory.