소프트웨어 (5) 썸네일형 리스트형 [Clean Architecture]SOLID 원칙 : 5.DIP 의존성 역전 원칙 DIP 란? 의존성 역전 원칙은 유연성을 극대화시키는데 그 목적이 있다. 이는 소스 코드 의존성이 추상(abstraction)에 의존하며, 구체(concretion)에는 의존하지 않는 시스템을 이야기한다. 즉, 정적 타입의 언어에서는 use, import, include를 통해 인터페이스 혹은 추상 클래스와 같은 추상적인 선언만 참조해야한다는 뜻이다. 하지만 정적타입 언어인 JAVA를 예로들면, String이나 Integer와 같은 구체클래스도 사용하면 안된다는 걸까? 그렇지 않다. String이나 Integer와 같은 클래스는 매우 안정적인 클래스 이기 때문에 변경되는 일이 적다. 따라서 DIP를 논할 때, 운영체제나 플랫폼 같이 안정성이 보장된 환경에 대해서는 무시하는 편이다. 즉, 우리가 주의해야할.. [Clean Architecture]SOLID 원칙 : 3.LSP 리스코프 치환 원칙 LSP 란? 바바라 리스코프라는 사람이 정의한 하위 타입에 대해 먼저 생각해보자 . 여기에서 필요한 것은 다음과 같은 치환 원칙이다. S 타입의 객체 o1 각각에 대응하는 T 타입 객체 o2가 있고, T타입을 이용해서 정의한 모든 프로그램 P에서 o2자리에 o1을 치환하더라도 P의 행위가 변하지 않는다면, S는 T의 하위 타입이다. 말이 쪼금 헷갈리니... 상황을 다시 적어본다면,, 어떤 프로그램 P가 있는데 이게 T타입을 이용해서 만들었고, 만약에 이 T 타입의 객체 o2자리에 S 타입의 객체 o1로 치환해도 P행위가 변하지 않는다면 S는 T의 하위 타입이다... 즉 S는 T를 상속하였고 그 기능들을 다 가지고 있을 것이고, 따라서 S든 T든 P행위에도 영향을 끼치지 않았겠지? 무튼 LSP 원칙이 이러.. [Clean Architecture]SOLID 원칙 : 2.OCP 개방-폐쇄 원칙 OCP란? 소프트웨어 개체(artifact)는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다. 이 말을 다시 적으면 "소프트웨어 개체의 행위는 확장할 수 있어야 하지만, 이때 개체를 변경해서는 안 된다" 라는 뜻이다. 소프트웨어에서 기능을 추가하려고하는데 시스템을 엄청 많이... 수정해야한다면, 이는 엄청난 실패이다. 이러한 상황을 피할 수 있는 설계가 OCP원칙을 따른 설계라고 할 수 있을 것이다. OCP는 단순히 클래스와 모듈 수준을 넘어 아키텍쳐는 더 중요한 의미를 가진다. OCP의 목표 시스템을 확장하기 쉬운 동시에 변경으로 인해 시스템이 너무 많은 영향을 받지 않도록 하는데 있다. 사고 실험 이번 장에서는 사고실험 예시로 나온 클래스 설계 도면을 보면서 OCP를 이해해 보도록 하자. (.. [Clean Architecture]SOLID 원칙 : 1.SRP 단일 책임 원칙 SRP 란? SRP란, 하나의 모듈은오직 하나의 액터(actor)에 대해서만 책임져야 한다는 원칙이다. SRP는 SOLID 원칙 중에서 의미 전달이 어려운 원칙이다. 단일 책임의 원칙이라고 하여 하나의 모듈은 단하나의 일만 해야한다는 의미가 아님에 주의하자. (이는 함수는 반드시 하나의 일만 해야한다는 원칙이다. 이는 커다란 함수를 작은 함수들로 리펙터링하는 더 저수준에서 사용. SRP와 혼동하지 말자!) SRP 원칙에 대한 설명에서 Actor는 이해관계자들이라고 생각하면 된다. 예를 들면 평가 모듈은 오직 평가 담당자(actor)에 대해서만 책임져야한다.(한 액터에 의한 수정이 다른 액터를 위한 모듈에 영향이 주어서안됨!) 모듈이란 무슨 뜻인가? 모듈이란 내가 이해하기 쉬운 언어로 함수와 데이터 구조로.. [Clean Architecture]SOLID 원칙 개론 좋은 소프트웨어를 만들기 위해서는 좋은 벽돌로 좋은 아키텍쳐를 정의하는 원칙이 필요하다. Clean Architecture는 좋은 벽돌을 만들기 위해서 SOLID원칙을 제시하고있다. SOLID 원칙은 다음을 설명해준다 함수와 데이터의 집합을 클래스로 배치하는 방법. 이 클래스들을 서로 결합하는 방법. SOLID의 목적은 한 문장으로 표현하자면 중간 수준의 소프트웨어 구조가 변경에 유연하고, 이해하기 쉬우며, 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 되어야한다. **중간 순의 소프트웨어 구조? : 모듈과 컴포넌트 수준의 내부에서 사용되는 소프트웨어 구조. SOLID 원칙 (https://en.wikipedia.org/wiki/SOLID) SRP : 단일 책임 원칙 Single Respon.. 이전 1 다음