반응형
Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

지식조각모음

추상화 기법 본문

책/객체지향의 사실과 오해

추상화 기법

y00 2023. 9. 19. 15:05
반응형

추상화 기법

  • 추상화: 도메인의 복잡성을 단순화하고 직관적인 멘탈 모델을 만드는 데 사용할 수 있는 가장 기본적인 인지 수단이다.

추상화 기법의 종류

  • 분류와 인스턴스화
    • 분류: 객체의 세부 사항을 숨김. 인스턴스 간의 공통적 특성을 기반으로 범주를 설정
    • 인스턴스: 분류의 역. 범주로부터 객체를 생성
  • 일반화와 특수화
    • 일반화: 범주 간 공통적인 특성을 강조
    • 특수화: 일반화의 역
  • 집합과 분해
    • 집합: 세부사항 보다 부분을 이용해서 전체를 형성하는 과정
    • 분해: 집함의 역. 전체를 부분으로 분리.

분류와 인스턴스화

개념과 범주

  • 개념
    • 속성과 행위가 유사한 객체에 공통적으로 적용되는 관념
    • = 타입
    • 예: 승용차, 버스, 트럭 ➡️ 바퀴가 있고 사람들을 이동시키는 운송수단 ➡️ 자동차
  • 분류
    • 객체에 개념을 적용하는 과정
    • 객체를 특정한 개념의 집합의 구성 요소로 포함시킨다.
    • 예: 승용차를 자동차라는 개념을 적용할 수 있는 집합에 포함시킨다.
  • 객체
    • 개별적인 현상들
  • 타입
    • 하나의 개념
    • 객체를 분류하여 하나의 타입과 연관시킨다.
    • 타입을 인스턴스화하여 객체를 생성한다.

타입

객체를 타입에 따라 분류하기 위해서는 세 가지 정의가 필요하다.(참고: 타입과 추상화)

  • 심볼: 타입을 가리키는 간략한 이름이나 명칭
  • 내연: 타입의 정의
  • 외연: 타입에 속하는 모든 객체들의 집합

예를 들면 다음과 같다.

  • 심볼: 자동차
  • 내연: 원동기를 동력원으로해서 주행하는 사람이나 화물을 운반하는 기계
  • 외연: 승용차, 버스, 트럭 등

내연을 만족하면 외연의 한 요소로 포함된다. 그리고 이 집합의 원소들을 심볼로 부른다.


외연과 집합

외연은 집합이다. 그리고 하나의 객체는 서로 다른 집합에 동시에 속할 수 있다.

  • 단일 분류: 한 객체가 한 시점에 하나의 타입에만 속하는 것. 대부분의 프로그래밍 언어에서 지원
  • 다중 분류: 한 객체가 한 시점에 여러 타입에 속할 경우

다중 분류는 하나의 객체가 서로 다른 타입의 인스턴스가 되도록 허용한다. ➡️ 인터페이스 이야기일까??

  • 동적 분류: 객체가 한 집합에서 다른 집합의 원소로 자신이 속하는 타입을 변경할 수 있는 경우
  • 정적 분류: 객체가 자신의 타입을 변경할 수 없는 경우. 대부분의 프로그래밍 언어에서 지원

클래스

타입을 구현하는 가장 보편적인 방법. 클래스 != 타입.


객체지향 패러다임은 생물적 분류와 비슷하다. 만약 객체들이 동일한 특성을 가진다면 동일한 카테고리에 속한다. 이런 특성들은 본질적인 속성이며 객체의 가장 핵심적이고 필수불가결한 속성이다. 이 외의 속성은 우연적인 속성이다. 그렇기 때문에 대부분의 객체지향 언어는 본질적인 속성만 표현할 수 있다.


일반화와 특수화

범주의 계층

범주간의 계층구조를 가지면 한 계층과 그 이하의 계층은 같은 속성을 지난다는 사실을 알 수 있다. 예를 들어 ‘얼룩고양이’는 포유류강에 속한다. 얼룩고양이가 어떤 것인지 모르더라도 포유류의 속성을 가진다는 것은 알 수 있다.

이렇게 상대적으로 상위 계층과 하위 계층으로 나누었을때, 상위 계층의 속성을 하위 범주의 일반화라고 하며, 하위 계층은 상위 범주의 특수화라고 한다. 예를 들어 얼룩고양이는 포유류보다 더 하위 계층이기 때문에 ‘얼룩고양이는 포유류의 특수화’이다.


