✏️, 💡,❓ 해당 이모지는 저의 생각임을 나타냅니다. 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 적용할 수 있는 해결 방법을 디자인 패턴이라고 한다.일단 디자인 패턴을 익히면, 변경과 방향과 주기를 이해하는 것만으로도 협력 방식을 순간적으로 떠올릴 수 있게 한다. 디자인 패턴이 설계를 재사용하기 위한 것이라면 프레임워크는 설계와 코드를 함께 재사용하기 위한 것이다. 프레임워크는 애플리케이션의 아키텍처를 구현 코드의 형태로 제공한다. 디자인 패턴은 특정한 변경을 일관성 있게 다룰 수 있는 협력 템플릿을 제공하고, 프레임워크는 특정한 변경을 일관성 있게 다룰 수 있는 확장 가능한 코드 템플릿을 제공한다. 01 디자인 패턴과 설계 재사용소프트웨어 패턴패턴이라는 숲 속에서 길을 잃지 안힉 위해서는 ..
✏️, 💡,❓ 해당 이모지는 저의 생각임을 나타냅니다. 유사한 기능을 구현하기 위해 유사한 협력 패턴을 사용하라. 유사한 기능 구현을 위해 유사한 협력 방식을 따를 경우 최소한의 노력으로 코드를 구현할 수 있다. 01 핸드폰 과금 시스템 변경하기기본 정책 확장11장에서 구현한 핸드폰 요금 정책을 4가지 방식으로 확장한다.더보기1. 고정요금 방식: 일정 시간 단위로 동일 요금 부과2. 시간대별 방식: 24시간을 특정 구간으로 나눈 후 구간별 다른 요금 부과3. 요일별 방식: 요일별로 요금을 차등 부과4. 구간별 방식: 통화 시간을 일정하게 나눈 후 구간별로 요금을 차등 부과 시간대별 방식 구현하기통화는 여러날 걸쳐서 이루어질 수 있다. 그래서 시작 일자와 종료 일자도 통화 시작 시간과 종료 시간과 함께 ..
✏️, 💡,❓ 해당 이모지는 저의 생각임을 나타냅니다. 상속의 두 가지 용도1) 타입 계층 구현 (부모 클래스는 일반적 개념, 자식 클래스는 특수한 개념)2) 코드 재사용 (그러나 부모와 자식 간 결합도가 높아짐) 동일한 메시지에 대해 서로 다르게 행동할 수 있는 다형적 객체를 구현하기 위해서 객체의 행동 기반으로 타입 계층을 구성해야 한다. 상속의 일차적 목표는 이처럼 타입 계층을 구현하는 것이어야 한다. 이번 장에서는 올바른 타입 계층을 구성하는 방법을 살펴본다. 01 타입개념 관점의 타입개념 관점에서 타입이란 우리가 인지하는 사물의 종류이다. 예를 들어 자바, 루비, C를 프로그래밍 언어로 부를 때 우리는 이것을 프로그래밍 언어라는 타입으로 분류하고 있는 것이다.어떤 대상이 타입으로 분류될 때 그..
코드 재사용을 목적으로 상속을 사용하면 변경하기 어렵고 유연하지 못한 설계에 이를 확률이 높아진다. 상속의 목적은 코드 재사용이 아니다. 상속은 타입 계층을 구조화하기 위해 사용해야 한다. 상속을 이용해 자식 클래스를 추가하려 한다면 스스로에게 다음과 같이 질문해봐라. 상속을 사용하려는 목적이 단순히 코드를 재사용하기 위해서인가? 아니면 클라이언트 관점에서 인스턴스를 동일하게 행동하는 그룹으로 묶기 위해서인가? 이번 장에서는 상속의 관점에서 다형성이 구현되는 기술적인 메커니즘을 살펴보기로 한다. 이번 장을 읽고 나면 다형성이 런타임에 메시지를 처리하기 위해 적합한 메서드를 동적으로 탐색하는 과정을 통해 구현되며, 상속이 이런 메서드를 찾기 위한 일종의 탐색 경로를 클래스 계층 형태로 구현하기 위한 방법임..
✏️, 💡,❓ 해당 이모지는 저의 생각임을 나타냅니다. 상속과 합성은 객체지향 프로그래밍에서 가장 널리 사용되는 코드 재사용 기법이다.상속이 부모 클래스와 자식 클래스를 연결해서 부모 클래스의 코드를 재사용하는데, 합성은 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용한다. 상속은 의존성이 컴파일타임에 해결되고 합성은 런타임에 해결된다. 상속은 is-a 관계이고, 합성은 has-a 관계이다. 합성은 포함되는 객체의 퍼블릭 인터페이스를 재사용한다. 따라서 상속 대신 합성을 사용하면 구현에 대한 의존성을 인터페이스에 대한 의존성으로 변경하면서 결합도를 낮춘다. 01 상속을 합성으로 변경하기상속을 했을 경우 세가지 문제가 발생한다.1) 불필요한 인터페이스 상속 문제자식 클..
✏️, 💡,❓ 해당 이모지는 저의 생각임을 나타냅니다. 객체지향 프로그래밍은 코드를 재사용하기 용이하다는 장점이 있다. 코드를 재사용하려는 동기 이면에는 중복된 코드를 제거하려는 욕망이 있다. 이번 장에서는 상속에 대해 알아본다. (전체 코드) 01 상속과 중복 코드중복 코드는 사람들의 마음속에 의심의 씨앗을 뿌린다. DRY 원칙프로그램의 본질은 비즈니스와 관련된 지식을 코드로 변환하는 것이다. 안타깝게도 이 지식은 항상 변하며 그에 맞춰 코드 역시 변경해야 한다.중복 코드는 코드를 수정하는 데 필요한 노력을 몇 배로 증가시킨다. 중복을 판단하는 기준은 변경이다. 요구사항이 변경됐을 때 두 코드를 함께 수정해야 한다면 이 코드는 중복이다. 신뢰할 수 있고 수정하기 쉬운 소프트웨어를 만드는 효과적인 ..
✏️, 💡,❓ 해당 이모지는 저의 생각임을 나타냅니다. 01 개방-폐쇄 원칙로버트 마틴은 변화에 유연하게 대응할 수 있는 설계를 위한 원칙 중 하나로 개방-폐쇄 원칙(Open-Clos Principle)을 고안했다.- 소프트웨어 개체(클래스, 모듈, 함수 등)은 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.- 확장에 열려있다: 요구사항이 변경될 때 새로운 동작을 추가해서 기능을 확장할 수 있다 / 수정에 닫혀있다: 기존 코드를 수정하지 않고도 애플리케이션 동작을 추가하거나 변경할 수 있다 컴파일타임 의존성을 고정시키고 런타임 의존성을 변경하라️의존성 관점에서 개방-폐쇄 원칙을 따르는 설계란 컴파일타임 의존성은 유지하면서 런타임 의존성의 가능성을 확장하고 수정할 수 있는 구조다. 추..