Abstract(추상화)

객체지향 프로그래밍에서 추상화는 복잡한 현실 세계를 소프트웨어로 모델링하기 위한 첫 번째 단계이자 핵심 도구다.

  • 일반화(Generalization): 여러 객체에서 공통적인 특성을 추출하여 하나의 개념으로 묶는 과정

  • 단순화(Simplification): 복잡한 객체나 시스템에서 불필요한 세부 사항을 제거하여 핵심적인 부분만 남기는 과정

개념(Concept)과 분류(Classification)

개념은 우리가 인식하는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 뜻한다.

  • 개념의 역할

    • 공통점을 기반으로 객체들을 묶는 그릇 역할

    • 수많은 객체를 개별적으로 다루는 대신, 개념이라는 틀을 통해 분류함으로써 복잡성 감소

  • 객체와 인스턴스

    • 객체: 특정한 개념을 적용할 수 있는 구체적인 사물

    • 인스턴스: 개념이 객체에 적용된 상태

그러한 개념을 이용해 객체를 특정한 집합으로 묶는 작업을 분류라고 한다.

  • 분류(Classification)

    • 객체에 특정한 개념을 적용하는 작업

    • 적절한 분류는 애플리케이션의 유연함을 결정

개념의 세 가지 관점

객체의 분류 장치로서 개념을 사용할 때는 다음과 같은 세 가지 관점에서 바라볼 수 있다.

  1. 심볼(Symbol)

    • 개념을 가리키는 간략한 이름이나 명칭

    • 프로그래밍 언어에서는 Class의 이름이 이에 해당

  2. 내연(Intension)

    • 개념의 완전한 정의

    • 객체가 개념에 속하는지 여부를 판단하는 조건이나 기준

    • 프로그래밍 언어에서는 클래스의 내부 구현(필드, 메서드 정의)이 이에 해당

  3. 외연(Extension)

    • 개념에 속하는 모든 객체의 집합(Set)

    • 내연(조건)을 만족하는 모든 인스턴스들의 모음

구분
설명
프로그래밍 매핑

심볼(Symbol)

개념의 이름

클래스 이름 (class Car)

내연(Intension)

개념의 정의 및 속성 여부 판단 기준

멤버 변수 및 메서드 정의

외연(Extension)

개념에 속하는 인스턴스 집합

new Car()로 생성된 메모리 상의 객체들

프로그래밍 레벨에서의 추상화

올바른 추상화는 코드의 유연성과 재사용성을 높이며, 유지보수를 용이하게 한다.

  • 타입(Type)과 추상화

    • 프로그래밍 언어에서 개념은 타입(Type)으로 구현

    • 클래스는 타입을 구현하는 가장 보편적인 메커니즘

  • 슈퍼타입과 서브타입

    • 일반화/특수화 관계를 통해 계층 구조 형성

    • 슈퍼타입(Generalization): 더 일반적인 개념(공통점 포함)

    • 서브타입(Specialization): 더 구체적인 개념(차이점 포함)

  • 추상 클래스와 인터페이스

    • Java 등의 언어에서는 abstract classinterface를 통해 추상화를 명시적으로 지원

    • 구체적인 구현 내용(How)은 하위 클래스에 위임하고, 상위 수준에서는 역할과 메시지(What)만 정의하여 결합도를 낮춤

참고자료

Last updated