본문 바로가기

LANGUAGES, METHODLOGY/Clean Architecture

[클린아키텍처] 3부 : SOLID 원칙

계속 머릿속에 되뇌이면서 코드에 녹여내야 할 중요한 원칙 SOLID에 관한 내용이다.

 

단순한 코드 차원에서 나아가 전반적인 구조를 어떻게 구성해야 할 지에 대한 내용에 더 가깝다.

 

기존에 살폈던 내용과 책을 읽고 난 뒤 다시 정리 차 내용을 끄적여 본다.


 

SRP(Single Responsibilty Principle) 단일 책임 원칙

 

각 모듈은 하나의 구성원에게만 책임을 진다. 유사한 기능을 수행하는 로직이 있을 지라도, 이는 사용하는 대상과 더불어 대상에 따라 다르게 적용될 이후 수정사항들이 존재할 수 밖에 없기 때문에, 이를 분리함으로써 하나의 기능 수정이 모든 모듈에 미칠 수 있는 영향을 제거하는 것이다.

 

OCP(Open Close Principle) 개방 폐쇄 원칙

 

기존의 코드를 건드리지 않고, 새로운 코드를 추가해 기능을 구현한다.

기능 개발이 잦고 배포 주기가 빠른 팀일수록, 상당 부분 공감할 원칙.

 

LSP(Liskov Substitution Principle) 리스코프 치환 원칙

 

A의 모듈로 구성된 기존 기능을 B라는 모듈로 대체한 뒤 기능이 동일하게 작동한다면, A 모듈은 B 모듈의 하위 모듈이라는 원칙을 따른다. 

각 모듈이 이후 교체되거나 변동되는 상황 속에서도, 기존에 사용하던 기능들을 동일하게 쓸 수 있게 하는 것이 핵심이다.

 

ISP(Interface Segregation Principle) 인터페이스 분리 원칙

 

모듈은 사용하지 않은 기능에 의존하지 않아야 한다.

한 인터페이스를 참조해 사용하는 모듈들이 여러개 일 때, 각 모듈들이 각자 사용하는 메소드를 한 인터페이스가 전부 가지고 있지 않게 하는 것이다. 이를 반영하기 위해 책의 예제는 기존의 인터페이스를 각 모듈에서 사용하고자 하는 서브 Interface 클래스를 만들어 이를 구현했다.

 

DIP(Dependency Inversion Principle) 의존성 역전 원칙

 

소스 코드의 의존성은 제어 흐름과는 반대 방향으로 역전되도록 하는 원칙이다. 의존성 역전을 모든 곳에 100% 적용하는 것은 현실상 어려운 일이며, DIP 구현을 위해서는 추상 팩토리 패턴을 사용하는 것을 추천하고 있다.

 

추가적으로 DIP를 위해 안정된 추상화를 위해 지켜야 할 원칙들에 대한 책의 내용이다.

 

- 변동성이 큰 구체 클래스를 참조하지 말라.(대신 추상 인터페이스를 참조하라). Use Abstract Factory!

- 변동성이 큰 구체 클래스로부터 파생하지 말라. (정적 타입 언어에서 상속이 한번 이뤄지고 나면 변경이 어렵기 때문에, 상속 자체를 신중하게 하는 것이 중요!)

- 구체 함수를 오버라이드 하지 말라. (구체 함수는 소스 코드 의존성을 필요로 하므로, 의존성 자체까지 상속하게 된다. 이를 제거하려면 추상 함수로 선언하고, 구현체들에서 각자의 용도에 맞게 구현하는 것이 필요하다.)

 

 

클린 아키텍처

“살아있는 전설이 들려주는 실용적인 소프트웨어 아키텍처 원칙”소프트웨어 아키텍처의 보편 원칙을 적용하면 소프트웨어 수명 전반에서 개발자 생산성을 획기적으로 끌어올릴 수 있다. 《

book.naver.com