추상화 기법


- 추상화는 도메인의 복잡성을 단순화하고 직관적인 멘탈모델을 만드는데 사용할 수 있는 인지수단


추상화 기법의 종류

분류와 인스턴스화

일반화와 특수화

집합과 분해


1. 분류와 인스턴스화


개념과 범주 

- 객체를 분류하고 범주로 묶는것

: 객체들의 특정 집합에 공통의 개념을 적용하는 것

: 개념이란 속성과 행위가 유사한 객체에 공통적으로 적용되는 관념이나 아이디어

ex)

자동차 범주에 적용되는 개념은 : 바퀴를 이용해 이동하는 운송수단

나무    범주에 적용되는 개념은 : 푸른 잎과 갈색의 줄기를 가진 다년생 생물


타입

= 객체지향 세계에서 개념을 가르키는 표준용어


분류는 객체와 타입 간의 관계를 나타낸 것

어떤 객체가 타입의 정의에 부합할 경우 그 객체는 해당 타입으로 분류되며자동으로 타입의 인스턴스가 된다. 


객체를 타입에 따라 분류하기 위해서는?

= ex) 자동차

자동차가 무엇인지에 대한 명확한 정의가 필요하고, 

그 이후에 어떤 객체가 자동차 타입의 인스턴스인지 여부를 판단할 수 있다.


타입의 세가지 관점

- 심볼    :    타입을 가르키는 간략한 이름이나 명칭

ex) '자동차' 라는 이름


- 내연    :    타입의 완전한 정의, 내연의 의미를 이용해 객체가 타입에 속하는지 여부 확인가능

ex) '바퀴를 이용해 이동하는 운송수단'이라는 정의


- 외연    :    타입에 속하는모든 객체들의 집합

ex) 자동차들의 집합 (아반떼,벤츠,말리부 등)


외연과 집합


단일분류 (single classification)

- 하나의 객체가 하나의 타입에만 속하는 것


다중분류 (multiple classification)

- 하나의 객체가 여러 타입에 속하는 것 ex) 노트북이면서 사무용컴퓨터


동적분류 (dynamic classifiaction)

- 객체가 자신의 타입을 변경할 수 있는 경우


정적분류 (static classification)

- 객체가 자신의 타입을 변경할 수 없는 경우


단순함을 위해서는 다중분류와 동적분류보다는

단일 분류와 정적 분류를 선택하는 것이 현명하다



클래스

타입을 구현하는 가장 보편적인 방법



2. 일반화와 특수화


범주의 계층

ex) 포유류 > 고양이 > 얼룩고양이

=> 얼룩고양이는 새끼를 낳고 젖을 먹여 기른다(포유류특징)


계층으로 쉽게 특징을 쉽게 추론가능하다.


일반화 : 얼룩고양이의 일반화

특수화 : 포유류의 특수화


서브타입

슈퍼타입 : 서브타입의 일반화

서브타입 : 슈퍼타입의 특수화


일반화와 특수화의 계층 구조에서 서브타입은 슈퍼타입이 가진 본질적인 속성과 함께 자신만의 추가적인 속성을 가진다.



상속

일반화와 특수화 관계를 구현하는 가장 일반적인 방법


리스코프 치환 원칙 (Liskov Subsitution Principle)

- 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행 할 수 있어야 한다.

즉 자식클래스가 부모클래스의 역할을 충실히 하면서 확장해나가야 한다.


코드 중복을 방지하고 공통 코드를 재사용하기 위한 언어적 메커니즘을 제공



3. 집합과 분해


부분과 관련된 세부사항을 숨기고 

부분을 사용해서 전체를 형성하는 과정


ex) 시계를 조립할 작은 부품으로 중간 부품들을 만들고

중간부품들을 결합하여 시계완성


조선소 같군











+ Recent posts