객체지향 프로그래밍과 설계(2)

업데이트:

POCU의 개체지향 프로그래밍 및 설계 강의를 듣고 정리한 내용입니다.

구조체의 한계 : 데이터와 동작이 분리되어 있음

사람은 세상을 물체의 집합으로 인지한다

  • 실제 세상에서 물체는 상태와 함께 동작을 할 수 있음
  • 순수 상태로만 표현하는 경우도 있다.

객체지향 프로그래밍

  • 프로그램을 구성하는 기본 요소를 개체로 보려는 노력
  • OOP에서 프로그램이란?
    • 상호작용하는 개체들의 집합
    • 절차적 : 실행할 명령어의 목록을 프로그램으로 봄

특성

  1. 캡슐화 encapsulation
  2. 상속 inheritance
  3. 다형성 polymorphism
  4. 추상화 abstraction

+ 연관, 컴포지션, 집합

캡슐화

  • 데이터와 데이터에 작용하는 메서드를 하나로 묶음
  • 정보 숨기기 : 객체 안에 있는 데이터를 외부로부터 보호
    • 전부 혹은 일부
    • 외부 : 다른 클래스에 속한 개체들

상속

  • 이미 존재하는 객체를 기반으로 확장된 객체를 만드는 방법
    • 엄밀히 말하면 객체가 아닌 클래스
  • 확장된 객체
    • 기존 개체에 속한 데이터와 동작을 모두 물려 받음
    • 여기에 다른 데이터나 동작을 추가할 수 있음
  • 실용적 용도 : 코드 중복을 막음

다형성

  • OOP 핵심
  • 같은 지시를 내렸는데 다른 종류의 객체가 동작을 달리 하는 것
    • 같은 지시 : 동일한 함수 시그니처 호출
    • 달리 동작 : 객체에 따라 실제 실행되는 함수 구현 코드가 다름
  • 어떠한 함수 구현이 실행될지는 실행 중에 결정됨 late binding
  • 다형성의 혜택을 받으려면 상속 관계가 필요
    • 부모 객체에서 함수 시그니처를 선언
    • 자식 객체에서 함수를 다르게 구현 오버라이딩
  • 실용적 용도 : 다른 종류의 객체를 편하게 저장 및 처리 가능
  • 엄밀히 말하면 subtype 다형성

추상화

  • OR ‘데이터 추상화’
  • 객체 속에 있는 실제 데이터나 함수 구현 방법에 종속되지 않는다.
  • 데이터 추상화
    • 객체 사용 시 그 안에 정확히 어떤 데이터가 있는지 알 필요 없음
    • 객체 내 데이터에 직접 접근 불가
      • 대신 객체의 함수를 통해 접근
    • 즉, 캡슐화는 데이터 추상화를 이루는 방법 중 하나
  • 추상화
    • 다형성을 통한 추상화
    • abstract class나 interface를 사용하는 추상화

연관 association

  • 어떤 객체가 제공하는 기능을 다른 객체가 이용하는 관계
  • vs 상속
    • 상속 : 자식 객체가 부모 객체의 모든 것을 내포하는 관계
    • 연관 : 한 객체가 다를 객체를 참조하는 관계
  • 세부적으로 다시 집합컴포지션으로 나누기도 함

컴포지션 composition

  • 여러 부품(객체)을 조립해서 새 객체를 만드는 방법
  • ex) 자동차를 구성하는 부품
  • 부품 그 자체로는 존재 의의가 없음
    • 조립품이 소멸할 때 부품도 같이 소멸

집합 aggregation

  • 각 객체들이 따로따로 살아남을 수 있음
  • ex) A 대학이 문을 닫아도 학생들은 여전히 다른 대학에 등록 가능

Reference

POCU 강의

태그: ,

카테고리:

업데이트:

댓글남기기