인터페이스 분리 원칙(ISP) 클라이언트는 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. 클라이언트는 자신이 사용하지 않는 메소드에 의존하도록 강제될 때, 인터페이스가 변경되면 클라이언트 또한 영향을 받기 마련이다. 이러한 결합을 낮추기 위해 거대한 인터페이스를 분리해서 사용할 수 있다. 세 개의 클라이언트에서 employee 를 사용하고 있는 모습입니다. 앞선 원칙들에 따라 employee에서의 변경이 모든 클라이언트들에게 영향을 미치므로 DIP원칙에 따라 인터페이스를 생성합니다. 즉 컴파일 의존성은 클라이언트들은 인터페이스로 이동하지만 런타임 의존성은 여전히 employee에 있습니다. employee 의 변경이 클라이언트에 영향을 미치지 않지만 인터페이스가 변경이 된다면 클라이언트..
의존 관계 역전 원칙(DIP) 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다. 둘 모두 추상화에 의존해야한다. 기존 절차지향적 프로그래밍에서는 상위수준의 모듈이 하위수준의 모듈에 의존하는 경향이 있었다. 이러한 의존성을 역전시켜 상위수준의 모듈이 하위수준의 모듈에 의존하지 않도록 하는 원칙이다. 의존성을 역전시키는 방법은 상위 모듈과 하위 모듈 둘 다 추상화에 의존하게 하는 것이다. Abstraction vs Encapsulation Abstraction과 Encapsulation의 관계는 상호보완적이라 볼 수 있다. Abstraction은 객체의 행동에 초점을 맞추어 공통적인 부분을 묶어낸 것이라면 Encapsulation은 이러한 행동을 뒷받침해주는 Implementation에 초점을 맞춘..
리스코프 치환 원칙(LSP) 서브타입은 그것의 기반타입으로 치환가능해야한다. 타입 S의 객체 o1과 타입 T의 객체 o2가 있을 때, T로 프로그램 P를 정의했음에도 불구하고 o2를 o1으로 치환할 때 P의 행위가 변하지 않으면, S는 T의 서브타입이다. 리스코프 치환 원칙(LSP)는 개발자가 서브 클래스를 작성하기 위한 원칙을 제공합니다. 아래 LSP를 위반한 원칙들을 통해 자세히 알아봅시다. Example 1. DrawShape() 함수를 살펴보면 OCP를 위반하고 있다는 것을 알 수 있다. DrawShape()는 메서드에서 사용할 모든 Shape의 서브 타입에 대해 알고 있어야 하기 때문이다. 만일 Triangle 타입을 추가하고 싶다면 소스코드의 변경없이는 확장이 불가능하다. 이는 Circle와 ..
개방 폐쇄 원칙(OCP) 소프트웨어 개체(클래스, 모듈, 함수)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야한다. 개방 폐쇄 원칙을 따르는 모듈은 다음과 같은 두 가지 속성을 갖는다. 1. 확장에 대해 열려 있다. 이것은 모듈의 행위가 확장될 수 있음을 의미한다. 요구사항이 변경될 때, 이 변경에 맞춰 새로운 행위를 추가해 모듈을 확장할 수 있다. 새로운 타입을 추가함으로써 새로운 기능을 추가하는 것과 같다. 2. 수정에 대해 닫혀 있다. 어떤 모듈을 확장하는 것은 소스코드나 바이너리 코드의 변경을 초래하지 않는다. 이는 확장이 일어날 때 상위 레벨이 영향을 받지 말아야 한다는 것이다. HOW? 이는 모순된 것처럼 보인다. 어떻게 소스 코드를 변경하지 않고도 그 모듈의 행위를 바꾸는 일..
- Total
- Today
- Yesterday
- dijkstra
- kmp
- hld
- union find
- spring
- sorting
- dfs
- knapsack
- 정렬
- spring boot
- DP
- bfs
- 트라이
- Suffix Array
- 세그먼트트리
- 스위핑
- Oracle
- 2-SAT
- Segment tree
- 동적계획법
- 이분매칭
- 좌표압축
- implementation
- SCC
- sweeping
- Fenwick
- string
- 이분탐색
- greedy
- 펜윅트리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |