Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Holub on Patterns

No description
by

Eujin Jung

on 23 June 2011

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Holub on Patterns

소프트웨어 설계의 고고학 완벽한 설계란 있을 수 없겠지만 완벽에 가까운 설계일수록 군더더기가 없고 단순하다 - 에릭 레이몬드 높은 응집도와 낮은 결합도 응집도 : 하나의 클래스가 하나의 기능(책임)을 온전히
순도 높게 담당하고 있는 정도
결합도 : 클래스 간의 서로 다른 책임들이 얽혀 있는 상호
의존도의 정도 5대 원칙 1. SRP(The Single Responsibility Principle) : 단하나의 책임 원칙
'객체는 하나의 책임만을 맡아야 한다.'
- 하나의 클래스는 하나의 책임을 가져야한다.
- 어떤 클래스를 변경해야하는 이유는 오직 하나뿐이어야한다.
- 시스템의 모든 객체는 하나의 책임만을 가지며, 객체가 제공하는
모든 서비스는 그 하나의 책임을 수행하는데 집중해야한다. 2. 의존관계 역전의 법칙 ( Depend Inversion Principle)
'클라이언트는 구체 클래스가 아닌인터페이스나
추상클래스에 의존해야 한다.'
- 추상클래스는 파생 클래스를 창조해서는 안되며, 파생
클래스나 추상 클래스는 오직 추상 클래스만을
참조해야한다.
- 파생 클래스가 의존할때는 추상 클래스의 의존, 추상
클래스가 의존할때는 추상클래스에 의존
결국, 의존의 대상은 추상클래스나 인터페이스가
되어야한다.
- 원칙주의와 교조주의 차이점
* 주어진 이념 노선과 원칙을 실천적 검증 없이
신봉하려는 태도를 말한다. 1. 개발자 부주의
- ArrayList list = new ArrayList();
2. 상속구조가 잘못된 경우
is-a 관계 불성립(stack, arraylist)
3. LSP(리스코프 대체 원칙)를 지키지 않는 경우 3. 인터페이스 분리의 원칙
'클라이언트에 특화된 여러 개의 인터페이스가
하나의 범용 인터페이스보다 낫다'
- 클라이언트는 자신이 사용하지 않는 메소드에
의존관계를 맺으면 안된다.
- 어떤 객체의 사용자에게 그 사용자한테 필요한
메서드만 있는 인터페이스를 제공하라.
- 파생 클래스 입장에서 사용할때 100% 구현할
수 있는 인터페이스만 사용해야한다. 4. LSP (Liskov substitution Principle) : 리스코프 대체 원칙
'기반 클래스는 파생 클래스로 대체 가능해야 한다.'
- 서브 타입은 언제나 자신의 기반 타입(base type) 으로
교체 할수 있어야한다.
- 자식 클래스들은 부모 클래스의 인터페이스를 통해서 사용
가능해야 하고 사용자는 그 차이를 몰라야 한다.
- LSP 원칙은 함수 종속적이다.
- LSP 원칙은 함수에서 사용될때에 함수의 인자는 추상클래스나 인터페이스를 받아서 사용한다. 5.OCP(The Open - Closed Principle) : 개방 폐쇄의 원칙
'모듈은 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.'
- 소프트웨어 엔티티(클래스, 모듈, 함수 등등)는 확장에는
개방되어야하지만, 변경에는 폐쇄적이어야한다.
- 클래스를 변경하지 않고도 확장으로 필요한 기능이 제공될
수 있어야 한다.
- 부모클래스의 수정은 하위의 자식 클래스에 영향을 미치기
때문에 수정을 지양하여야 한다. * 기능적 응집(Functional Cohesion)
일관된 기능들이 집합된 경우, 기능 항목의 높은 응집성을 갖는다.
* 순차적 응집(Sequential Cohesion)
한 클래스 내에 등장하는 하나의 소작업(메쏘드)의 결과가 다음 소작업(메쏘드)의 입력으로 사용되는 관계(파이프라인 방식의 처리 체인 관계).
* 교환적 응집(Communicational Cohesion)
동일한 입력과 출력 자료를 제공하는 메쏘드들의 집합을 말하며, 팩토리 클래스는 전형적인 교환적 응집도가 높은 인터페이스를 갖는다.
* 절차적 응집(Procedural Cohesion)
순서적으로 처리되어야 하는 소작업(메쏘드)들이 그 순서에 의해 정렬되는
응집관계
* 시간적 응집(Temporal Cohesion)
시간의 흐름에 따라 작업 순서가 정렬되는 응집관계
* 논리적 응집(Logical Cohesion)
유사한 성격의 개체들이 모여 있을 경우를 말하며 java.io 클래스들의 경우가
대표적인 예이다. * 자료 결합(Data Coupling)
두 개 이상의 클래스가 매개변수에 의해서 결합 관계를 가지므로 낮은 수준의 결합도로 연관되는 경우
* 스탬프 결합(Stamp Coupling)
자료 결합의 경우에서 매개변수 일부만을 사용하는 경우
* 제어 결합 (Control Coupling)
두 클래스간의 제어 이동이 매개변수를 이용하여 사용되는 경우로 커맨드 패턴이 대표적인 사례이다
Full transcript