<--SyntaxHighlighter--> SyntaxHighlighter.all();

1. 영화 예매 시스템

2. 객체지향 프로그래밍을 향해

- 협력, 객체, 클래스

   · 어떤 객체들이 필요한지 (어떤 클래스가 필요한지 보다) 먼저 고민하라.

   · 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다.

- 자율적인 객체(상태는 숨기고 행동만 외부에 공개)

   · 캡슐화: 데이터와 기능을 객체 내부로 함께 묶는 것

   · 접근제어: public protected, private 등 접근 수정자 제공

      · public interface: 외부에서 접근 가능한 부분

      · implementation(구현): 외부 접근 불가, 내부만 접근 가능

- 프로그래머의 자유

   · 클라이언트 프로그래머에게 필요한 부분만 공개하여, 불필요한 접근을 방지한다.

   . 클라이언트 프로그래머가 알아야 할 지식의 양이 줄어든다.(내부 구현)

   · public 영역을 변경하지 않는 범위 내에서 코드 수정이 자유로움.

   => 인터페이스와 구현을 깔끔하게 분리하기 위해 노력 필요

- 협력하는 객체들의 공동체

- 협력에 관한 짧은 이야기

 

3. 할인 요금 구하기

- 할인 요금 계산을 위한 협력 시작하기

- 할인 정책과 할인 조건

   · Template Method 패턴: 부모 클래스에 기본적인 알고리즘 구현, 중간에 필요한 처리를 자식 클래스에게 위임.

   . 오버라이딩: 메서드 이름 동일, 파라미터 동일

   . 오버로딩: 메서드 이름 동일, 파라미터 상이 => 각각의 메서드가 공존하고, 파라미터에 따라 다른 메서드 호출.

4. 상속과 다형성

- 컴파일 시간 의존성과 실행 시간 의존성

   · 코드의 의존성과 실행시점의 의존성이 다를 수 있다.

   · 두가지가 다를 경우 코드를 이해하기 어려워짐 => 더 유연해지고 확장 가능해짐 (트레이드오프 필요)

- 차이에 의한 프로그래밍

   · 부모클래스와 다른 부분만을 추가해서 새로운 클래스를 쉽고 빠르게 만드는 방법

- 상속과 인터페이스

   · 상속이 가치있는 이유는 부모 클래스가 제공하는 모든 인터페이스를 자식 클래스가 물려받을 수 있기 때문

    => 업캐스팅 가능

   · 다형성

      => Movie는 동일한 메시지를 전송하지만, 실제 실행되는 메서드는 메시지를 수신하는 객체의 클래스에 의존

          (실행시간 의존성)

      => 지연바인딩(Lazy binding) or 동적 바인딩(dynamic binding)

            <=> 초기바인딩(early binding) or 정적바인딩(static binding)

      => 구현 상속 / 인터페이스 상속: 단순 코드(구현) 만 재사용할 목적으로 상속을 하면 변경에 취약한 코드 생산

            => 인터페이스 상속을 추구해야 함.

5. 추상화와 유연성

- 추상화의 힘

  · 요구정책을 높은 수준에서 서술할 수 있다.

  · 설계가 좀 더 유연해진다. 기존 구조를 수정하지 않고도 새로운 기능을 쉽게 만들 수 있다.

   => 유연성이 필요한 곳에 추상화를 사용하라.

- 유연한 설계

- 추상 클래스와 인터페이스 트레이드오프

- 코드 재사용

- 상속

  · 캡슐화를 위반한다.

  · 유연하지 않다. 

- 합성

  · 인터페이스에 정의된 메시지를 통해서만 코드를 재사용하는 방법

+ Recent posts