본문 바로가기

기타/Design pattern

(6)
Singleton pattern 1. An issue ● 오직 하나의 인스턴스를 구현하여 유지할 수 있는가? 2. Why ● 오직 하나의 인스턴스만을 얻어와서 그것을 제어 ● 다수의 인스턴스 존재시 상호간의 영향으로 예상외의 버그 발생 ● 하나의 클래스에서 각각의 인스턴스를 얻어오면 엄청난 리소스의 손실 발생 ● 개별적인 인스턴스로 많은 Garbage가 발생하고 CPU의 낭비 ● 하나의 인스턴스만을 얻어온다는 것은 메모리 공유의 효과 3. An example ● 프린터 스풀러 - 각각의 인스턴스 발생 시 시스템의 엄청난 리소스와 CPU의 낭비 ● 데이터 베이스 엔진 - 하나의 데이터 베이스로 여러 사용자에게 같은 정보 공유, 효과적인 관리 ● 사용자 인증 시스템 - 하나의 로컬 pc에서 하나의 user ID와 password를 얻어와 ..
Decorator pattern 1. Issue ● 객체에 정해진 기능이 아닌 동적으로 기능을 추가할 수 있는가? 2. Why ● 프로그램의 확장에 따라서 새로운 기능이 추가되거나 삭제 될 때가 잇다. ● 클래스에 새로운 기능을 추가하면 클래스를 재정의 해야 한다. ● 새로운 기능 추가에 대해 클래스 상속을 이용하면 수많은 클래스가 생겨버린다. 3. Solution (Decorator 패턴) ○ 기존에 존재하는 기능 외에 새로운 기능 추가 시 연결고리(Decorator) 를 하나 만들어 준다. ○ 기존에 존재하는 기능이 아닌 기능이 새로 추가 된 것처럼 적용 ○ 객체들 간의 관계 class Decorator : public Airplane { public : Decorator(Airplane * pObj) { pComponent_ = ..
Builder pattern 1. Background ● 실제적인 객체의 생성은 한번에 생성되지 않는다. ● 객체를 구성하는 데이터 멤버들을 일일이 생성 ● 생성자의 호출로 인해서 객체를 생성 2. Issue ● 효과적인 객체 생성을 위해 부분 부분을 따로 생성하여 이를 조합해서 객체를 생성할 수 있는가? 3. Why ● 여러 부분에 걸쳐서 값이 입력되는 객체의 경우 ● 입력된 정보만을 저장할 많은 공간 필요 ● 최종 입력 후 객체 생성에도 시간이 많이 걸릴 수 있다. ● 내부구조의 변경 시 기존 소스 코드에 많은 영향을 준다. 4. Good point ● 객체의 생성 부분과 실제 표현하고 구성하는 부분을 분리시켜 서로간의 독립성 보장 ● 독립성의 보장으로 독립적인 수정 및 재사용이 가능 ● 서로 다른 표현방식을 가지는 객체를 동일..
Adapter pattern 1. Issue ● 기존의 클래스나 라이브러리 모듈을 변형하거나 수정 하지 않고 사용할 수 있는가? 2. Why ● 인터페이스가 다른 클래스를 사용하려면 인터페이스를 통일 시켜야 한다. ● 자신이 개발하는 모듈의 소스를 수정하는 것은 더욱 많은 비용을 발생시킨다. ● 라이브러리 모듈 같은 경우 소스코드가 없고 수정하려 해도 많은 비용이 든다. 3. Solution 3-1. Object Adapter 패턴 ○ 존재하는 객체를 참조해서 인터페이스를 통일 class Rectangle{ public : Rectangle() {} void Draw() {} }; class TextView{//존재하는클래스(Adaptee클래스) public : Rectangle GetExtent() { return Rectangl..
Abstract Factory pattern 1. 제품군별 객체 생성 1.1. 제품군(Product Family)이란? - 같은 환경이나 조건에서 실행될 클래스만을 모아 놓은 것 1.2. 문제점 - 시스템의 환경에 따라 클래스 객체를 생성 1.3 해결책 ①기본적 방법(조건 비교 방식) - 조건에 따라 생성 - 비교문장이 존재하므로 샐운 조건 추가시 프로그램 전체를 수정 EX) void ScanParse() { if(strncasecmp(sysInfo.sysname, HPUX, strlen(HPUX)) == 0) { //HP용객체생성및사용 HPScanner scanner; HPParser parse; } else if(strncasecmp(sysInfo.sysname, SUNOS, strlen(SUNOS)) == 0) { //Sun용객체생성및사용 S..
소프트웨어 개발 기본 요소 1. 소프트웨어 개발이란? - 원하는 목적을 달성하기 위해 기준이 되는 개념이나 철학(구조적, 객체지향적)을 바탕으로 특정한 과정을 거쳐 소프트웨어적인 해결책을 만들어 내는 것. 1.1. 구조적(Structured) ① 원하는 목적을 직접적인 기능으로 세분화 구체화 ② 간단한 구조(하향식, 서브트리구조) ③ 어려운 유지, 보수 ④ 하나의 기능 수정시 전체 구조를 확인 1.2. 객체지향적(Object Oriented) ① 객체들 간의 상호 관련이 중요 ② 2단계 방식 (ⅰ.클래스 설계 ⅱ.기능수행) ③ 복잡한 네트워크 구조 ④ 쉬운 유지, 보수 ⑤ 객체의 재사용 가능 ⑥ 클래스 상속을 통해 확장이용이 2. 소프트웨어 개발과정 ① 요구사항 명세 - 요구사항을 조정 ② 요구사항 분석 - 환경,기능,행위 등의 ..