술(述)/풀이 12

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

bash 설정 파일

bash는 다양한 설정 파일을 가지고 있습니다. /etc/profile ~/.bash_profile ~/.bashrc 이 포스팅에서는 이 설정 파일들이 무엇인지, 언제 실행되는지를 알아보겠습니다. 그 전에 먼저 Bash에서 제공하는 모드들에 대해 알아보겠습니다. interactive 모드 interactive 모드는 사람의 개입이 필요할 때 사용하는 모드입니다. 이는 다시 두 가지 모드를 제공합니다. login 모드 CLI에서 로그인할 때와 SSH를 통해 로그인할 때 사용하는 모드입니다. 이 모드는 아래의 설정 파일들을 실행합니다. /etc/profile ~/.bash_profile 보통 ~/.bash_profile에는 환경 변수를 지정합니다. PATH PS1 등등 non-login 모드 이미 로그인한 ..

술(述)/풀이 2021.12.05

code bloat(코드 비대화)

코드 비대화는 일반적으로 쓸모없는 코드가 너무 긴 상황을 가리킨다. 예시 python3 에서 URL 생성 및 출력하는 소스 코드이다. - 쓸데없이 긴 경우 (코드 비대화) naver_url = "https://finance.naver.com" search_pending = "item/main.naver" code_query = "code" total = naver_url + "/" + search_pending + "?" + code_query + "=" + "12345" print(total) - 간단한 경우 total = f"https://finance.naver.com/item/main.naver?code={12345}" print(total)

술(述)/풀이 2021.11.24

횡단 관심사(Cross-cutting concerns)

횡단 관심사는 AOP에서 사용하는 용어이다. 이 포스팅에서는 횡단 관심사 자체에 관해서 서술하며, AOP는 서술하지 않는다. 횡단 관심사에서, 관심사(concerns)는 기능을 기준으로 나누어진 시스템 일부를 말한다. 이 관심사는 아래처럼 두 가지가 있다. Core 관심사 Cross-cutting 관심사 Core 관심사 core 관심사는 시스템의 주요 기능이다. 예를 들어, 은행 업무 시스템에서는 계좌 이체, 입금, 출금 등등 하나하나의 기능이 core 관심사이다. Cross-cutting 관심사 cross-cutting 관심사는 전체 시스템에 영향을 줄 수 있는 기능이다. 예를 들어, 로깅, 보안 등등이 있다. 은행 업무 시스템에서 계좌 이체, 입금, 출금할 때, 로깅을 하는 기능이 cross-cutt..

술(述)/풀이 2021.11.18

UUID

필자는 어쩌다 보니 Openstack이라는 함정에 빠져있다. Openstack을 사용하다 보면 어쩔 수 없이 UUID를 마주칠 수밖에 없다. 대시보드를 통해 사용하면 UUID가 뭐든 간에 아무 상관 없이 쓸 수 있다. 하지만 CLI를 통해 사용하면, 욕부터 나온다. 일단 외울 수가 없으니, 조회를 하고 이를 복사해 붙여넣기를 통해서 다시 조회해야 한다. 이런 걸 왜 쓸까? 이 포스팅에서는 UUID가 무엇인지, 무슨 이유로 사용하는지, 어떻게 생성되는지에 관한 내용을 서술하겠다. UUID UUID는 Universally Unique Identifer의 약자로, 범용 고유 식별자이다. 또한, UUID는 RFC 4122 표준이다. UUID의 주요 목적은 기존 중앙 집중식 고유 아이디 생성 방식에서의 탈피이다...

술(述)/풀이 2021.11.14

사용자 스토리(User story)

유저 스토리나 사용자 이야기라고 안 부르고 보통 사용자 스토리라고 부른다. 왤까... 사용자 스토리는 사용자 스토리 맵, 스크럼 등 생각보다 많은 곳에서 사용된다. 그런데 참 많은 사람이 사용자 스토리를 잘 알지 못하는 것 같다. 이 포스팅에서는 사용자 스토리가 무엇인지, 어떻게 사용하는 것이 좋은지에 대한 내용을 서술하겠다. 사용자 스토리 사용자 스토리는 협업을 위한 수단이다. 사용자 스토리는 철저히 사용자 측면에서 작성되며, 사용자가 원하는 기능에 대한 간략한 설명이다. 사용자 스토리는 기능에 대한 설명일 뿐, 공식적으로 어떠한 형식을 쓰라는 것은 지정되어 있지 않다. 하지만 보통 아래와 같은 형식을 취한다. As a [페르소나] I want [목표] so that [이유] "[페로소나]로서, 나는 ..

술(述)/풀이 2021.11.10