트렌드브리프

리스프(Lisp)를 배우는 이유와 실무에서 얻는 것

게시 · 약 4분 분량

핵심 요약 리스프는 코드와 데이터를 같은 구조로 다루는 오래된 언어 계열로, 매크로와 대화형 개발로 프로그래밍 시야를 넓혀 준다는 평가를 받는다. 주력 언어가 아니어도 학습 가치가 크며 스킴이나 클로저 방언으로 시작하는 방법이 흔히 권장된다.

목차
  1. 리스프는 어떤 언어인가
  2. 왜 굳이 리스프를 배우나
  3. 실무에 정말 도움이 되나
  4. 리스프, 어디서부터 시작하나
  5. 현실적인 기대치는

리스프(LISP)는 코드와 데이터를 같은 형태로 다루는 오래된 언어 계열로 알려져 있다. 이 구조 덕분에 언어 문법 자체를 확장하는 매크로, 프로그램을 켜 둔 채 고쳐 나가는 대화형 개발 같은 기능이 자연스럽게 나온다고 평가된다. 당장 회사 주력 언어로 삼지 않더라도 프로그래밍을 보는 눈을 바꿔 준다는 이유로 학습 가치를 높게 치는 개발자가 많다. 처음이라면 스킴이나 클로저처럼 접근하기 쉬운 방언부터 시작하는 편이 무난하다.

리스프는 어떤 언어인가

리스프(Lisp)라는 이름은 리스트 처리(LISt Processing)의 줄임말이다. 영문 위키백과 Lisp 문서에 따르면 존 매카시가 1958년 MIT에서 개발을 시작했고, 지금도 널리 쓰이는 고수준 언어 가운데 포트란 다음으로 오래된 언어다. 하나의 언어라기보다 공통된 사상을 공유하는 방언들의 모음에 가깝다.

가장 눈에 띄는 특징으로는 소괄호로 감싼 S-표현식이라는 단순한 표기법이 꼽힌다. 같은 문서에 따르면 매카시가 처음 구상한 표기는 M-표현식이었지만, 프로그래머들이 S-표현식 쪽을 빠르게 택하면서 지금의 모습으로 굳었다.

괄호가 많다는 이유로 낯설게 느끼는 사람이 적지 않다. 그런데 이 단순한 표기가 곧 리스프의 핵심 무기라는 설명이 많다. 코드가 그대로 리스트라는 데이터이고, 데이터가 다시 코드가 될 수 있기 때문이다. 코드와 데이터의 형태가 같은 이 성질을 흔히 동형성이라고 부른다. 위키백과는 프로그램 코드의 구조를 표준 데이터 구조로 그대로 표현한 최초의 언어로 리스프를 꼽는다.

역사가 긴 만큼 남긴 것도 많다. 같은 문서는 트리 자료구조, 가비지 컬렉션 같은 자동 메모리 관리, 동적 타이핑, 조건문, 고차 함수, 재귀, REPL을 리스프가 개척한 기능으로 정리한다. 오늘날 어떤 언어를 쓰든 매일 마주치는 것들이다.

실무에서 마주칠 법한 대표적인 방언은 다음과 같이 거론된다.

왜 굳이 리스프를 배우나

한마디로 언어를 다루는 방식 자체를 새로 배우기 때문이다. 대부분의 언어는 문법이 고정돼 있어 주어진 틀 안에서만 코드를 짠다. 반면 리스프 계열은 매크로로 문법을 직접 늘릴 수 있다는 점이 자주 강조된다.

실무 감각으로 풀면 이렇다. 반복되는 패턴이 보이면 보통 함수로 묶는다. 그런데 함수로는 잡히지 않는, 문법 수준의 반복이 있다. 리스프에서는 그런 부분까지 매크로로 걷어낼 수 있다고 소개된다. 라이브러리가 마치 언어의 일부처럼 녹아드는 경험을 준다는 이야기가 많다.

또 하나는 대화형 개발이다. REPL이라 부르는 환경에서 프로그램을 실행해 둔 채 함수 하나를 고치고 곧바로 결과를 확인하는 흐름이 강조된다. 빌드하고 재시작하는 대기 시간이 줄어 실험이 빨라진다는 점을 장점으로 꼽는 개발자가 많다.

실무에 정말 도움이 되나

주력 언어로 채택하지 않더라도 도움이 된다는 의견이 많다. 리스프에서 익힌 사고방식이 다른 언어를 쓸 때 그대로 힘을 발휘하기 때문이다.

예를 들어 파이썬이나 자바스크립트의 고차 함수, 자바의 스트림, 러스트의 매크로 같은 기능은 리스프 계열에서 다듬어진 아이디어와 뿌리가 닿아 있다는 설명이 자주 나온다. 리스프를 한 번 거치면 이런 기능이 왜 그런 모양으로 생겼는지 감이 잡힌다.

설정 파일이나 규칙 엔진처럼 작은 도메인 특화 언어를 직접 설계할 일이 생겼을 때도 참고가 된다. 데이터로 규칙을 표현하고 그 데이터를 코드처럼 해석하는 방식은 리스프가 오래 다듬어 온 패턴으로 소개된다.

리스프, 어디서부터 시작하나

작은 방언 하나를 골라 직접 코드를 짜 보는 편을 권한다. 스킴은 문법이 작아 핵심 개념만 빠르게 익히기 좋다는 평가가 많고, 클로저는 이미 JVM이나 자바에 익숙한 개발자가 실무에 가깝게 접근하기 좋다는 소개가 흔하다.

시작 단계에서는 다음 순서가 무난하다는 조언이 많다.

괄호에 압도되지 않는 것이 관건이다. 에디터의 괄호 짝 맞춤 기능과 자동 들여쓰기를 켜 두면 부담이 크게 줄어든다는 이야기가 많다.

현실적인 기대치는

장점만 있는 것은 아니다. 리스프 계열은 주류 언어에 비해 채용 시장이나 라이브러리 생태계가 좁은 편이라는 지적이 있다. 그래서 당장의 취업이나 특정 제품 개발을 목표로 한다면 우선순위가 밀릴 수 있다.

그렇지만 학습 도구로서의 값어치는 별개라는 평가가 많다. 며칠 투자해 기본기를 익히는 것만으로도 코드를 구조로 바라보는 습관이 생기고, 그 습관은 어떤 언어를 쓰든 남는다. 리스프로 가는 길은 특정 언어로 갈아타는 여정이라기보다 프로그래밍을 보는 시야를 한 단계 넓히는 과정에 가깝다.

더 많은 글 보기 RSS 구독