Abstract(추상화)
객체지향 프로그래밍에서 추상화는 복잡한 현실 세계를 소프트웨어로 모델링하기 위한 첫 번째 단계이자 핵심 도구다.
일반화(Generalization): 여러 객체에서 공통적인 특성을 추출하여 하나의 개념으로 묶는 과정
단순화(Simplification): 복잡한 객체나 시스템에서 불필요한 세부 사항을 제거하여 핵심적인 부분만 남기는 과정
개념(Concept)과 분류(Classification)
개념은 우리가 인식하는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 뜻한다.
개념의 역할
공통점을 기반으로 객체들을 묶는 그릇 역할
수많은 객체를 개별적으로 다루는 대신, 개념이라는 틀을 통해 분류함으로써 복잡성 감소
객체와 인스턴스
객체: 특정한 개념을 적용할 수 있는 구체적인 사물
인스턴스: 개념이 객체에 적용된 상태
그러한 개념을 이용해 객체를 특정한 집합으로 묶는 작업을 분류라고 한다.
분류(Classification)
객체에 특정한 개념을 적용하는 작업
적절한 분류는 애플리케이션의 유연함을 결정
개념의 세 가지 관점
객체의 분류 장치로서 개념을 사용할 때는 다음과 같은 세 가지 관점에서 바라볼 수 있다.
심볼(Symbol)
개념을 가리키는 간략한 이름이나 명칭
프로그래밍 언어에서는
Class의 이름이 이에 해당
내연(Intension)
개념의 완전한 정의
객체가 개념에 속하는지 여부를 판단하는 조건이나 기준
프로그래밍 언어에서는 클래스의 내부 구현(필드, 메서드 정의)이 이에 해당
외연(Extension)
개념에 속하는 모든 객체의 집합(Set)
내연(조건)을 만족하는 모든 인스턴스들의 모음
심볼(Symbol)
개념의 이름
클래스 이름 (class Car)
내연(Intension)
개념의 정의 및 속성 여부 판단 기준
멤버 변수 및 메서드 정의
외연(Extension)
개념에 속하는 인스턴스 집합
new Car()로 생성된 메모리 상의 객체들
프로그래밍 레벨에서의 추상화
올바른 추상화는 코드의 유연성과 재사용성을 높이며, 유지보수를 용이하게 한다.
타입(Type)과 추상화
프로그래밍 언어에서 개념은 타입(Type)으로 구현
클래스는 타입을 구현하는 가장 보편적인 메커니즘
슈퍼타입과 서브타입
일반화/특수화 관계를 통해 계층 구조 형성
슈퍼타입(Generalization): 더 일반적인 개념(공통점 포함)
서브타입(Specialization): 더 구체적인 개념(차이점 포함)
추상 클래스와 인터페이스
Java 등의 언어에서는
abstract class나interface를 통해 추상화를 명시적으로 지원구체적인 구현 내용(How)은 하위 클래스에 위임하고, 상위 수준에서는 역할과 메시지(What)만 정의하여 결합도를 낮춤
참고자료
Last updated