SOLID 4

OCP

정의 SOLID 중 O에 해당한다. OCP는 Open-Closed Principle의 약자로, 개방 폐쇄 원칙이다. 코드가 확장에 대해 열려 있고, 변경에 대해 닫혀 있어야 한다는 원칙이다. 주의! 변경을 최소화하자는 말이지, 변경하지 말라는 것이 아니다. 천재가 아닌 이상에야 완벽한 추상화를 하기는 어렵다. 위반 사례 OCP를 위반하면 비슷한 if else 문 다수 존재하거나 switch 문이 존재하게 된다. import "log" func doSomething(op string, a, b int64) int64 { switch op { case "+": return a + b case "-": return a - b default: panic("panic") } } func main() { ret :..

술(述)/풀이 2022.01.04

ISP

정의 SOLID 중 I에 해당한다. ISP는 Interface Segregation Principle의 약자로, 인터페이스 분리 원칙이다. 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. (인터페이스의 SRP) ISP의 장점 소프트웨어를 디커플링된 상태로 유지하게 해준다. 리팩토링, 변경, 재배포를 더 쉽게 할 수 있게 해준다. 이 글을 쓰다가 문득, “그럼 인터페이스에 메소드를 하나씩만 넣으면 되지 않을까?” 생각했는데, 생각만 해도 끔찍하더라, 뭐든 적당한 게 좋다. 일단 코드 크기부터가 미칠 것 같다. 위반 사례 인터페이스가 클라이언트가 사용하지 않는 메소드를 가지는 경우 어떻게 될까? 아래 예시는 프린터가 스캔과 출력 메소드를 가지는 경우이다. type Printer ..

술(述)/풀이 2021.12.29

SRP

정의 SOLID 중 S에 해당한다. SRP는 Single Responsibility Principle의 약자로, 직역하면 단일 책임 원칙이다. 여기서 말하는 책임은 무엇일까? 이 책임이라는 단어가 애매해서, 프로그래머가 모든 모듈이 하나의 일을 해야 한다는 의미로 받아들이기가 쉽다. 필자가 생각하기에 Responsibility라는 단어보다는 Persona라는 단어가 더 어울린다고 생각한다. 즉, 하나의 모듈은 하나의 Persona에 의해 좌지우지돼야 한다. SRP의 창시자 "Robert C. Martin"은 책임을 변경의 이유로 정의했다. 즉, 단일 책임 원칙은 변경의 이유가 반드시 하나이어야 한다. 더보기 Martin defines a responsibility as a reason to change,..

술(述)/풀이 2021.12.13

LSP

정의 SOLID 중 L 에 해당한다. 리스코프 치환 원칙(Liskov Substitution Principle)은 Barbara Liskov(바바라 리스코프)가 처음 소개했다. 즉, 리스코프가 개발한 치환 원칙이다. 그렇다면 뭘 치환할까? 바로 상위 타입을 하위 타입으로 치환하는 것을 말한다. 이때 하위 타입으로 치환하더라도 치환하기 이전처럼 정상적으로 동작해야 한다는 것이 리스코프 치환 원칙이다. 위반사례 전통적으로 직사각형/정사각형 문제가 있다. type Tetragon interface { SetHeight(height uint64) SetWidth(width uint64) Area() uint64 } 위 예시처럼 사각형(tetragon)이라는 인터페이스가 존재할 때, 직사각형과 정사각형을 구현하면..

술(述)/풀이 2021.12.10