Go 언어 프로그래밍 - SOLID
『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)
코드 일부분을 현재 어플리케이션에서 분리해서 다른 프로젝트에서 사용하고 싶지만 모듈간 결합도가 높아서 옮길 수가 없는 경우이다. 코드 재사용률이 급격히 감소한다.