디자인 패턴 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결 방법 협력을 재사용할 수 있게 만들기 위해 재사용할 수 있는 설계의 묶음 프레임워크 설계와 코드를 함께 재사용하기 위한 것 일관성있는 협력을 제공하는 확장 가능한 코드 01. 디자인 패턴과 설계 재사용 디자인 패턴의 구성요소는 클래스와 메서드가 아니라 역할과 책임이다. 소프트웨어 패턴 패턴은 반복적으로 발생하는 문제와 해법의 쌍으로 정의된다. 패턴을 사용함으로써 이미 알려진 문제와 이에 대한 해법을 문서로 정리할 수 있으며, 이 지식을 사용해 다른 사람과 의사소통 할 수 있다. 패턴은 추상적인 원칙과 실제 코드 사이의 간극을 매워주며 실질적인 코드 작성을 돕는다. 패턴의 요점은 패턴이 실무에서 탄생했다는 점이..
다형성 여러 타입을 대상으로 동작하는 코드를 작성할 수 있는 방법 다형성은 런타임에 메시지를 처리하기에 적합란 메서드를 동적으로 탐색하는 과정을 통해 구현되며, 상속은 이런 메서드를 찾기 위한 일종의 탐색 경로를 클래스의 계층의 형태로 구현하기 위한 방법이다. 상속의 관점에서 다형성이 구현되는 기술적인 메커니즘을 알아보자. 다형성 객체지향 프로그래밍에서 사용되는 다형성은 아래 그림과 같이 유니버설(Universal) 다형성과 임시(Ad Hoc)다형성으로 분류할 수 있다. 유니버설 다형성은 다시 매개변수 다형성과 포함 다형성으로 분류할 수 있고, 임시 다형성은 오버로딩 다형성과 강제다형성으로 분류할 수 있다. 매개변수 다형성(혹은 제네릭 다형성) - 클래스의 인스턴스 변수나 메서드의 매개변수 타입을 임의의..
상속과 합성의 비교 1 상속 합성 컴파일 타임에 의존성 해결 두 객체 사이의 의존성은 런타임에 해결 is-a has-a 부모클래스의 구현에 의존 퍼블릭인터페이스에 의존 부모클래스 안에 구현된 코드 재사용 객체의 퍼블릭 인터페이스 재사용 상속과 합성의 비교 2 같은 요구사항을 상속과 합성을 사용해서 각각 구현한 사례를 보고 비교해 보자. 우선 요구사항은 아래와 같다. 기본 정책의 계산 결과에 적용된다. 세금 정책은 기본 정책인 RegularPhone이나 NightlyDiscountPhone의 계산이 끝난 결과에 세금을 부과한다. 선택적으로 적용할 수 있다. 기본 정책의 계산 결과에 세금 정책을 적용할 수도 있고 적용하지 않을 수도 있다. 조합 가능하다. 기본 정책에 세금 정책만 적용하는 것도 가능하고, 기..
상속은 클래스를 재사용하기 위한 가장 대표적 기법 이다. 00. 선요약 상속으로 인한 클래스 사이의 결합을 피할수 있는 방법은 없다. 상속은 어떤 방식으로든 부모 클래스아 자식 클래스르 결합시킨다. 메서드 구현에 대한 결합은 추상 메서드를 추가함으로써 어느 정도 완화할 수 있지만 인스턴스 변수에 대한 잠재적인 결합을 제거할 수 잇는 방법은 없다. 우리가 원하는 것은 행동을 변경하기 위해 인스턴스 변수를 추가하더라도 사속 계층 전체에 걸쳐 부작용이 퍼지지 않게 하는 것이다. 상속을 사용할 때 주의해야할 사항은 다음과 같다. 자식 클래스의 메서드 안에서 super 참조를 이용해 부모 클래스의 메서드를 직접 호출할 경우 두 클래스는 강하게 결합된다. super 호출을 제거할 수 있는 방법을 찾아 결합도를 제거..
01. 개방 폐쇄 원칙 소프트웨어 개체(클래스, 모듈, 함수)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. 여기서 확장과 수정이라는 키워드는 애플리케이션의 '동작'과 '코드'의 관점을 반영한다. 해석해보면 확장에 대해 열려있다 : 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 '동작'을 추가해서 애플리케이션의 기능을 확장할 수 있다. 수정에 대해 닫혀있다 : 기존의 '코드'를 수정하지 않고도 애플리케이션의 동작을 추가하거나 변경할 수 있다. 달리 말하면 컴파일 타임 의존성을 수정 하지 않고 런타임 의존성을 변경할 수 있다는 말이다. 추상화가 핵심이다. 개방-폐쇄 원칙의 핵심은 추상화에 의존하는 것이다. 추상화를 하면 핵심적인 부분은 남기고 불필요한 부분은 생략하게 된..
잘 설계된 객체지향 애플리케이션은 작고 응집도 높은 객체들로 구성된다. 작고 응집도 높은 객체란 책임의 초점이 명확하고 한가지 일만 잘 하는 객체를 의미한다. 이렇게 작고 응집도 높은 객체들은 여러 객체들과 협력 하며 애플리케이션의 기능을 구현하게 되는데, 이러한 협력으로 인해 객체들 간 의존성이 발생한다. 01. 의존성 이해하기 변경과 의존성 어떤 객체가 협력하기 위해 다른 객체가 필요할 때 두 객체 사이에 의존성이 존재하게 된다. 두 요소 사이 의존성은 의존되는 요소가 변경될 때 의존하는 요소도 함께 변경될 수 있다는 것을 의미한다. 의존성은 실행시점과 구현시점에 따라 서로 다른 의미를 가진다. 실행 시점 : 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 한..
01. 프로시저 추상화와 데이터 추상화 소프트웨어는 데이터를 이용해 정보를 표현하고 프로시저를 이용해 대이터를 조작한다. 프로시저 추상화는 소프트웨어가 무엇을 해야 하는지를 추상화 하고 데이터 추상화는 소프트웨어가 무엇을 알아야 하는지 추상화 한다. 02. 프로시저 추상화와 기능분해 기능을 중심으로 시스템을 프로시저 단위로 추상화하여 분해하는 방식을 알고리즘 분해 또는 기능 분해라고 부른다. 프로시저 반복적으로 실행되거나 유사하게 실행되는 작업들을 하나의 장소에 모아놓음으로서 로직을 재사용하고 중복을 방지할수 있는 추상화 기법 인터페이스만 알면 사용가능하여 정보은닉 가능성을 제시하지만 한계가 있다. 기능 중심으로 시스템을 분해할 때는 하향식 접근방법을 따른다. 하향식 접근방법 시스템 구성하는 최상위 기능..
00. 선요약 SW 설계에서 절대적인 것은 없다. 모든 결정은 경우에 따라 이루어져야 한다. 01. 협력과 메시지 클라이언트-서버 모델 클라이언트-서버 모델은 두 객체 사이의 협력관계를 설명하기 위해 사용되는 전통적인 메타포 이다. 메시지를 전송하는 객체가 클라이언트 역할, 메시지를 수신하는 객체가 서버 역할을 한다. 그리고 협력 안에서 객체는 클라이언트 역할과 서버 역할을 동시에 수행한다. 메시지와 메시지 전송 메시지는 객체들이 협력하기 위해 사용할 수 있는 유일한 의사소통 수단이다. 한 객체가 다른 객체에게 도움을 요청하는 것을 메시지 전송(message sending) 또는 메시지 패싱(message passing)이라 부른다. 메시지는 오퍼레이션명과 인자로 구성되며 메시지 전송은 여기에 메시지 전..
- Total
- Today
- Yesterday