본문 바로가기
[책 정리] 6장. 함수형 프로그래밍 - Clean Architecture 정수를 제곱하기 - 함수형 언어에서 변수는 변경되지 않는다. 불변성과 아키텍처 - 경합 조건(race condition), 교착 상태(dealock) 조건, 동시 업데이트(concurrent update) 문제가 모두 가변 변수로 인해 발생한다. 우리가 동시성 앱에서 마주치는 모든 문제, 즉 다수의 스레드와 프로세스를 사용하는 앱에서 마주치는 모든 문제는 가변 변수가 없다면 절대로 생기지 않는다. - 아키텍트라면 동시성(concurrency)문제에 지대한 관심을 가져야만 한다. 우리는 스레드와 프로세스가 여러 개인 상황에서도 설계한 시스템이 여전히 강건하기를 바란다. 가변성의 분리 - 불변성과 관련하여 가장 주요한 타협 중 하나는 앱 또는 앱 내부의 서비스를 가변 컴포넌트와 불변 컴포넌트로 분리하는 일이.. 2020. 4. 10.
[책 정리] 5장. 객체 지향 프로그래밍 - Clean Architecture -좋은 아키텍처를 만드는 일은 객체 지향(Object-oriented) 설계 원칙을 이해하고 응용하는 데서 출발한다. 캡슐화? -OO 프로그래밍은 프로그래머가 충분히 올바르게 행동함으로써 캡슐화된 데이터를 우회해서 사용하지 않을 거라는 믿음을 기반으로 한다.OO 를 제공한다고 주장한 언어들이 실제로는 C언어에서 누렸던 완벽한 캡슐화를 약화시켜 온 것은 틀림없다. 상속? -OO 언어가 더 나은 캡슐화를 제공하지는 못했지만, 상속만큼은 OO 언어가 확실히 제공했다.하지만 상속이란 단순히 어떤 변수와 함수를 하나의 유효 범위로 묶어서 재정의하는 일에 불과하다.OO 언어가 완전히 새로운 개념을 만들지는 못했지만, 데이터 구조에 가면을 씌우는 일을 상당히 편리한 방식으로 제공했다고 볼 수는 있다. 다형성? -함수.. 2020. 4. 9.
[책 정리] 4장. 구조적 프로그래밍 - Clean Architecture 증명 -goto 문장이 모듈을 더 작은 단위로 재귀적으로 분해하는 과정에 방해가 되는 경우가 있다는 사실을 발견했다.만약 모듈을 분해할 수 없다면, 합리적으로 증명할 때 필수적인 기법인 분할 정복 접근법을 사용할 수 없게 된다. -모든 프로그램을 순차(sequence), 분기(selection), 반복(iteration)이라는 세 가지 구조만으로 표현할 수 있다. 해로운 성명서 기능적 분해 -구조적 프로그래밍을 통해 모듈을 증명 가능한 더 작은 단위로 재귀적으로 분해할 수 있게 되었고, 이는 결국 모듈을 기능적으로 분해할 수 있음을 뜻했다.프로그래머는 대규모 시스템을 모듈과 컴포넌트로 나눌 수 있고, 더 나아가 모듈과 컴포넌트는 입증할 수 있는 아주 작은 기능들로 세분화될 수 있다. 엄밀한 증명은 없었다.. 2020. 4. 8.
[책 정리] 3장. 패러다임 개요 - Clean Architecture 구조적 프로그래밍 - 구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. 객체 지향 프로그래밍 - 객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다. 함수형 프로그래밍 - 함수형 프로그래밍은 할당문에 대해 규칙을 부과한다. 생각할 거리 - 각 패러다임은 프로그래머에게서 권한을 박탈한다. 어느 패러다임도 새로운 권한을 부여하지 않는다. 각 패러다임은 부정적인 의도를 가지는 일종의 추가적인 규칙을 부과한다. 즉, 패러다임은 무엇을 해야 할지를 말하기보다는 무엇을 해서는 안 되는지를 말해준다. - 프로그래밍 패러다임은 앞으로도 딱 세 가지밖에 없을 것이다. 최소한 부정적인 의도를 가진 패러다임으로는 이 세 가지가 전부일 것이다. 결론 - 세 가지 페러다임과 아키텍처의 세.. 2020. 4. 7.
[책 정리] 2장. 두 가지 가치에 대한 이야기 - Clean Architecture -모든 소프트웨어 시스템은 이해관계자에게 서로 다른 두 가지 가치를 제공한다.행위(behavior)와 구조(structure)가 바로 그것이다.소프트웨어 개발자는 두 가치를 모두 반드시 높게 유지해야 하는 책임을 진다. 행위 아키텍처 -소프트웨어는 '부드러움을 지니도록' 만들어졌다.소프트웨어는 기계의 행위를 쉽게 변경할 수 있어야 한다.만약 기계의 행위를 바꾸는 일을 어렵게 만들고자 했다면, 우리는 소프트웨어가 아니라 하드웨어라 불렀을 것이다. -소프트웨어가 가진 본연의 목적을 추구하려면 소프트웨어는 반드시 '부드러워'야 한다.다시 말해 변경하기 쉬워야 한다.이해관계자가 기능에 대한 생각을 바꾸면, 이러한 변경사항을 간단하고 쉽게 적용할 수 있어야 한다.이러한 변경사항을 적용하는 데 드는 어려움은 변경되.. 2020. 4. 6.
[책 정리] 1장. 설계와 아키텍처란? - Clean Architecture - 프로그램을 동작하게 만들기는 그리 어려운 일이 아니다. 하지만 프로그램을 제대로 만드는 일은 전혀 다르다. 올바르게 만드는 일은 어렵다. - 설계와 아키텍처의 차이는 무엇인가? 둘 사이에는 아무런 차이가 없다. 아키텍처는 저수준의 세부사항과는 분리된 고수준의 무언가를 가리킬 때 흔히 사용되는 반면, (비유 : 집의 형태, 외관, 입면도, 공간, 방의 배치) 설계는 저수준의 구조 또는 결정사항 등을 의미할 때가 많다. (비유 : 콘센트, 전등 스위치, 전등, 보일러, 온수기와 배출 펌프의 크기와 위치 등) 하지만 결국은 무의미하다. 둘은 같다. 목표는? - 소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다. 설계 품질을 재는 척도는 고객의 요구를 만.. 2020. 4. 5.
[컨퍼런스] 드로아드 나이츠 (Droid Knights) 행사 참여! [컨퍼런스] 드로아드 나이츠 (Droid Knights) 행사 참여! 지난 4월 드로이드 나이츠를 방문했다. 장소는 코엑스 몰. 참가증. 회사 동료들은 드로이드 나이츠를 Droid Knights 가 아닌 Droid Nights 라고 해석해서..회사 퇴근하고 밤에 모이는 컨퍼런스 혹은 모임이라고 생각했지만...드로이드 "기사" 라는 의미. 개발자들이 주로 쓰고 있는 여러가지 기술과 컴포넌트들의 트랜드를 볼 수 있는 투표판. 결과에서는..생각보다도 AAC(Android Architecture Components) 를 쓰는 사람들이 많았고,생각보다도 DI(Dipendency Injection) lib 을 쓰는 사람들이 많았고,생각보다도 MVVM (Model, View, VIewModel) 을 쓰는 사람들이 많.. 2019. 6. 11.
반응형