DDD(42)
-
9장. LSP, 리스코프 치환 원칙
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. LSP : 리스코프 치환 원칙 1988년 바바라 리스코프(Barbara Liskov)는 하위 타입(subtype)을 아래와 같이 정의 했다. S 타입의 객체 o1에 각각에 대응하는 T 타입 객체 o2가 있고, T 타입을 이용해서 정의한 모든 프로그램 P에서 o2의 자리에 o1을 치환하더라도 P의 행위가 변하지 않는다면, S는 T의 하위 타입이다. 상송을 사용하도록 가이드하기 아래의 그림과 같이 License라는 클래스가 있다고 했을 때, License는 PersonalLicense와 BusinessLicense라는 두 가지 '하위 타입'이 존재한다. License와 파생 클래스는 LSP를 준수한다. 이 설계는..
2023.05.22 -
8장. OCP, 개방-폐쇄 원칙
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. OCP: 개방-폐쇄 원칙 개방-폐쇄 원칙(OCP)이라는 용어는 1988년에 버트란트 마이어(Bertrand Meyer)가 만들었는데, 다음과 같다. 소프트웨어 개체(artifact)는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다. 다시 말해 소프트웨어 개체의 행위는 확장할 수 있어야 하지만, 이때 개체를 변경해서는 안 된다. 소프트웨어 아키텍처를 공부하는 가장 근본적인 이유이기도 하다. 만약 요구사항을 살짝 확장하는 데 소프트웨어를 엄청나게 수정해야 한다면 그 소프트웨어 시스템을 설계한 아키텍트는 엄청난 실패에 맞닥뜨린 것이다. 대다수 개발자들은 OCP가 클래스와 모듈을 설계할 때 도움되는 원칙이라..
2023.05.21 -
7장. SRP, 단일 책임 원칙
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. SRP: 단일 책임 원칙 SOLID 원칙 중에서 그 의미가 가장 잘 전달되지 못한 원칙은 바로 단일 책임 원칙(SRP)이다. 프로그래머 입장에서는 모든 모듈이 단 하나의 일만 해야 한다는 의미로 받아들이기 쉽다. 헷갈리면 안된다. 함수가 단 하나의 일을 해야한다는 원칙을 가지고 있고 SRP의 의미는 아래와 같다 단일 모듈은 변경의 이유가 하나, 오직 하나뿐이어야 한다. 변경을 요청하는 한 명 이상의 사람들을 액터(Actor)라고 부른다면 아래와 같다. 하나의 모듈은 하나의, 오직 하나의 액터에 대해서만 책임져야 한다. 모듈이란 가장 단순한 정의는 바로 소스 파일이다. 모듈은 단순히 함수와 데이터 구조로 구성된..
2023.05.21 -
6장. 함수형 프로그래밍
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. 함수형 프로그래밍 이 패러다임에서 핵심이 되는 기반은 람다(lambda) 계산법으로 알론조 처치(alonzo Church)가 1930년대에 발명했다. 정수를 제곱하기 함수형 프로그래밍이 무엇인지 설명하기 위해 아래의 예제를 보자 public class Squint { public static void main(String args[]){ for(int i=0; i
2023.05.20 -
5장. 객체 지향 프로그래밍
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. 객체 지향 프로그래밍 좋은 아키텍처를 만드는 일은 객체지향(OO) 설계 원칙을 이해하고 응용하는 데서 출발한다. 그럼 OO란 무엇인가? "데이터와 함수의 조합"의 답은 o.f()가 왼지 f(o)와 다르다는 의미를 내포하고 있어 별로다. "시렞 세계를 모델링하는 새로운 방법"의 답은 얼버무리는 수준이다. OO의 본질을 설명하기 위해 캡슐화(encapsulation), 상속(inheritance), 다형성(polymorphism)이 세 가지 개념을 적절하게 조합한 것이거나, 또는 OO 언어는 최소한 세 가지 요소를 반드시 지원해야 한다고 말하는 부류들이 있다. 캡슐화? 데이터와 함수가 응집력 있게 구성된 집단을 ..
2023.05.20 -
4장. 구조적 프로그래밍
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. 구조적 프로그래밍 증명 데이크스트라는 초기에 인식한 문제는 프로그래밍은 어렵고, 프로그래머는 프로그래밍을 잘하지 못한다는 사실이었다. 데이크스트라는 연구를 진행하면서 goto 문장이 모듈을 더 작은 단위로 재귀적으로 분해하는 과정에 방해가 되는 경우가 있다는 사실을 발견했다. 만약 모듈을 분해할 수 없다면, 합리적으로 증명할 때 필수적인 기법인 분할 정복 접근법을 사용할 수 없게 된다. 반면 goto 문장을 사용하더라도 모듈을 분해할 때 문제가 되지 않는 경우도 있었다. 데이크스트라는 이런 goto문의 '좋은' 사용 방식은 if/then/else와 do/while과 같은 분기와 반복이라는 단순한 제어 구조에 ..
2023.05.19