Programming Language/go

Go 언어 프로그래밍 - SOLID

김크리 2021. 8. 11. 23:09

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다.


SOLID

객체지향 설계 5가지 원칙의 약자이다.

Go 의 문법과 연관이 직접적으로 있지는 않지만, 프로그래밍을 하며 알아야하는 원칙이다.

  • 단일 책임의 원칙(Single Responsebility principle, SRP)

모든 객체는 책임을 하나만 져야한다.

코드의 재사용성을 높여준다.

  • 개방-폐쇄 원칙(Open-closed principle, OCP)

확장에는 열려있고 변경에는 닫겨있다.

상호 결합도를 줄여 새 기능을 추가할 때 기존 구현을 변경하지 않아도 된다.

  • 리스코프 치환의 원칙(liskov substitution principle, LSP)

q(x)를 타입 T의 객체 x에 대해 증명할 수 있는 속성이라 하자. 그렇다면 S가 T의 하위 타입이라면 q(y)는 타입 S의 객체 y에 대해 증명할 수 있어야 한다.

예상치 못한 작동을 예방할 수 있다.

  • 인터페이스 분리 원칙(Interface segregation principle, ISP)

클라이언트는 자신이 이용하지 않는 메소드에 의존하지 않는다.

  • 의존 관계 역전 원칙(Dependency inversion principle, DIP)

상위 계층이 하위 계층에 의존하는 전통적인 의존 관계를 반전(역전) 시큼으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.

원칙 1 : 상위 모듈은 하위 모듈에 의존해서는 안된다. 둘 다 추상 모듈에 의존해야한다.

원칙 2 : 추상 모듈은 구체화된 모듈에 의존해서는 안된다. 구체화된 모듈은 추상 모듈에 의존해야한다.

 

OOP(Object Oriented Programming)

객체지향 프로그래밍, 객체 중심 프로그래밍 등 해석하기 나름이다.

객체를 가지고 프로그래밍을 하는 것을 말한다. 저자는 객체 중심 프로그래밍이라고 하는 편을 선호한다.

나쁜 설계

  • 경직성(rigidity)

모듈간 결합도가 너무 높아 코드를 변경하기 어려운 구조를 말한다

  • 부서지기 쉬운(fragility)

한 부분을 건드렸더니 연계적으로 다른 부분이 망가지는 경우를 말한다. 유지보수와 프로그램을 변경하기가 어렵다

  • 부동성(immobility)

코드 일부분을 현재 어플리케이션에서 분리해서 다른 프로젝트에서 사용하고 싶지만 모듈간 결합도가 높아서 옮길 수가 없는 경우이다. 코드 재사용률이 급격히 감소한다.

 

참고

Tucker의 Go언어 프로그래밍 - Go가 온당

https://www.youtube.com/c/TuckerProgramming/videos

https://github.com/tuckersGo