<객체지향 프로그래밍> 객체 지향 특성

2019. 4. 5. 10:16수업/Object-Oriented Programming

4장

1. Abstraction(추상화)

2. Encapsulation(캡슐화)

5장

3. Inheritance(상속)

4. Polymorphism(다형성)


  • 절차 지향 프로그래밍: 목적을 달성하기 위한 일의 흐름에 중점

      hit(사람 who, 사람 whom) {}


  • 객체 지향 프로그래밍:
    실제 세상 구현 >> 프로그램 모델링(modeling)
    실제 세상의 물체 >> 객체
    실제 세상 물체들의 관계 >> 객체들의 상호 작용 설계
    각 객체를 클래스로 작성

      hit(사람 whom) { whom.boolean = true; }
      //사람 클래스 who 객체 안의 함수 hit


1. Abstraction(추상화)

(=) 필요한 것만 뽑아내는 것

  • 패키지: 폴더(디렉토리)
  • 클래스: 파일
  • 필드(멤버 변수): state(특성 property)
    (C에서 변수는 있고 함수가 없는 struct 사용)
  • 메소드(멤버 함수): behavior(행동)
    !!결국 naming이 중요!!

2. Encapsulation(캡슐화)

: 객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것
‘소스’라는 도구로 ‘프로그래머’라는 대상으로부터의 캡슐화
개발(모델링)을 설계하고 구현함으로써 실행을 실세계처럼 구현한다.

  • C에서 변수와 함수가 각각 따로 묶여 있음
    class가 관련 있는 변수와 함수들을 캡슐처럼 묶어준다.

3. Inheritance(상속)

: 하위 개체가 상위 개체의 속성을 모두 가지는 관계
: 서브 클래스(sub class)가 슈퍼 클래스(super class)의 속성(필드, 메소드)을 물려받고(재사용하고) 기능을 추가하여 확장(extend)하는 개념
= 객체(super type/class) <= 객체(sub type/class) (class는 데이터 타입)

  • sub class가 super class를 상속하겠다고 한다면 super class의 변수나 함수를 사용할 수 있다.
  • Generalization(일반화): 아래 계층(구체적인 것)부터 구성한 다음에 상위 계층을 생성한다.
  • Specialization(구체화): 상위 라이브러리로부터 그 아래 구체적인 것을 내가 작성하는 것
    UML(Unified Modeling Language)

4. Polymorphism(다형성)

: 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것(오버라이딩, 오버로딩)
morphism(=mapping) => 1:n대응(함수 호출 문에서 n가지의 함수 호출)

  • 메소드 오버라이딩(overriding): 슈퍼 클래스에 구현된 메소드를, 서브 클래스에서 동일한 이름으로 자신의 특징에 맞게 다시 구현하는 것
  • 메소드 오버로딩(overloading): 클래스 내에서 이름이 같지만 서로 다르게 동작하는 메소드를 여러 개 만드는 것

위 글의 1 -> 2 -> 3-> 4 순서로 앞의 것이 잘 되어야 뒤의 것을 잘 쓸 수 있다.