O-O Design Principle

Single Responsibility Principle
Dependency Inversion Principle 

Interface Segregation Principle

Liskov Substitution Principle
Open-Closed Principle


Low Coupling, High Cohesion


1.1 Low coupling, High cohesion

  • 높은 응집도, 낮은 결합도(High Cohesion, Low Coupling) 원칙은 1970년대 래리 콘스탄틴(Larry Constantine)과 에 드워드 유던(Edward Yourdon)이 정의했던 아주 고전적 인 원리

  • High Cohesion, Low Coupling을 준수하는 이유
    소프트웨어 시스템 고유의 유지 보수성과 적응성을 측정하는 가

    장 좋은 방법이 된다.
    응집도가 높고 결합도가 낮은 구조는 변경이나 확장에 유용하다. 

1.1 Low coupling, High cohesion


결합도(Coupling)
정의:클래스간의서로다른책임들이얽혀있는상호의존도의정도 결합도가 높을수록 코드를 읽기 힘들어진다.

서로다른책임이산만하고복잡하게얽혀있기때문에가독성이떨 어지고 유지보수가 곤란해진다. 



1.1 Low coupling, High cohesion

응집도(Cohesion)
정의 : 하나의 클래스가 하나의 기능(책임)을 온전히 순도 높게 담당하

고 있는 정도

응집도가 높아질수록 클래스와 프로그램의 구조는 상대적으로 단순, 명

쾌해 진다. 


1.2 SRP : 단일 책임의 원칙

하나의 클래스는 하나의 책임만을 가져야 한다. 책임:클래스가수행하여야할기능/계약

클래스를 변경하게 되는 원인

주요나쁜냄새
‘여러 원인에 의한 변경(divergent change)’ ‘산탄총 수술(shotgun surgery)’ 


1.3 OCP : 개방-폐쇄 원칙


소프트웨어 구성 요소(컴포넌트, 클래스, 모듈, 함수)는 확장에 대해서는 개방돼야 하지만 변경에 대해서는 폐쇄 되어야 한다.

변하는 것(확장 가능한 것)
vs. 변하지 않는 것(인터페이스/계약...)

의 구 




1.4 ISP : 인터페이스 분리의 원칙

클라이언트는 자신이 사용하지 않는 Method에 의존관 계를 맺으면 안된다.

하나의 일반적 인터페이스보다 여러 개의 구체적인 인터 페이스가 낫다. 


1.5 DIP: 의존성 역전의 법칙

  • 고수준의 모듈은 저수준의 모듈에 의존하지 않아야 한다.

  • 구상화된 모듈에 의존하지 않고, 추상화된 모듈에 의존

    해야 한다.

  • 구상 클래스대신 인터페이스/서비스/계약에 의존

  • 헐리우드 원칙: Don‘t call us, we’ll call you!

  • IoC: Inversion of Control

     


1.6 LSP: 리스코프 치환 원칙

  • 서브 타입(상속/유도된 타입)은 언제가 기반(base) 타입으로 대체 가능해야 한다.

  • 서브클래스에서는기반클래스의사전조건과같거나더약 한 수준에서 사전 조건을 대체할 수 있고, 기반 클래스의 사후 조건과 같거나 더 강한 수준에서 사후 조건을 대체할 수 있다

  • 나쁜냄새: 거부된 유산

    • –  부모를 상속한 자식 클래스에서 메쏘드를 지원하는 대신 예외를 던 진다(예를 들어 콜렉션 프레임워크에서 UnsupportedOperationException)

    • –  자식 클래스가 예외를 던지지는 않지만 아무런 일도 하지 않는다.

    • –  클라이언트가 부모보다는 자식을 직접 접근하는 경우가 많다. 


'컴퓨터공학 > OOP' 카테고리의 다른 글

OOP 4 Steps  (0) 2013.01.07
OOP Terminology  (0) 2013.01.05
객체지향 언어가 제공해야 할 3가지 요소..  (0) 2012.05.04

1. class definition

2. class declaration

3. instantiation

4. invocation

'컴퓨터공학 > OOP' 카테고리의 다른 글

객체지향 설계 기본 원칙  (0) 2013.01.24
OOP Terminology  (0) 2013.01.05
객체지향 언어가 제공해야 할 3가지 요소..  (0) 2012.05.04

OOP Terminology

 

- Class

- Object

Field (instance variable)

- Method (member function)

- Constructor

- Finalizer (Destructor)

- Overloading

- Overriding : Final (cf. virtual)

- Inheritance

- super (base) class

- Class Method / Clas variable : static

- Abstract

- Inheritance

'컴퓨터공학 > OOP' 카테고리의 다른 글

객체지향 설계 기본 원칙  (0) 2013.01.24
OOP 4 Steps  (0) 2013.01.07
객체지향 언어가 제공해야 할 3가지 요소..  (0) 2012.05.04

1. ADT (Abstract Data Type)


2. Inheritance (상속)


3. Polymorphism (다형성)

'컴퓨터공학 > OOP' 카테고리의 다른 글

객체지향 설계 기본 원칙  (0) 2013.01.24
OOP 4 Steps  (0) 2013.01.07
OOP Terminology  (0) 2013.01.05

+ Recent posts