오브젝트 02_ 객체 지향 프로그래밍

ggyu_55·2023년 9월 17일
0

메모

목록 보기
34/46
post-thumbnail

다시 정리해야 함


객체 지향 패러다임으로의 전환은 "클래스가 아닌 객체에 초점을 맞출 때" 비로소 얻을 수 있다. --> 어떤 객체가 어떤 상태와 행동을 가지는지 ;; 객체를 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다.

도메인이란? :: 문제 해결을 위해 사용자가 프로그램을 사용하는 분야

인스턴스 변수는 private, 메서드는 public 으로 설정 - 클래스의 내부와 외부를 구분하여

  1. 경계의 명확성이 객체의 자율성을 보장하게 하고,
  2. 프로그래머에게 구현의 자유를 보장한다. ( 클라이언트 프로그래머의 영향을 걱정하지 않고 내부구현을 마음대로 바꿀 수 있다==자유)

상태는 숨기고 행동만 공개하여야 한다.

의미를 좀 더 명시적이고 분명히 표현할 수 있다면, 객체를 사용해서 해당 개념을 구현하여야 한다. 그 개념이 비록 하나의 인스턴스 변수만 포함하더라도 개념을 명시적으로 표현하는 것은 설계의 전체적 명확성과 유연성을 높힐 수 있다.

객체와 객체가 상호작용하는 유일한 방법 --> 메시지 , 수신된 메시지를 처리하는 객체 자신만의 방법 == 메서드

추상 클래스 :: 공통 규약을 만드려고 하는데 정작 인스턴스를 생성할 필요는 없을 떄. abstract 메서드를 통해 자식에게 처리를 위임, 객체의 status를 강제

Template Method 패턴

  • 부모 클래스에 기본적 알고리즘의 구ㅠ현을 구현하고 중간에 필요한 처리를 자식 클래스에 위임하는 디자인 패턴.

Compile 시점의 의존성과 Runtime 시점의 의존성을 다를 수 있다!! --> 객체 지향의 특징 중 하나.

  • 어떤 인스턴스에 의존할 지 스스로 결정하게 함으로써 가능하다.
  • 다만 코드를 이해하기 힘들 수 있다.( 런타임이 되어 봐야 알 수 있으니까)
  • 하지만 코드의 유연성은 높아진다. 따라서 적절한 트레이드 오프가 필요

부모 클래스와 다름 점을 추가 해서 새로운 클래스를 쉽게 만드는 것 :: 차이에 의한 프로그래밍

상속이 가치 있는 이유 :: 부모가 제공하는 모든 인터페이스를 자식이 사용 가능하기 때문

인터페이스는 객체가 이해할 수 있는 메시지의 목록을 정의한다.

  • 상속을 통해 자식 클래스는 자신의 인터페이스(행위 목록)에 부모 클래스의 인터페이스를 포함한다.
  • 결과적으로 부모 클래스가 수신할 수 있는 모든 메시지를 자식도 수신할 수 있다.
  • 외부에서 보면 자식 클래스를 부모 클래스와 동일한 타입으로 간주 할 수 있다!!!

협력 객체가 메시지를 이해(수신)할 수만 있다면 해당 객체가 어떤 인스턴스인지는 중요하지 않음

자식 클래스가 부모를 대신하는 것 --> upCasting

다형성 ::

  • 동일한 메시지를 전송해도 실제로 어떤 메서드가 실행될 것인지는 메시지를 수신하는 객체의 타입에 따라 달라지는 것
  • 다시 말해, 동일 메시지를 수신했을 때 객체의 타입에 따라 다르게 응답할 수 있는 능력
  • 지연 바인딩(동적 바인딩)을 통해 실현 -> 런타인에 바인딩 (다형성을 실현하는 유일한 방법은 아니다)

추상화 ::

  • 추상화를 사용하면 세부적인 내용을 무시한 채 상위 정책을 쉽고 간단하게 표현할 수 있다.
  • 새로운 자식클래스들은 추상화를 이용한 상위의 협력 흐름을 그대로 따르게 된다.
  • 따라서, 기존 구조를 변경하지 않고도 새로운 기능을 쉽게 추가하고 확장할 수 있다.
  • 설계가 구체적인 상황에 결합되는 것을 방지하기 떄문!!

코드 재사용 :: 상속보다 합성?

상속 --> 캡슈화 위반, 설계가 유연하지 않음(협력 관계가 컴파일 시점에 결정)

  • 부모를 알고 있어야 상속을 이용할 수 있고, 부모를 변경하면 자식도 변경될 확률이 높기 때문

합성 ( 객체의 인스턴스를 자신의 인스턴스 변수로 포함해서 사용하는 것)

  • 인터페이스에 정의된 메시지를 통해 만든다.
  • 느슨한 결합.
  • 런타임에 결정되므로 유연하다.,

0개의 댓글