SICP 1장 : 함수를 이용한 추상화 (draft)

Seongho.park·2023년 7월 22일

지금부터 작성된 내용은 책의 내용을 일부 포함합니다. 책을 읽으면서 기억하고 싶은 인사이트, 고민, 개념이 정리되어 있습니다. 편향될 수 있으며, 저작권에 문제가 될 경우 글이 삭제될 수 있습니다.

프로그래밍 기본 요소

추상화

단순 관념(simple idea)에 그 힘을 행사하는 지성의 행위는 주로 다음 세 가지다.

  1. 다수의 단순 관념을 하나의 복합(compound) 관념으로 조합한다. 복잡한(complex) 관념들은 모두 이런식으로 만들어진다.
  2. 두 관념(단순 관념이든 복합 관념이든)을 가져와 또 다른 관념으로 설정함으로써 그 둘을 하나의 관념으로 통합하지 않고도 두 관념을 한 번에 볼 수 있게 만드는 것이다. 관계에 관한 관념은 모두 이런 식으로 만들어진다.
  3. 하나의 관념을 실제 존재에 수반하는 다른 모든 관념으로부터 분리하는 것이다. 이를 추상화 라고 부르며, 일반적인 관념은 모두 이런식으로 만들어진다.

계산적 과정

지금부터 배울 계산적 과정(computational process)이라는 아이디어이다. 계산적 과정(줄여서 '과정')은 컴퓨터 안에 사는 추상적인 존재이다. 과정은 점차 전개되면서 데이터라 부르는 또 다른 존재를 조작하게 된다. 하나의 과정은 일정한 규칙들의 패턴에 따라 전개되는데, 그러한 패턴이 바로 프로그램이다. 인간은 프로그램을 작성함으로써 과정의 전개를 이끈다. 프로그램은 난해하고 비밀스러운 프로그래밍 언어로 만들어진 기호 표현식들로 세심하고 구성되며, 과정이 수행해야 할 과제들을 상세하게 서술한다.

프로그래밍 언어는 단지 컴퓨터가 수행할 과제를 지시하는 수단 이상의 어떤 것이다. 프로그래밍 언어는 우리가 과정에 관한 생각들을 조직화하는 틀로도 작용한다. 따라서 프로그래밍 언어를 고찰 할 때는 단순한 아이디어들을 조합해서 좀 더 복잡한 아이디어를 만드는 데 사용하는 수단에 주의를 기울여야 한다.

  • 원시 표현식(primitive expression): 언어와 관련한 가장 단순한 개체(entity)를 나타낸다.
  • 조합(combination) 수단: 단순한 요소들로부터 복합적인 요소를 만드는 데 쓰인다.
  • 추상화(abstraction) 수단: 복합적인 요소들에 이름을 붙여서 하나의 단위를 다루는데 쓰인다.

프로그래밍에서 우리가 다루는 요소(element)들은 크게 함수와 데이터로 나뉜다. (나중에 이 둘이 사실 아주 명백하게 구분되지 않는다는 점을 알게 될 것이다.)

표현식

복합잔 표현식 문장이 주어져도 해석기는 항상 동일한 기본 주기(cycle)로 작동한다. 해석기는 사용자가 입력한 문장을 읽고(read), 그 문장을 평가하고(evaluate), 결과를 출력한다(print). 이러한 주기를 반복하는 것을 가리켜 REPL(read-evaluate-print loop)이라고 부른다. 자바스크립트 REPL에서 출력을 위해 특별한 명령이 필요하지 않다. 특별한 명령이 없어도 해석기는 주어진 표현식의 평가 결과를 출력한다.

이름 붙이기와 환경

계산적 객체을 붙여서 이름으로 그 객체를 지칭하는 수단들은 프로그래밍 언어의 필수 기능에 해당한다. 그런 수단으로 가장 먼저 살펴볼 것은 상수(constant)이다. 상수의 이름에 해당 객체의 값(value)을 지칭하는 용도로 쓰인다.

	const size = 2;

복합적인 연산의 결과를 간단한 이름으로 지칭할 수 있다는 점에서, 상수 선언은 우리의 언어에서 가장 단순한 추상화 수단이다. 일반적으로 계산적 객체는 그 구조가 대단히 복잡할 수 있다. 따라서 복잡한 구조의 세부사항을 기억해 두고 객체를 사용할 때마다 그 구조를 거듭 명시하는 것은 극히 불편한 일이다. 실제로, 복잡한 프로그램은 점차 더 복잡한 계산적 객체들을 구축해 나가는 식으로 만들어진다. 해석기를 이용하면 이름-객체 연관 관계를 일련의 상호작용을 통해서 점진적으로 만들어 나갈 수 있으므로 이처럼 프로그램을 단계적으로 구축하기가 특히나 편하다.

복합함수

함수 적용의 치환 모형

조건부 표현식과 술어

(예제) : 뉴턴 방법으로 제곱근 구하기

블랙박스 추상으로서의 함수

함수와 과정

선형재귀와 반복

트리 재귀

증가 차수

거듭제곱

최대공약수

(예제):소수 판정

고차 함수를 이용한 추상의 정식화

함수를 받는 함수

람다 표현식을 이용한 함수 구축

일반적인 방법으로서의 함수

함수를 돌려주는 함수

profile
Full Stack Web Developer

0개의 댓글