SOLID ****

각 모듈의 응집도를 높이고, 결합도를 낮춤으로 확장성이 수용이 용이한 코드를 설계함으로 유지보수를 절감


◼︎ SRP Single Responsibility Principle

//하나의 객체가 여러 역할을 가질 경우 개발자는 해당 객체의 역할과 동작 파악이 어려워짐.
DataManager
func readDataFromDisk() ...
func writeDataToDisk() ...
func getDataFromServer() ...
func setDataToServer() ...

---- 분리 ----
//객체의 단일 책임을 부여한다면 협업, 유지보수 비용에 이점을 가져옴.
DiskDataManager
func readDataFromDisk() ...
func writeDataToDisk() ...

NetworkDataManager
func getDataFromServer() ...
func setDataToServer() ...

◼︎ OCP Open Closed Principle

//신규 기능이 추가될 경우 코드의 불안정성과 유지보수가 비효율적임 
GraphicRender
func drawRectangle() ...
func drawTriangle() ...
func drawCircle() ...
func drawLine() ...

//도형의 정보를 외부에서 주입할 수 있게 만듬
func drawPolygon(Polygon)
Polygon (origin(x,y), size(w,h), cornerRadius)

◼︎ LSP Liskov Substitution Principle

◼︎ ISP Interface Segregation Principle

◼︎ DIP Dependency Inversion Principle

**- - - Original - - -** 
TVRemote
func power
func channel
func volume

RadioRemote
func power
func channel
func volume

PodCastRemote
func power
func channel
func volume
**- - - LSP - - -
ISP + DIP**
func changeController(Remote)
 Imp.RemoteInterface > remote
**- - - ISP - - - (Protocol)**
RemoteInterface
func power
func channel
func volume

TVRemote
Imp.RemoteInterface
RadioRemote
Imp.RemoteInterface
PodCastRemote
Imp.RemoteInterface
**- - - DIP - - -**
RemoteInterface
func power
func channel
func volume

func changeController(Remote)
Imp.RemoteInterface > remote

의존성 주입이란 ?

인터페이스로 추상화 함으로써 기존 코드의 변경없이 모듈 구현


Design Pattern (https://refactoring.guru/)

각자의 노하우를 정형화함


◼︎ Creational Patterns

Builder, Factor