📖 [3장] 패러다임 개요
📘 클린 아키텍처 북스터디 정리입니다
📚 도서: 로버트 C. 마틴 《Clean Architecture》
🧑💻 목적: 올바른 설계에 대한 감각과 습관을 익히기 위해
🗓️ 진행 기간: 2025년 7월 ~ 매주 2장
✅ 핵심 요약 (Key Takeaways)
이 장의 핵심 문장은?
- 세 가지 패러다임과 아키텍처의 세 가지 큰 관심사가 어떻게 서로 연관되는지에 주목하자
저자가 전달하고자 하는 메세지 요약
- 프로그래밍의 패러다임과 아키텍처 관심사의 연관성에 주목하며 독서할 것을 권장
💡 내용 정리
서론
- 1938년, 앨런 튜링이 컴퓨터 프로그래밍의 기반 마련
- 튜링의 프로그램은 반복문, 분기문, 할당문, 서브루틴, 스택 등 우리에게 익숙한 구조 사용. 바이너리 언어 사용
- 1940년대 이후: 어셈블러, 컴파일러, 고급언어 등 발전
후반 어셈블러 등장으로 코드를 바이너리로 작성하지 않아도 되게 되었음
- 프로그래밍 패러다임: 프로그래밍을 하는 방법으로 대체로 언어에 독립적
- 패러다임은 어떤 프로그래밍 구조를 사용할 지, 언제 이 구조를 사용해야 하는 지를 결정
패러다임 개요
세 가지 패러다임:
- 구조적 프로그래밍
- 객체 지향 프로그래밍
- 함수형 프로그래밍
구조적 프로그래밍
- 최초로 적용된 프로그래밍 (1968년 에츠허르 비버 데이크스트라가 발명)
- 무분별한 점프(
goto 문장)은 프로그램 구조에 해롭다는 사실 제시
- 데이크스트라는 이러한 점프들을
if/then/else와 do/while/until과 같이 익숙한 구조로 대체
구조적 프로그래밍은 제어 흐름의 직접적인 전환에 대해 규칙을 부과한다
객체 지향 프로그래밍
- 두번째로 적용된 패러다임 (1966년 올레 요한 달과 크리스텐 니가드)
- 알골 언어의 함수 호출 스택 프레임을 힙으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지될 수 있음을 발견
- 함수→클래스의 생성자, 지역변수→인스턴스 변수, 중첩함수→메서드
- 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다형성이 등장하게 됨
객체 지행 프로그래밍은 제어 흐름의 간접적인 전환에 대해 규칙을 부과한다
함수형 프로그래밍
- 가장 먼저 발명된 패러다임이지만 최근에서야 널리 사용
- 알론조 처치는 어떤 수학적 문제를 해결하는 과정에서 람다 계산법을 발명했는데 함수형 프로그래밍은 이러한 연구 결과에 직접적 영향을 받아 만들어짐
- 1958년 존 매카시가 만든 LISP 언어의 근간이 되는 개념이 람다 계산법
- 불변성: 람다 계산법의 기초 개으로 심볼의 값이 변경되지 않는다는 개념. 즉, 함수형 언어에 할당문이 전혀 없다는 뜻
함수형 프로그래밍은 할당문에 대해 규칙을 부과한다
생각할 거리
- 각 패러다임은 프로그래머에게서 권한을 박탈:
- 구조적:
goto
- 객체 지향:
함수 포인터
- 함수형:
할당문
- 즉, 패러다임은 무엇을 해야 할지를 말하기 보다는 무엇을 해서는 안 되는 지를 말해줌
결론
- 구조적 프로그래밍 → 알고리즘 모듈화
- 객체지향 프로그래밍 → 아키텍처 경계와 다형성
- 함수형 프로그래밍 → 데이터 위치와 접근 방식 규칙 부과
- 세 가지 패러다임과 아키텍처의 세가지 큰 관심사(
함수, 컴포넌트 분리, 데이터 관리) 간의 연관성에 주목해서 책을 읽어야 한다