Kim-Baek 개발자 이야기

클린 아키텍처 - 3장 패러다임 개요 본문

개발

클린 아키텍처 - 3장 패러다임 개요

김백개발자 2022. 2. 1. 16:17

클린 아키텍처의 챕터2는 프로그래밍 패러다임이다. 3장부터 시작해서 6장까지가 해당 내용에 속한다. 가장 먼저 3장인 패러다임 개요에서는 프로그래밍 패러다임 3가지에 대해서 간략하게 설명한다.

  • 구조적 프로그래밍
  • 객체 지향 프로그래밍
  • 함수형 프로그래밍

개발자라면 세 가지 모두 익숙하게 들어봤을 것이다.

구조적 프로그래밍

대학교에서 처음 C언어를 배우면서 절차 지향프로그래밍이다라고 배웠던 기억이 있다. 구조적 패러다임은 최초로 적용된 프로그래밍이고, 데이크스트라에 의해서 발견된다. 데이크스트라는 무분별한 점프 ( goto 문장 ) 이 프로그램 구조에 해롭고, 이는 다른 if/then/else 나 do/while/until 로 대체할 수 있다고 한다.

구조적 프로그래밍은 제어흐름의 직접적인 전환( goto ) 에 대한 규칙을 부과한다.

객체 지향 프로그래밍

두 번째로 도임된 패러다임인 객체 지향 프로그래밍은 구조적 프로그래밍보다 2년 앞선 1966년에 등장했다. 알골 언어의 함수 호출 스택 프레임을 힙으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역변수가 오랫동안 유지될 수 있다는 것을 발견했다. 이것이 바로 클래스의 생성자가 되었고, 지역 변수가 인스턴스 변수, 중첨 함수가 메서드가 되었다. 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해서 다형성도 등장한다.

객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다.

jvm 메모리 구조

객체지향의 대표인 자바의 메모리 구조를 보도록하자. 그 중에서 jvm 의 런타임에 사용하는 데이터 영역에서 힙과 스택을 보면 해당 내용이 어떤 것인지 이해가 좀 더 될 것이다.

Heap

  • new 연산자로 생성된 객체, Array와 같은 동적으로 생성된 데이터가 저장되는 공간
  • Heap에 저장된 데이터는 GC 가 처리하지 않는한 소멸되지 않는다.
  • Reference Type 의 데이터가 저장되는 공간
  • 모든 스레드에서 정보가 공유된다.

Stack

  • 지역변수, 메소드의 매개변수와 같이 잠시 사용되고 필요가 없어지는 데이터가 저장되는 공간
  • Last In First Out, 나중에 들어온 데이터가 먼저 나간다
  • 만약, 지역변수 이지만 Reference Type일 경우에는 Heap 에 저장된 데이터의 주소값을 Stack 에 저장해서 사용하게 된다.
  • 스레드마다 하나씩 존재한다.

함수형 프로그래밍

최근에 도입되기 시작했지만, 가장 먼저 만들어진 패러다임이다. 수학 문제를 푸는 과정에서 람다 계산법을 발명해는데 이것이 함수형 언어의 근간이 된다. 람다 계산법은 불변성이 가장 중요한데, 심볼의 값이 변경되지 않는다는 것이다. ( 할당문이 없다 )

함수형 프로그래밍은 할당문에 대해 규칙을 부과한다.

 

각 패러다임은 새로운 권한을 부여하는 것이 아니라 권한을 박탈하는 과정이다. 무엇을 할 수 있어라는 것이 아니라, 이건 하면 안되는 것이야라고 말해주는 것이 각자의 패러다임이다. 

각 패러다임이 뺏어가는 것 ( 사용하지 못하게 하는 것 )은 각각 goto문, 함수 포인터, 할당문이다. 세 가지 패러다임과 아키텍처가 어떻게 연관되는지를 계속 살펴보도록 하자.

반응형
Comments