객체지향 프로그래밍과 설계(2)
업데이트:
POCU의 개체지향 프로그래밍 및 설계 강의를 듣고 정리한 내용입니다.
구조체의 한계 : 데이터와 동작이 분리되어 있음
사람은 세상을 물체의 집합으로 인지한다
- 실제 세상에서 물체는 상태와 함께 동작을 할 수 있음
- 순수 상태로만 표현하는 경우도 있다.
객체지향 프로그래밍
- 프로그램을 구성하는 기본 요소를 개체로 보려는 노력
- OOP에서 프로그램이란?
- 상호작용하는 개체들의 집합
- 절차적 : 실행할 명령어의 목록을 프로그램으로 봄
특성
- 캡슐화 encapsulation
- 상속 inheritance
- 다형성 polymorphism
- 추상화 abstraction
+
연관, 컴포지션, 집합
캡슐화
- 데이터와 데이터에 작용하는 메서드를 하나로 묶음
- 정보 숨기기 : 객체 안에 있는 데이터를 외부로부터 보호
- 전부 혹은 일부
- 외부 : 다른 클래스에 속한 개체들
상속
- 이미 존재하는 객체를 기반으로 확장된 객체를 만드는 방법
- 엄밀히 말하면 객체가 아닌 클래스
- 확장된 객체
- 기존 개체에 속한 데이터와 동작을 모두 물려 받음
- 여기에 다른 데이터나 동작을 추가할 수 있음
- 실용적 용도 : 코드 중복을 막음
다형성
- OOP 핵심
- 같은 지시를 내렸는데 다른 종류의 객체가 동작을 달리 하는 것
- 같은 지시 : 동일한 함수 시그니처 호출
- 달리 동작 : 객체에 따라 실제 실행되는 함수 구현 코드가 다름
- 어떠한 함수 구현이 실행될지는 실행 중에 결정됨 late binding
- 다형성의 혜택을 받으려면 상속 관계가 필요
- 부모 객체에서 함수 시그니처를 선언
- 자식 객체에서 함수를 다르게 구현 오버라이딩
- 실용적 용도 : 다른 종류의 객체를 편하게 저장 및 처리 가능
- 엄밀히 말하면 subtype 다형성
추상화
- OR ‘데이터 추상화’
- 객체 속에 있는 실제 데이터나 함수 구현 방법에 종속되지 않는다.
- 데이터 추상화
- 객체 사용 시 그 안에 정확히 어떤 데이터가 있는지 알 필요 없음
- 객체 내 데이터에 직접 접근 불가
- 대신 객체의 함수를 통해 접근
- 즉, 캡슐화는 데이터 추상화를 이루는 방법 중 하나
- 추상화
- 다형성을 통한 추상화
- abstract class나 interface를 사용하는 추상화
연관 association
- 어떤 객체가 제공하는 기능을 다른 객체가 이용하는 관계
- vs 상속
- 상속 : 자식 객체가 부모 객체의 모든 것을 내포하는 관계
- 연관 : 한 객체가 다를 객체를 참조하는 관계
- 세부적으로 다시 집합과 컴포지션으로 나누기도 함
컴포지션 composition
- 여러 부품(객체)을 조립해서 새 객체를 만드는 방법
- ex) 자동차를 구성하는 부품
- 부품 그 자체로는 존재 의의가 없음
- 조립품이 소멸할 때 부품도 같이 소멸
집합 aggregation
- 각 객체들이 따로따로 살아남을 수 있음
- ex) A 대학이 문을 닫아도 학생들은 여전히 다른 대학에 등록 가능
댓글남기기