일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Android
- 특수기호
- git
- jenkins
- 라이브아카데미
- Realtime Database
- 안드로이드
- Python
- django
- non conventional NFR
- 직장영어
- conventional NFR
- RecyclerView
- 영어회화
- 이모티콘
- skeleton architecture
- 객치지향프로그래밍
- 젠킨스
- 파이썬
- cloud firestore
- re-engineering
- 메타 쓰레드
- 특수문자
- 자료구조
- Firebase
- 쓰레드 비디오 다운로드
- firestore
- meta threads
- 쓰레드 이미지 다운로드
- endless scrolling
- Today
- Total
Owl Life
3. Principles of SW Design 본문
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 |