태그 보관물: DIP

OOD 설계 원칙들..

OOD 개발의 설계 원칙대한 내용입니다.
아래 내용은 클래스 설계 원칙에 대한 내용과 패키지 설계원칙으로 구분되어 있습니다.
자세한 내용은 아래 reference를 참고하세요.. ^^

1. 클래스 설계원칙

The first five principles are principles of class design. They are:

SRP The Single Responsibility Principle A class should have one, and only one, reason to change.
OCP The Open Closed Principle You should be able to extend a classes behavior, without modifying it.
LSP The Liskov Substitution Principle Derived classes must be substitutable for their base classes.
DIP The Dependency Inversion Principle Depend on abstractions, not on concretions.
ISP The Interface Segregation Principle Make fine grained interfaces that are client specific.

2. 패키지 설계원칙

The next six principles are about packages. In this context a package is a binary deliverable like a .jar file, or a dll as opposed to a namespace like a java package or a C++ namespace.

The first three package principles are about package cohesion, they tell us what to put inside packages:

REP The Release Reuse Equivalency Principle The granule of reuse is the granule of release.
CCP The Common Closure Principle Classes that change together are packaged together.
CRP The Common Reuse Principle Classes that are used together are packaged together.

The last three principles are about the couplings between packages, and talk about metrics that evaluate the package structure of a system.

ADP The Acyclic Dependencies Principle The dependency graph of packages must have no cycles.
SDP The Stable Dependencies Principle Depend in the direction of stability.
SAP The Stable Abstractions Principle Abstractness increases with stability.

* reference
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

OOP 설계 5원칙

소프트웨어 공학시간에 배우게 되는 5개의 설계 원칙에 대한 내용입니다.

1. 단일 책임의 원칙(SRP : Single Responsibility Principle)
– 한 객체는 하나의 책임을 져야 한다는 원칙으로 높은 응집도와 낮은 결합도를 기본으로 하고 있다.

2. 의존 관계 역전의 법칙(DIP : Dependency Inversion Principle)
– 클라이언트는 상세 클래스가 아닌 추상화(인터페이스, 추상클래스) 레이어에 의존해야 한다는 원칙으로, 확장 이슈가 있는 부분은 부분은 추상화를 해야 된다는 내용입니다. 

3. 인터페이스 분리의 원칙(ISP : Interface Segregation Principle)
– 클라이언트에 특화된 여러개의 인터페이스가 하나의 범용 인터페이스보다 낫다

4. 리스코프 대체 원칙(LSP : Liskov Substitution Principle)
– 상위 클래스는 파생클래스로 대체 가능해야 되는 원칙으로, 기반클래스의 기능은 파생클래스가 포함을 해야 된다는 내용입니다. 따라서, 파생클래스는 상위클래스보다 더 많은 기능을 제공을 하게 되겠습니다.  아래의 lsp.doc 파일은 전에 스터디를 하면서, C#으로 만들어본 예제입니다.
cfile3.uf.18033E194C4405976474E6.doc
5. 개방 폐쇄 원칙(Open-Closed Principle)
– 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다는 원칙으로 기존의 클래스에 수정하지 말고, 상속 또는 구현으로 확장을 해야 된다는 내용입니다.