OOP(객체지향 프로그래밍)의 원리를 이해한다.

Goal

  • OOP(객체지향 프로그래밍)의 4가지 특징을 이해한다.
  • 추상화를 이해할 수 있다.
  • 캡슐화를 이해할 수 있다.
  • 일반화 관계를 이해할 수 있다.
  • 다형성을 이해할 수 있다.

1. 추상화(Abstraction)

어떤 영역에서 필요로 하는 속성이나 행동을 추출하는 작업

각 개체의 구체적인 개념에 의존하지 말고 추상적 개념에 의존해야 설계를 유연하게 변경할 수 있다.

2. 캡슐화(Encapsulation)

참고 SW 공학에서 요구사항 변경에 대처하는 고전적인 설계 원리

  1. 응집도(Cohesion)
    • 클래스나 모듈 안의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다.
  2. 결합도(Coupling)
    • 어떤 기능을 실행하는 데 다른 클래스나 모듈들에 얼마나 의존적인지를 나타낸다.


캡슐화는 낮은 결합도 를 유지할 수 있도록 해주는 객체지향 설계 원리다.

3. 일반화 관계(Generalization)

일반화는 여러 개체들이 가진 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립시키는 과정이다.

일반화는 또 다른 캡슐화

일반화 관계는 자식 클래스를 외부로부터 은닉하는 캡슐화의 일종이다.

일반화 관계와 위임

두 자식 클래스 사이에 “is a kind of” 관계가 성립되지 않을 때 상속을 사용하면 불필요한 속성이나 연산(빚이라고 해도 될 것이다)도 물려받게 된다.

위임을 사용해 일반화(상속)을 대신하는 과정

  1. 자식 클래스에 부모 클래스의 인스턴스를 참조하는 속성을 만든다.
    • 이 속성 필드를 this로 초기화한다.
  2. 자식 클래스에 정의된 각 메서드에 1번에서 만든 위임 속성 필드를 참조하도록 변경한다.
  3. 자식 클래스에서 일반화 관계 선언을 제거하고 위임 속성 필드에 부모 클래스의 객체를 생성해 대입한다.
  4. 자식 클래스에서 사용된 부모 클래스의 메서드를 추가하고 해당 메서드에도 속성 필드를 참조하도록 변경한다.
  5. 컴파일하고 잘 동작하는지 확인한다.

4. 다형성(Polymorphism)

다형성은 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력이다.

피터 코드의 상속 규칙(Peter Coad)

상속의 오용을 막기 위해 상속의 사용을 엄격하게 제한하는 규칙들

관련된 Post

References