Owl Life

3. Principles of SW Design 본문

Software Architecture

3. Principles of SW Design

Owl Life 2022. 12. 1. 22:46
반응형

SOLID

In computer programming, the term SOLID is a mnemonic acronym for five design principles intended to make software designs more understandable, flexible and maintainable. The principles are a subset of many principles promoted by Robert C.Martin. Though they apply to any object-oriented design, the SOLID principles can also form a core philosophy for methodologies such as agile development or Adaptive Software Development. The SOLID acronym was introduced by Michael Feathers.

 


SRP

A class should have only a single responsibility (i.e. changes to only one part of the software’s specification should be able to affect the specification of the class)

OCP

확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.

Don’t modify code, just extend class using inheritance, composition.

LSP

상속을 얼마나 잘 사용하고 있는가에 대한 원칙

상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

상위 타입 : Base 클래스, 하위 타입 : 구체 클래스

class apple extends Item {}

// 메서드 인자로 item 대신에 apple을 넘기더라도 동작해야 함.
// 여기서 리스코프 치환 원칙이 지켜지지 않는다면, 다형성에 기반한 개방 폐쇄 원칙 역시 위반하는것.
// instanceof를 통하여 하위 클래스의 존재를 알아야 하는 순간 잘못 사용하고 있는것.
public int calculate(final Item item) {
	return item.calculate();
}

ISP

클라이언트는 자신이 사용하는 메서드에만 의존해야 한다.

인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리함으로써,

클라이언트로부터 발생하는 인터페이스의 여파가 다른 클라이언트에 미치는 영향을 최소화 하는것을 목표로 한다.

ISP 미적용  ISP 적용


User2 코드 수정시, User1도 새로 컴파일 해야 할 수 있음.

DIP

고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 된다.

저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다. 즉, 자신보다 변하기 쉬운 것에 의존하지 마라.

 

Example

자동차가 스노우타이어에 의존. 즉, 고수준 모듈인 자동차가 저수준 모듈인 스노우타이어에 의존.

이런 경우, 타이어 변경시 자동차의 부속품도 변경 해야 함. → OCP 위배

이슈 해결 위하여, DIP는 추상화를 활용하여 아래처럼 설계

 


Separaction of Concerns

개발 및 유지관리를 단순하게 해준다.

잘 나뉘어 있는 관심사(concern)는 개별 섹션을 재사용 할 수 있을 뿐 아니라 다른 섹션의 세부 사항을 알지도 변경하지 않고도 개발된 코드를 재사용할 수 있게 함.

Q) Give examples of applying Separation of Concerns.

A) Internet protocol stack, MVC, Microservice 등

 

Modularity, Functional Independence

Cohesion : Indication of the relative functional strength of a module

Coupling : Indication of the relative interdependance among modules.

 

 

 

반응형

'Software Architecture' 카테고리의 다른 글

6. Software Architecture Styles  (0) 2022.12.04
5. Requirement Engineering  (0) 2022.12.04
GOF - Software Design Pattern  (0) 2022.12.04
2. OO Analysis and Design (OOAD)  (0) 2022.12.01
객체지향 프로그래밍 / OOP란?  (0) 2022.12.01
Comments