![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/daVKk8/btsfdaVY5CG/ttWKnEaIkyglxDkT02klzk/img.png)
클린 아키텍처? Robert C Martin이 제시한 소프트웨어 아키텍처로 계층별 역할(관심사)을 분리함으로써 유지보수, 테스트 용이성의 이점을 가져갈 수 있다. 위 이미지를 보면 의존성의 경우 바깥쪽에서 안쪽으로 향하게 되는데, 이 의미는 안쪽 계층의 경우 바깥 계층에 대해 알 수 없다는 의미(영향을 받지 않는다는 의미)이고 안쪽으로 갈 수록 의존성이 옅어짐으로 변경 가능성이 가장 적은 비즈니스 룰이 위치하게 된다. 여기서 비즈니스 룰이란 Domain Layer(Use Cases + Entities)에 적용되는 규칙으로 사업의 핵심적인 서비스와 관련된, 즉 잘 변하지 않는 비즈니스 로직을 적용하는 것을 말한다. 예를 들어 일기 앱 서비스라고 가정한다면 일기 작성, 삭제등의 기능이 있을 수 있다. 이 로..
오늘은 의존성 주입(DI)에 대해 공부한 내용을 정리해보려 합니다. https://ko.wikipedia.org/wiki/의존성_주입 의존성 주입이란? 객체지향 프로그래밍에서 의존성이 있다는 것은 클래스 간에 의존 관계가 있다는 것을 의미합니다. 즉, 다음과 같이 A라는 클래스에서 B클래스 객체를 생성해 사용하면 의존관계가 형성되는것이죠. class B: A { } class A { let b = B() // 의존 관계 형성 } 의존관계가 형성되면 한 클래스가 바뀔 때 다른 클래스가 영향받게 되는데. 이러한 의존관계를 약하게 만들기 위한 방법이 의존성 주입입니다. 객체의 생성과 사용의 관심을 분리함으로써 가독성과 코드 재사용성을 높이는데 그 의의가 있습니다. 만약 메일을 사용하는 User라는 클래스가 있..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cGiHwr/btqK8kzAsBJ/CB0D3oRHOj4nZ1AF3kiA20/img.png)
안녕하세요! 오늘은 메모이제이션(Memoization)에 대해 알아보려 합니다. 메모이제이션이 뭐냐?? 메모이제이션은 동일한 연산을 반복해야 할 때 이전에 연산한 값을 메모리에 미리 저장해 둠으로써 계산의 반복수행을 제거하여 프로그램 실행 속도를 향상시키는 기술입니다. 메모리에 저장해뒀다가 사용한다는 점에 있어서 캐싱의 범주에 속한다고 보면 될 것 같은데요. 메모이제이션은 어떤 함수의 인풋에 대한 아웃풋을 저장한다고 보시면 되고 (함수를 위한 캐싱), 우리가 보통 말하는 캐싱은 외부에서 들어오는 파일, 데이터를 저장해서 사용하는 용어로 생각하시면 될 것 같습니다. (혹시라도 틀린 부분이 있다면 꼭 댓글 남겨주세요!) 메모이제이션의 특징으로는, 보통 실행 속도가 빠른 알고리즘이 더 많은 메모리를 사용하듯이..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/E0ndm/btqKYlLGr06/R7PLRbKKsFlpTyGKKth8v1/img.png)
SOLID?? -> 객체지향 5가지 원칙의 앞글자를 따서 지은 이름, 이 원칙을 따라 프로그램을 설계하면 유지 보수 및 확장이 쉬운 소프트웨어를 만들 수 있음 1. 단일 책임의 원칙 (Single Responsibility Principle) 객체는 오직 하나의 책임을 가져야 함 -> 클래스의 목적을 명확히 함으로써 기능을 명확히 분리 기능이 명확히 분리되어 있어야 유지보수에 유리하다!! 2. 개방-폐쇄 원칙(Open-Closed Principle) 객체는 확장에 대해서는 개방적이되 수정에 대해서는 폐쇄적이어야 함. 3. 리스코프 치환 원칙 (Liskov Substitution Principle) 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다. 부모 클래스가 들어갈 자리에 자식 클래스를 넣어..