타입과 추상화

su dong·2023년 6월 7일
1

질문거리

질문1) 일반화 특수화에서 행동이 더 일반적이면 상태도 당연히 더 일반적이지 않을까? 반대로 상태가 더 일반적이면, 행동도 더 일반적이지 않을까? 왜 상태가 아닌 행동에 따른 일반화, 특수화 구분을 강조한 걸까? (헉헉 아닐수도 있나?)

질문2) 타입은 행동에 따라 변하는 객체를 정적인 관점에서 볼 수 있도록 해준다는 말이 잘 이해가 안된다!

질문3) 다형성!!? 넌 뭐니

질문4) 객체와 타입의 차이점

질문5) p.100 "어떤 타입을 다른 타입의 서브 타입이라고 말할 수 있다"는 것이 의미하는 것은?

개발할때 가령 Entity 객체를 개발할때, 행동을 고려하고 -> 그 행동에 필요한 속성값들을 정의한다는게 정말로 낯설긴 하다...

일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 (훌륭한)컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 다루는 능력이라는 것이 명확해진다
-키스 데블린-

리처드 파인만: "현상은 복잡하다. 법칙은 단순하다. 버릴 게 무엇인지 알아내라."


추상화

복잡성 극복

어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.

복잡성을 다루기 위해 추상화는 두 차원에서 이뤄진다.[Kramer 2007].

공통점 차이점 찾기, 불필요한 세부사항 제거

  • 첫번째 차원은 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것이다.
  • 두 번째 차원은 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것이다.

모든 경우에 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이라는 점을 기억하라.


목적, 타입, 인스턴스

모든 객체는 목적에 따라 특정 개념(타입)의 인스턴스로 분류 할 수 있다.

개념을 특정 객체의 분류 장치로서 이야기할 때, 3가지 관점에서 언급할 수 있다.

  • 심볼(Symbol): 개념을 가리키는 간략한 이름이나 명칭
  • 내연(intension): 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할 수 있다.
  • 외연(extension): 개념에 속하는 모든 객체의 집합(set)

데이터 타입은 메모리 안에 저장된 데이터의 종류를 분류하는데 사용하는 메모리 집합에 관한 메타데이터다. 데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 대해 수행될 수 있는지를 결정한다.


객체의 분류

객체의 타입은 객체가 어떤 행동을 하냐, 어떤 책임을 맞고 있냐에 따라 분류된다.

객체의 타입과 다형성

다형성이란 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력을 뜻한다.
(= 객체의 타입은 객체의 내부 표현과는 아무런 상관이 없다)

타입의 계층

일반화(Supertype) > 특수화(Subtype) 관계, 상태에 따르는 것이 아니라 행동에 따른다.
서브타입으로 수퍼타입을 대체 가능하다.


객체 다이어그램(UML)

객체의 동적 변화를 표현

타입 모델

객체의 정적 모델을 표현


여러분이 객체지향 프로그래밍 언어를 이용해 클래스를 작성하는 시점에는 시스템을 정적인 관점에서 접근하는 것이다. 그러나 실제로 애플리케이션을 실행해 객체의 상태 변경을 추적하고 디버깅하는 동안에는 객체의 동적인 모델을 탐험하고 있는 것이다.

profile
매일매일 성장하는 백엔드 엔지니어 박지수입니다.

0개의 댓글