서브타입

범주 = 개념 = 타입

  • 슈퍼타입: 어떤 타입이 다른 타입보다 일반적인 경우 (포유류)
  • 서브타입: 어떤 타입이 다른 타입보다 특수한 경우 (얼룩 고양이)
    • 슈퍼타입의 본질적인 속성을 포함

일반화와 특수화를 통해 다른 타입에 대한 추론이 가능하다. 서브타입은 자신의 본질을 가지면서 슈퍼타입의 본질도 함께 가진다.

서브타입이 되기 위해서는 다음과 같은 규칙을 준수해야 한다.

  • 100% 규칙: 슈퍼타입의 정의가 100% 서브타입에 적용돼야만 한다. 서브타입은 속성과 연관관계 면에서 슈퍼타입과 100% 일치해야 한다.
  • Is-a 규칙(일반화 관계): 서브타입의 모든 인스턴스는 슈퍼타입 집합에 포함돼야 한다. 이는 대개 영어로 ‘subtype is a supertype’이라는 구문을 만들어 테스트할 수 있다.

상속

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

  • 일반화의 원칙: 서브타입이 되기 위해서는 슈퍼타입에 순응해야 한다.
    • 서브타입의 대체 가능성

순응

  • 구조적인 순응
    • 내연과 관련된 100% 규칙(서브타입은 속성과 연관관계 면에서 슈퍼타입과 100% 일치해야 한다)
    • 서브타입으로 대체하더라도 구조에 관한 기대를 만족한다.
    • 예: Personname이라는 속성을 가진다. Person의 서브타입인 Employeename이라는 속성을 가지므로 EmployeePerson을 대체할 수 있다.
  • 행위적인 순응
    • 타입의 행위와 관련된 것.
    • 리스코프 치환 원칙
    • 예: PersongetAge()라는 메세지에 대한 응답으로 나이를 반환한다. 서브타입인 EmployeegetAge()라는 메세지에 나이를 반환해야 한다.

상속의 용도

  1. 서브타이핑
    • 서브클래스가 슈퍼클래스를 대체할 수 있는 경우
    • 설계의 유연성이 목표
    • = 인터페이스 상속
    • 구조적, 행위적 순응 관계를 의미하며, 대체 가능성을 내포
  2. 서브클래싱
    • 서브클래스가 슈퍼클래스를 대체할 수 없는 경우
    • 코드 중복 제거와 재상용이 목표
    • = 구현 상속

집합과 분해

계층적인 복잡성

  • 집합: 안정적인 현태의 부분으로부터 전체를 구축하는 행위
    • 각각의 객체를 하나의 단위로 다룸으로써 복잡성을 줄인다. ➡️ 한 번에 다뤄야하는 요소를 감소하여 인지 과부하를 방지한다.
    • 불필요한 세부사항을 추상화한다.
    • 캡슐화 매커니즘이기도 하다.
  • 분해: 집합의 반대. 전체를 부분으로 분할하는 행위
    • 필요에 따라 집합을 분해하여 그 안의 부분을 새로운 전체로 다룬다.

합성 관계

  • 상품 주문
    • ↳ 주문 항목

각 주문 항목은 상품 주문과 독립적으로 존재 할 수 없다. 주문 항목은 어떤 주문의 일부로 생성되기 때문에 두 객체 사이의 관계는 합성 관계이다.

주문과 주문항목은 합성관계, 주문항목과 상품은 연관관계이다.

합성 관계는 부분을 전체 안에 캡슐화함으로써 인지 과부하를 방지한다. 주문 항목은 주문의 일부이므로 주문 항목에 관한 세부 사항을 무시하고 주문과 상품만 존재하는 것처럼 모델을 다룰 수 있다.


패키지

관련된 클래스 집합을 하나의 논리적인 단위로 묶는 구성요소. 모듈이라고도 한다.

반응형

' > 객체지향의 사실과 오해' 카테고리의 다른 글

함께 모으기  (0) 2023.09.11
객체 지도  (0) 2023.09.06
책임과 메시지  (0) 2023.08.31
역할, 책임, 협력  (0) 2023.08.17
타입과 추상화  (0) 2023.08.14