포스트

프로그래밍 언어 개념 로드맵 — C++로 알던 걸 Go·Rust로 잇기

클로저·코루틴·제네릭·소유권처럼 언어에 속하지 않는 개념 11편을 하나로 묶은 학습 지도. 'C++이 발판, Go·Rust는 변주'라는 관점으로 네 축의 읽는 순서와 선행 관계를 정리한다.

프로그래밍 언어 개념 로드맵 — C++로 알던 걸 Go·Rust로 잇기

이 로드맵을 만든 이유

클로저, 코루틴, 제네릭, 소유권 — 이런 것들을 흔히 “JavaScript 클로저”, “Kotlin 코루틴”, “Rust 소유권”처럼 특정 언어의 기능으로 배운다. 그러다 다른 언어에서 같은 개념을 다시 만나면 처음 보는 것처럼 또 배운다.

이 시리즈의 관점은 하나다.

개념은 언어의 것이 아니다. 클로저는 1964년, 코루틴은 1963년에 나온, 지금의 거의 모든 언어보다 오래된 아이디어다. 각 언어는 그 오래된 개념의 구현체 하나일 뿐이다.

그래서 각 글은 언어 기능을 나열하는 대신 개념 자체를 세우고, 언어별 구현을 뒤에서 대응만 시킨다. 특히 C++을 공통 발판으로 삼는다 — C++은 포인터·수동 메모리·가상 함수·템플릿처럼 개념의 밑배선을 손에 쥐여주기 때문에, “C++에서 하던 그것”을 축으로 Go·Rust·기타 언어가 무엇을 기본값으로 정하고 무엇을 강제했는지의 변주로 읽으면 한 번에 꿰인다.

이 지도는 그 11편을 어떤 순서로, 어떻게 묶어 읽으면 되는지를 담았다. 개별 설명이 아니라 전체 지형과 선행 관계가 목적이다.

한눈에 보기

네 축으로 묶었다. 각 축 안에서는 위→아래가 대략 읽는 순서다.

① 안전과 실패 — 실패·부재를 어떻게 다루나

함수가 실패했을 때, 값이 없을 때, 값이 바뀌면 안 될 때를 언어가 어떻게 다루는지. 런타임에 터지게 두느냐, 컴파일 타임에 강제로 다루게 하느냐가 축이다.

  • 에러 핸들링 — 예외(C++/Java) vs 에러 값(Go) vs Result(Rust). 실패를 호출자에게 어떻게 전달하나.
  • Null 안전성 — “값이 없음”을 타입에 숨기느냐(C++ 포인터·Go nil), 없애느냐(Rust Option), 표시하느냐(Kotlin ?). ResultOption이 같은 뿌리(합타입)라 에러 핸들링 다음에 읽으면 자연스럽다.

② 메모리·값·불변 — 값의 일생

값이 언제 잡히고 풀리는지, 넘길 때 복사되는지, 바꿀 수 있는지. 세 편이 한 줄기다 — C++이 손으로 고르던 것을 Go·Rust가 각자 기본값으로 굳혔다.

  • 메모리 관리 — 수동(C++) vs GC(Go) vs 소유권(Rust). 누가 해제를 책임지나. 이 축의 뿌리.
  • 값 vs 참조 — 대입이 복사냐 공유냐 이동이냐. Go는 복사 기본, Rust는 이동 기본.
  • 불변성 — 값을 바꿀 수 있는가. C++ const를 Rust는 기본값으로 뒤집고 컴파일러가 강제한다. 소유권·빌림과 한 몸.

③ 함수와 상태 — 스택을 탈출하는 것들

“함수가 끝났는데 그 안의 무언가가 살아남아야 한다면?” 이 한 질문에서 나온 형제들이다. 살아남으려면 스택에서 힙으로 옮겨야 한다.

  • 클로저 — 캡처한 변수가 살아남는다. 여러 글의 선행이니 이 축의 시작점.
  • 코루틴프레임 전체(실행 위치까지)가 살아남는다. 클로저의 큰 버전.
  • 동시성 조율 — 여러 실행 흐름이 데이터를 안전하게 나눠 쓰는 법(공유 상태+락 vs 채널 vs 소유권). 코루틴의 “조율 반쪽”.
  • 이터레이터와 지연 평가 — 순회를 추상화하고 어댑터에 클로저를 넘긴다. 클로저를 봤으면 착지가 쉽다.

④ 다형성 두 축 — 하나의 개념, 반대 방향

“여러 타입을 다룬다”는 같은 목표를 정반대로 푸는 두 축. 함께 읽어야 그림이 완성된다.

  • 제네릭(파라미터 다형성) — 하나의 코드를 여러 타입에 찍어낸다(대개 컴파일 타임). C++ 템플릿.
  • 서브타입 다형성 — 여러 타입을 하나의 인터페이스로 다룬다(런타임). C++ 가상 함수. 제네릭을 먼저 읽고 “나머지 절반”으로 이어가면 된다.

권장 진입 순서

전체를 정주행할 사람을 위한 순서다. 선행 관계를 존중하되 입문부터 쌓는다. (특정 주제만 필요하면 위 표에서 바로 골라 들어가도 된다 — 각 글은 독립적으로 읽힌다.)

  1. 클로저 — 여러 글의 선행, 가장 먼저
  2. 에러 핸들링 모델
  3. Null 안전성
  4. 메모리 관리 모델
  5. 값 vs 참조 의미론
  6. 불변성
  7. 코루틴
  8. 동시성 조율 모델
  9. 이터레이터와 지연 평가
  10. 제네릭
  11. 서브타입 다형성

언어별 로드맵과의 관계

이 시리즈는 언어를 가로지르는 개념 층이다. 특정 언어를 순서대로 익히려면 언어별 로드맵으로 간다 — 개념 글들은 그 로드맵 곳곳에서 “이건 언어 것이 아니다”라며 참조된다.

이 로드맵이 다루지 않는 것

언어 문법·표준 라이브러리·빌드 같은 언어별 세부는 여기 없다(각 언어 로드맵의 몫). 이 지도는 “여러 언어에 공통으로 반복되는 개념”만 모은다. 앞으로 불변성 옆에 배열·슬라이스, 메모리 레이아웃, 패턴 매칭 같은 편이 붙으면 이 표에 한 줄씩 늘어난다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.