[오브젝트] 17일차

da__ell·2023년 8월 18일
0

독서 - 오브젝트

목록 보기
17/25
post-thumbnail

p. 214 ~ p. 224

책임에 초점을 맞춰라

디미터 법칙을 준수하고 묻지 말고 시켜라 스타일을 따르면서 의도를 드러내는 인터페이스 설계하는 쉬운 방법 → 메시지를 먼저 선택하고 그 후에 메시지를 처리할 객체를 선택

훌륭한 메시지를 얻는 출발점은 책임 주도 설계 원칙을 따르는 것 중요한 것은 협력에 적합한 메시지 not 객체

오퍼레이션의 시그니처에는 단지 오퍼레이션의 이름과 인자와 반환값의 타입만 명시할 수 있다. 어떤 조건이 만족되어야만 오퍼레이션을 호출할 수 있고 어떤 경우에 결과를 반환받을 수 없는지를 표현할 수 없다.

→ 협력을 위해 두 객체가 보장해야할 실행시점의 제약을 인터페이스에 명시할 방법이 존재 x

이를 해결하기 위해 등장한 개념이 계약에 의한 설계(Design By Contract)
클라이언트와 서버가 준수해야 하는 제약을 코드 상에 명시적으로 표현하고 강제할 수 있는 방법.


7. 객체 분해

실제로 문제를 해결하기 위해 사용하는 저장소는 장기 기억이 아닌 단기기억. 하지만 문제 해결에 필요한 요수의 수가 단기 기억의 용량을 초과하는 순간 문제 해결 능력의 급격한 감소 → 인지 과부화

이를 방지하는 가장 좋은 방법은 단기 기억에 보관할 정보 양을 조절하는 것 → 불필요한 정보만을 제거하고 현재 문제 해결의 핵심만 남긴다 → 추상화

큰 문제를 해결 가능한 작은 문제로 나누는 작업 → 분해

추상화를 더 큰 규모의 추상화로 압축하여 단기 기억의 한계를 초월할 수 있다. → ex. 11자리 정수 8개 기억 vs 11자리 전화번호 8개 기억

7-1. 프로시저 추상화와 데이터 추상화

모든 프로그래밍 패러다임은 추상화와 분해의 관점에서 설명할 수 있다.

현대 프로그래밍 언어를 특정짓는 중요한 추상화 메커니즘 2가지

  1. 프로시저 추상화(procedure abstraction)
  2. 데이터 추상화(data abstraction)

프로그래밍 패러다임이란 적절한 추상화의 윤곽을 따라 시스템을 어떤 식으로 분해할 것인지 결정하는 원칙과 방법의 원칙이다. 따라서 현대 프로그래밍 패러다임은 위 방법을 중심으로 시스템을 분해한다.

  1. 프로시저 추상화 중심 → 기능 분해(functional decomposition), 알고리즘 분해

  2. 데이터 추상화 중심

    2-1. 타입 추상화 → 추상 데이터 타입(Abstract Data Type)

    2.2. 프로시저 추상화 → 객체 지향(Object-Oriented)

프로그래밍 언어의 관점에서 객체지향이란 데이터를 중심으로 데이터 추상화와 프로시저 추상화를 통합한 객체를 이용해 시스템을 분해하는 방법이다.

→ 이를 위해 대부분의 객체지향 언어는 클래스라는 도구를 제공한다.

7-2. 프로시저 추상화와 기능 분해

메인 함수로서의 시스템

기능 분해의 관점에서 추상화의 단위는 프로시저이며 시스템은 프로시저를 단위로 분해된다.

프로시저는 반복적으로 실행되거나 거의 유사하게 실행되는 작업을 하나에 모아넣음 → 로직 재사용 + 중복 방지하는 추상화 방법

프로시저를 통해 잠재적인 정보은닉이 가능하지만 부족한 부분이 있다.

전통적인 기능 분해 방법으로 하향식 접근법(Top-Down Approach)가 있다. 시스템을 구성하는 가장 최상위 기능을 정의하고 이를 좀 더 작은 단계의 기능으로 분해하는 방식이다. (마지막 하위 기능이 프로그래밍 언어로 구현 가능한 수준이 될 때 까지)

기능 분해를 위한 하향식 접근법

먼저 최상위의 추상적인 함수 정의는 시스템의 기능을 표현하는 하나의 문장으로 나타내고 문장을 구성하는 세부적인 단계의 문장으로 분해해 나가는 방식을 따른다.

→ 하나의 문장을 여러 개의 더 작은 기능으로 분해

각 정제 단계는 이전 문장의 추상화 수준을 감소시켜야 한다. → 하나 이상의 좀 더 단순하고 구체적은 문장들의 조합으로 분해

기능 분해를 위한 하향식 접근 법은 기능을 중심으로 먼저 필요한 기능을 생각한다. 기르고 이를 분해하고 정제하는 과정에서 필요한 데이터 종류와 저장 방식을 식별한다.

profile
daelkdev@gmail.com

0개의 댓글