Skip to content

프로그래밍 언어 개념: 패러다임 · 진화 · 선정 ​

서론

왜 이렇게 많은 프로그래밍 언어가 있을까요? 어떤 것을 배워야 할까요? 이 장에서는 "언어의 진화"부터 "프로그래밍 패러다임"까지, 그리고 "선택 방법"까지, 프로그래밍 언어에 대한 전체적인 이해를 구축합니다. 결론부터 말하면: 최고의 언어는 없고, 상황에 가장 적합한 언어만 있습니다.

이 글에서 무엇을 배우게 되나요?

이 장을 마치면 다음을 얻게 됩니다:

  • 합리적 선택 능력: "어떤 언어를 배울까"에 직면했을 때, 프로젝트 요구에 따라 판단할 수 있고 맹목적으로 유행을 따르지 않습니다
  • 패러다임 이해도: "객체지향", "함수형 프로그래밍"이 단순한 문법 차이가 아니라 다른 사고방식임을 이해합니다
  • 역사적 진화 관점: 70년 이상의 언어 진화 — 0과 1을 직접 작성하던 것부터 자연어로 코드를 생성하는 것까지
  • 후속 학습 기초: 새로운 언어 설계 철학과 기술 선택 의사결정의 기반
장내용핵심 개념
제1장언어의 진화기계어부터 고급 언어까지
제2장프로그래밍 패러다임명령형, 객체지향, 함수형
제3장언어 선택상황 기반 선택 방법

0. 인간은 컴퓨터와 어떻게 "대화"할까 ​

이진수만 이해하는 로봇과 소통해야 한다고 상상해 보세요:

  • 직접 0과 1 입력 — 가장 원시적이고 효율이 극도로 낮음. 0 하나를 1로 잘 쓰면 전부 틀려짐(기계어)
  • 니모닉 사용 — MOV AX, 1이 10110000 00000001보다 훨씬 알아보기 쉬움(어셈블리어)
  • 자연어에 가까운 표현 — int sum = 1 + 2; 인간이 바로 이해 가능(고급 언어)

프로그래밍 언어는 인간과 컴퓨터 간의 소통의 다리이며, 70년 이상 "인간의 사고에 더 가까워지는" 방향으로 진화해 왔습니다.


1. 프로그래밍 언어의 진화 ​

👇 직접 확인해 보기: 1940년대부터 오늘날까지의 프로그래밍 언어 진화 역사 탐색

Programming Language MapEvolution · paradigms · type systems · language comparison
1940s
Machine language
Binary
1950s
Assembly and early high-level languages
AssemblyFortranLispCOBOL
1970s
Systems programming era
CPascalSmalltalk
1980s-90s
OOP and the Internet
C++JavaPythonJavaScript
2000s
Modern languages
C#GoScalaRuby
2010s+
Next-generation languages
RustSwiftKotlinTypeScript
2000sModern languages
Language design focused more on developer productivity and safety. Go was created for cloud-native infrastructure.
GoConcurrency-friendly and used to build Docker and Kubernetes
RubyRails brought a major productivity boost to Web development
Core idea:Programming languages have evolved from machine code to modern high-level languages, steadily moving closer to human thinking.

💡 한 줄 요약

프로그래밍 언어의 진화 추세: 점점 더 인간의 사고에 가까워지고, 점점 더 안전해지며, 점점 더 효율적입니다. 0/1 직접 작성에서, 어셈블리 니모닉, C의 구조적 프로그래밍, Java의 객체지향, 그리고 Rust의 메모리 안전까지 — 세대마다 이전 세대의 문제점을 해결해 왔습니다.


2. 프로그래밍 패러다임: 문제를 생각하는 방식 ​

프로그래밍 패러다임은 언어 기능이 아니라 사고방식입니다 — 글쓰기에 시, 소설, 논문 등 다른 문체가 있듯이.

2.1 명령형 — "컴퓨터에게 어떻게 할지 단계별로 알려주기" ​

c
int sum = 0;
for (int i = 0; i < n; i++) {
    sum += arr[i];
}

2.2 객체지향 — "데이터와 행동을 객체로 캡슐화" ​

python
class Dog:
    def __init__(self, name):
        self.name = name
    def bark(self):
        print(f"{self.name} says woof!")

2.3 함수형 — "순수 함수의 조합, 상태 변경 없이" ​

haskell
sum = foldl (+) 0
-- 같은 입력은 항상 같은 출력 생성

2.4 선언형 — "무엇을 할지만 말하고, 어떻게 할지는 신경 쓰지 않기" ​

sql
SELECT name FROM users WHERE active = true
-- 데이터베이스가 가장 빠르게 조회하는 방법을 스스로 결정

💡 실제 개발에서

현대 언어 대부분은 멀티 패러다임입니다. Python은 객체지향도, 함수형도 지원하고, JavaScript도 마찬가지입니다. "어떤 패러다임이 최고인가"를 고민하기보다, 문제에 가장 적합한 방식을 선택하세요.


3. 타입 시스템: 데이터의 교통 규칙 ​

강타입약타입
정적Java, Rust, TypeScript — 가장 안전C, C++ — 효율적이지만 주의 필요
동적Python, Ruby — 유연하고 안전JavaScript, PHP — 유연하지만 오류 발생 쉬움

핵심 질문: "1" + 1의 결과는?

  • JavaScript(약타입): "11" — 조용히 변환해 줌
  • Python(강타입): TypeError — 직접 생각해서 처리해야 함

타입 시스템에 대해 더 깊이 알고 싶다면 → 타입 시스템 서론 | 컴파일러 원리


4. 컴파일형 vs 인터프리터형 ​

컴파일형인터프리터형JIT
과정먼저 전부 번역 후 실행읽으면서 실행먼저 해석 후 핫스팿은 컴파일
속도가장 빠름비교적 느림중간
디버깅컴파일 대기 필요즉시 피드백즉시 + 최적화
대표C, Rust, GoPython, RubyJava, JavaScript

5. 프로그래밍 언어를 어떻게 선택할까 ​

상황별 선택 ​

상황추천 언어이유
웹 프론트엔드JavaScript, TypeScript브라우저는 JS만 인식
웹 백엔드Go, Java, Python, Node.js생태계가 성숙함
모바일 개발Swift (iOS), Kotlin (Android)공식 추천
AI / 데이터PythonPyTorch, Pandas가 모두 Python에 있음
시스템 프로그래밍C, Rust하드웨어를 직접 제어
클라우드 네이티브Go, RustDocker/K8s가 모두 Go로 작성됨

학습 로드맵 추천 ​

  1. Python — 문법이 가장 간단하고, AI 시대의 진입 언어
  2. JavaScript — 웹 개발 필수, 프론트/백엔드 모두 가능
  3. TypeScript — JS에 타입 시스템을 추가하여 정적 타입 체험
  4. Go 또는 Rust — 컴파일형 언어와 저수준 개념 이해

6. 요약 ​

📚 핵심 요점

  1. 언어의 진화: 기계어부터 고급 언어까지, 점점 더 인간의 사고에 가까워짐
  2. 프로그래밍 패러다임: 명령형, 객체지향, 함수형, 선언형 — 각각 적용 시나리오가 다름
  3. 타입 시스템: 정적/동적, 강/약 — 안전성과 유연성에 영향
  4. 실행 방식: 컴파일형은 빠르고, 인터프리터형은 유연하며, JIT은 둘의 장점을 겸비
  5. 은총알은 없다: "최고의 언어"가 아니라 상황에 맞는 언어를 선택

다음 학습: