본문 바로가기

분류 전체보기

(7)
선택 안됨 [도서] 클린아키텍처 Clean Architecture 정리 18~21장 18장 경계 혜부학 시스템 아키텍처는 소프트웨어 컴포넌트와 그 컴포넌트들을 나누는 경계로 이루어져 있음 경계 횡단하기 경계를 횡단한다는 말은 경계를 넘어 함수를 호출해 데이터를 전달하는 일 경계를 잘 구분해서 의존성 관리를 하면 불필요한 재컴파일, 재배포를 막을 수 있음 두려운 단일체 아키텍처 경계 중 가장 흔한 형태로 소스 수준의 분리 모드라고 부른다. 물리적으로 분리되어 있지 않기 때문에 배포 관점에서는 경계가 드러나지 않음. 이런 경계 수준에서는 동적 다형성을 이용해서 의존성을 관리한다. 저수준에서 고수준으로 향하는 함수 호출은 제어 흐름과 의존성의 방향이 같아서 의존성 방향이 저수준 → 고수준이기 때문에 상관없지만 고수준에서 저수준으로 향하는 함수 호출은 의존성의 방향이 고수준→저수준으로 향하기 ..
[도서] 클린아키텍처 Clean Architecture 정리 15~16장 15장 아키텍처란? 시스템의 형태로서 시스템을 구성하는 컴포넌트가 어떻게 분할되어있는지, 어떻게 배치되었는지, 어떻게 의사소통하는지에 따라 모양이 정해진다. 소프트웨어 아키텍트도 역시 프로그래머이기 때문에 코딩과 아주 동떨어질 순 없음 코딩을 하면서 발생하는 문제점을 경험해봐야 다른 프로그래머에게 도움을 줄 수 있기 때문 아키텍트는 시스템의 동작 여부보다 유지보수에 중점을 두어야 한다. 유지보수를 용이하게 하려면 가능한 많은 선택지를, 가능한 한 오래 남겨두는 전략을 따라야 함 개발 아키텍처는 팀이 개발을 쉽게 할 수 있도록 도와야 한다. 대개 작은 인원으로 이루어진 개발팀은 아키텍처 관련 제약들이 개발에 방해가 된다고 여기기 때문에 아키텍처가 결여된 채로 개발한다. 반대로 많은 인원으로 이루어진 개발팀..
[RxSwift]RxSwift란? RxSwift는 Reactive eXtension + Swift의 합성어입니다. Rx를 장착한 Swift? 라고 생각이 드는데요. Rx가 뭔지 알아보겠습니다. 1. Rx (Reactive Extesions) Rx는 관찰 가능한 스트림을 사용해서 비동기 프로그래밍을 구성하기 위한 라이브러리다. Rx는 Observable streams이 next, error, complete 세 가지의 이벤트 방출하도록 함으로써 이벤트 기반의 비동기 프로그래밍을 가능하도록 해줍니다. Rx는 관찰자 패턴과 반복자 패턴 그리고 함수형 프로그래밍에서 얻은 아이디어의 조합입니다. 위 문장을 풀어서 얘기하자면 특정 스트림을 지속적으로 관찰(관찰자 패턴)하고 있다가 이벤트가 발생하면 방출된 값에 접근(반복자 패턴)해서 특정 연산을 수..
[도서] 클린아키텍처 Clean Architecture 정리 12~14장 12장 컴포넌트 컴포넌트는 독립적으로 배포 가능한 가장 작은 단위 여러 컴포넌트를 묶어서 실행 가능한 단일 파일로 만들거나 동적으로 로드 할 수 있는 플러그인으로 만들수도 있음 컴포넌트의 간략한 역사 과거에는 프로그램이 로드될 메모리의 주소를 직접 코드에 작성해서 컴파일러에게 알려줬어야했음 메모리 주소의 여유공간이 없어지면 다른 빈 공간에 로드해서 두 주소를 오가며 작동하게 했는데 이는 지속 가능한 방법이 아니었다. 재배치성 이런 불편함을 해결하기위해 프로그램을 재배치 가능하게 만들었음 로더를 두고 로더에 재배치 코드전달한뒤 재배치가 가능한지 여부를 바이너리에서 참조할 수있도록 컴파일러를 수정 이 과정에서 링킹로더가 탄생했음. 링킹로더는 바이너리 코드에서 라이브러리 함수를 호출하는 외부참조와 라이브러리 ..
[도서] 클린아키텍처 Clean Architecture 정리 9~11장 9장 LSP: 리스코프 치환 원칙 만약 S타입의 객체가 T타입 객체의 하위타입이라면 T타입을 사용하는 프로그램 P에서는 변경 없이 T타입을 S타입으로 교체할 수 있어야한다. 상속을 사용하도록 가이드하기 상속을 이용해서 하위타입을 구현하면 두 하위 타입 각각은 상위 타입을 대체할 수 있다. 정사각형/직사각형 문제 정사각형은 높이와 너비가 함께 변경되고 직사각형은 높이와 너비가 독립적으로 변경될 수 있음 정사각형은 직사각형의 하위타입으로 적합하지 않으므로 정사각형은 직사각형을 대체할 수 없다. 하위타입으로 적합하지 않은 경우에 상속을 구현하면 LSP를 위반하게된다. LSP와 아키텍처 초기에는 상속을 사용하도록 장려하는 정도였음 시간이 지나며 광범위한 설계 원칙으로 변모 인터페이스의 구현체들끼리 상호 치환이 ..
[도서] 클린아키텍처 Clean Architecture 정리 5~8장 5장 객체지향프로그래밍(Oject-Oriented, OO) 객체지향프로그래밍을 정의하는 여러가지 말들이 있지만 대체로 모호하다. 그 중 자주 언급되는 캡슐화, 상속, 다형성 세 가지 개념 알아보자. 캡슐화 OO언어는 private 멤버 데이터와 public 멤버 함수를 구분지음으로써 각각 응집할 수 있는 방법을 제공한다. 구분선 밖의 데이터는 외부에서 알 수 없다(은닉). 일부 함수 만이 노출된다.! 이런 개념은 C언어에서 완벽하게 제공한다. 데이터 구조와 함수를 헤더파일(.h)에 선언하고 구현파일(.c)에 정의하기때문에. 오히려 C++의 형태로 OO가 등장했을때 완벽한 캡슐화가 깨짐. C++의 컴파일러는 클래스 인스턴스 크기를 알아야해서 헤더파일에 클래스의 멤버변수를 선언해야만했음 이때문에 헤더파일을 ..
[도서] 클린아키텍처 Clean Architecture 정리 1~4장 프로그램이 동작하도록 만드는건 쉽게 할 수 있지만 제대로 만들기 위해서는 노력과 훈련이 필요하다. 프로그램을 제대로 만들면 지속가능한 개발을 할 수 있다. 지속가능한 개발, 즉 적은 인력, 유연한 변경, 낮은 결함률을 보장한다. 1장 설계와 아키텍처란? 설계는 저수준의 세부사항, 아키텍처는 고수준의 결정사항을 의미한다. 두 요소가 모여 전체 설계를 구성한다. 두 요소를 명확하게 나누는 기준은 없다. 고수준의 결정사항에서 저수준의 세부사항으로 의사결정이 이루어진다. 설계의 목표는 적은 유지보수 인력과 비용, 높은 생산성이다. 빠르게 개발하기 위해 설계 없이 개발하지만 시간이 지날수록 개발 비용은 계속 증가할것임. 나중에 리팩토링한다고 과신하지만 그럴 일은 없기때문에 처음부터 제대로 개발하는게 가장 좋은 방..