밤에 쓴 코드

OOP ) 타입, 추상화 본문

OOP

OOP ) 타입, 추상화

붱이🦉 2019. 4. 28. 23:30

타입, 추상화


추상화

  • 공통적인 특징들만 모으고 차이점을 배제하는 일반화 , 일반화 되어있는 정보에서 집중하지 않아도 되는 불필요한 정보를 제거해 나감으로서써 단순화를 하여 , 복잡도를 낮추고 좀 더 본래 목적에 집중할수 있게 해주는 작업

    • 예) 지하철 노선도

      초기 지하철 노선도는 지도와 일치하는 구체적은 지형까지 담고 있었다.
      사실적이지만 목적에서 벗어나는 정보들까지 한번에 너무많은 정보가 들어오다 보니 , 오히려 본래 의도를 전달하기 더욱 어려워 졌다. 
      지하철 노선도에서 중요한 것은 방향에 따른 역들의 순서를 전달하는 목적에 알맞지 않은 부가적인 정보가 너무 많았다.
      훗날 집중해야하는 부분과 집중하지 않아도 되는 부분을 분리해서 제거하여 , 더 본래의 의도에 더욱 맞게 사용할 수 있게 되었다. 

객체를 그룹화하자

  • 복잡도를 낮추기 위해 많은 객체들의 공통점을 기반으로 그룹을 묶는데 , 묶는 그릇을 개념 이라고 한다.

  • 개념을 이용하면 객체들을 그룹화 할 수 있다.

  • 객체가 개념의 일부가 될때 , 객체는 개념의 인스턴스가 된다.

  • 객체를 적절한 개념으로 분류하지 못하면 , 복잡도에 파묻힐 것이다.

    분류는 무엇일까 ? 
    특정 대상이 개념에 속하거나 속하지 않는 것을 확실히 하는것.

객체에서 중요한 것은 행동이다

  • 소프트웨어에 객체를 표현하고 ,객체는 특정 행동을 할 책임을 가지며, 협력한다.
  • 타입은 상태가 아니라 행동에 의해 결정된다.
    • 객체를 타입으로 분류함에 있어서 , 같은 분류의 객체인지 판단 할 떄에는 같은 행동을 하는 책임을 가지는 지로 결정된다.
      • 행동 == 책임 == 메시지

타입은 시간에 따른 상태의 변화를 추상화 한 것이다

  • 객체는 시간의 흐름(행동의 이력)에 따라서 상태의 값이 계속적으로 변한다.

  • 이를 타입으로 선언함으로써 , 계속 동적으로 변할 수 있는 값을 숨기고 , 정적 바꿔준다.

  • 이를 통해 시간에 따른상태변화라는 복잡성을 단순화 하였다.

    • 예)

    • 부엉이의 몸무게는 45 .. 46 ,… 아니 47 ?? …. 40 이다 -
      -> 부엉이는 몸무게라는 속성을 가진다.

타입의 계층

  • 특수화는 일반화 대비되며 , 공통적인 행위추가적으로 자신만의 행위를 수행할 수있는 것을 표현할 때 특수화 되었다고 한다,

    • '뱀'이라는 바닥을 다리없이 기어다니는 행동을 하고 , 혀를 낼름거리며 , 또아리를 튼다.
      '독사'는 위의 행동을 모두 수행하며 , 독을 중독시킬수 있는 추가적인 행동을 수행할 수 있다.
      이것은 '독사'는 '뱀'을 특수화한 개념으로 볼 수있다.
  • 특수화는 소프트웨어에서는 상속 으로 설명될 수 있다.


객체를 정적으로 표현하자

  • 객체를 표현할때 , 클래스라는 정적인 모델로 표현한ㄷ.

  • 객체를 분류하는 기준은 타입이며 , 타입을 나누는 기준은 객체의 행동 이 되어야한다.

Comments