본문 바로가기

Programming/Clean Architecture12

6장. 함수형 프로그래밍 함수형 프로그래밍의 핵심 함수형 프로그램과 일반적인 자바 프로그램의 핵심 차이는 변수의 가변성이다. 자바 프로그램은 가변 변수를 사용하며, 가변 변수는 프로그램 실행 중에 상태가 변할 수 있다. 반면 함수형 프로그램(책에서는 클로저 프로그램을 예시로 들었다)은 가변 변수가 없다. 함수형 언어에서 변수는 변경되지 않는다. 불변성과 아키텍처 변수가 가변적이고 불변적인 것이 왜 중요한가? 이유는 대부분의 동시성 문제가 가변적인 변수로 인해 발생하기 때문이다. 레이스 컨디션, 데드락 상태, 데이터베이스 동시 업데이트의 문제는 모두 가변 변수로 인해 발생한다. 어떠한 변수도 갱신되지 않으면 레이스 컨디션, 데이터베이스 동시 업데이트 문제가 발생하지 않는다. 두 문제의 공통점은 하나의 값을 여러 대상이 동시에 바꾸.. 2023. 11. 9.
5장. 객체지향 프로그래밍 그래서 객체지향이 뭔데? 사실 나도 여기에 명확하게 대답하기가 어렵다. 객체지향 프로그래밍이 뭐냐고 물어보면, 하나의 덩어리로 된 큰 프로그램을 여러 '객체'라는 단위로 나눠서 그 객체들 간 상호작용을 통해 프로그램이 돌아가도록 프로그래밍하는 방식이라고 대답할 수는 있겠는데. 해당 장에서는 객체지향 프로그래밍의 4요소 중 캡슐화, 상속, 다형성을 살펴보며 객체지향이 무엇인지에 대해 대답하고자 한다. 캡슐화? 객체지향을 정의하는 요소 중 하나로 캡슐화를 꼽는 이유는 데이터와 함수를 쉽고 효과적으로 캡슐화하는 방법을 객체지향 언어가 제공하기 때문이다. 이를 통해 데이터와 함수가 응집력 있게 구성된 집단을 서로 구분 짓는 선을 그을 수 있다. 캡슐화가 객체지향 언어에만 국한된 개념은 아니다. C언어에서도 헤더.. 2023. 10. 26.
4장. 구조적 프로그래밍 구조적 프로그래밍은 다익스트라에 의해 발견되었다. 증명 모든 프로그램은 단순하더라도 너무 많은 세부사항을 담고있다. 아주 작은 세부사항이라도 간과하면, 프로그램이 동작하는 것처럼 보이더라도 예상 외의 오류가 발생한다. 다익스트라는 증명이라는 수학적 원리를 적용해 이 문제를 해결하고자 했다. 프로그래머는 입증된 구조를 이용하고, 이 구조를 코드와 결합시켜 코드가 올바르다는 사실을 스스로 증명하게 되는 방식이었다. 다익스트라는 증명의 방식을 사용하기 위해서는 단순한 알고리즘에 대해 기본적인 증명을 작성할 수 있는 기법을 먼저 보여줘야 했다. 그러나 연구 과정에서, goto문이 모듈의 재귀적 분해를 방해한다는 사실을 발견했다. 모듈을 분해할 수 없다면, 합리적 증명의 필수 기법인 분할 정복을 사용할 수 없다... 2023. 10. 23.
3장. 패러다임 개요 구조적 프로그래밍 : 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. - 에츠허르 비버 데이크스트라 무분별한 점프(goto 문장)는 프로그램 구조에 해롭다는 사실을 제시했다. 점프를 if / then / else와 do / while / until과 같이 익숙한 구조로 대체했다. 객체지향 프로그래밍 : 제어흐름의 간접적인 전환에 대해 규칙을 부과한다. - 올레 요한 달 & 크리스텐 니가드 알골 언어의 함수 호출 스택 프레임을 힙으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지될 수 있음을 발견했다. 이 함수가 클래스의 생성자가 되었다. 지역 변수는 인스턴스 변수가 되고, 중첩 함수는 메서드가 되었다. 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다.. 2023. 10. 17.
2장. 두 가지 가치에 대한 이야기 모든 소프트웨어 시스템은 클라이언트에게 행위와 구조의 두 가지 가치를 제공한다. 개발자는 두 가치를 모두 반드시 높게 유지해야 하는 책임을 진다. 행위 소프트웨어의 첫 번째 가치는 행위(기능)이다. 개발자라면, 클라이언트의 요구사항을 만족하는 코드를 작성해야한다. 만일 코드가 원하는대로 작동하지 않는다면, 프로그래머는 디버깅을 해야한다. 행위는 분명 중요한 가치이다. 그러나, 많은 프로그래머들이 요구사항을 구현하고 디버깅하는데 지나치게 매몰되곤 한다. 아키텍처 소프트웨어의 두 번째 가치는 구조(아키텍처)다. 소프트웨어라는 단어는 'soft'(부드러운) 와 'ware'(제품)이라는 단어의 합성어다. 다시 말해, 소프트웨어는 근본적으로 부드러워야한다. 소프트웨어를 만든 이유는 기계의 행위를 쉽게 변경할 수 .. 2023. 10. 11.
반응형