[프로그래밍 언어론] 프로그래밍 언어론 개요

2025. 6. 24. 18:06·CS/프로그래밍 언어론

개요

 사실 프로그래밍 언어론이라는 것을 들으면.. 그게 뭔데? 하는 반응이 많을 것이다. 요즘 대학원 랩실만 보더라도 거의 모든 곳에서 AI를 활용한 연구를 진행하다 보니 프로그래밍 언어를 주 주제로 하는 곳을 많이 찾아보기도 힘든 상황이니.. 그런데 사실 프로그래밍 언어론도 AI 모델에서 상당히 중요한 부분을 차지하고 있다. 프로그래밍 언어론을 기반으로 컴파일러를 만들고, 컴파일러 가속을 통해 인공지능 / 딥러닝 모델의 성능을 향상하는 것도 가능하니 프로그래밍 언어론도 인공지능과 영 관련이 없다고는 할 수 없겠다.

 

 사담이 길었는데, 짧게 요약하면 프로그래밍 언어론은 결국 프로그래밍 언어의 구조, 의미, 설계 방식에 대해 다루는 학문이다. 

 

프로그래밍 언어

 먼저 프로그래밍 언어란 '계산 과정을 기계가 읽을 수 있고 사람이 읽을 수 있도록 기술하기 위한 일종의 표기법'이다. 

여기서 계산이란 컴퓨터가 할 수 있는 연산이며, 기계 읽기란 효율적인 번역 / 실행이 가능해야 함을 의미한다. 사람 읽기는 사람이 쉽게 프로그래밍 할 수 있도록 편의성을 제공해야 하며, 컴퓨터 연산이 추상화 / 요약되어야 함을 뜻한다. 

 

프로그래밍 언어의 종류

 프로그래밍을 하는 기본적인 스타일을 뜻하는 프로그래밍 패러다임의 4가지를 알아보자.

1. 명령형 프로그래밍

 - 문제를 해결하는 절차 / 명령어를 기술하는 방식.

 - 수행형 명령어로 구성

 - ex) C, Ada, Pascal, Python

 

2. 함수형 프로그래밍

 - 프로그램의 계산 과정을 수학적 함수의 수행으로 간주

 - 프로그램이 함수로 구성됨

 - 기계 모델에 독립적

 - ex) Lisp, Scheme, ML, Haskell

 

3. 논리형 프로그래밍

 - 술어 논리 형태의 프로그램 표현

 - 사실 / 규칙을 표현하는 논리 문장의 집합

 - 문제 해결보다는 논리적 표현에 중점

 - 선언적 프로그래밍이라고도 표현

 - ex) Prolog

 

4. 객체 지향형 프로그래밍

 - 객체와 그 연산들의 상호 작용으로 프로그램 정의

 - ex) C++, Java, C#, Swift, Objective-C

 

추상화와 명령형 언어의 발전

 최초의 컴퓨터는 ENIAC은 폰 노이만 모델의 컴퓨터이며, 이 ENIAC을 시작으로 프로그래밍 언어가 발전하기 시작했다. 여기서 폰 노이만 모델이란 '실행할 프로그램을 메모리에 저장하여 이를 실행(Fetch, Decode, Execute)하는 방식'이며, 이것을 프로그램 저장 방식 컴퓨터라 한다. 폰 노이만 컴퓨터는 Fetch, Decode, Execute 연산을 반복적으로 실행한다. 

 

 그렇다면 추상화란 무엇일까? 사실 이전의 디자인 패턴 포스팅을 읽고 이해한 독자라면 추상화에 대해서는 이미 다 알고 있을 것이다. 추상화는 '실제적 / 구체적 개념들을 요약해 고수준의 개념을 유도하는 과정'이다. 예시를 하나 들면, 우리가 print 함수를 호출하면 콘솔에 문자열이 찍히는데, 우리는 print 함수를 사용할 때 상세한 작동 과정을 알 필요 없이 프로그래밍 언어에서 print 함수를 사용해 문자열을 출력하고 있다. 여기서 print 함수의 상세한 작동과정이 실제적 / 구체적 개념이 되는 것이다. 추상화에는 다음 두 종류가 있다.

 

1. 데이터 추상화

 - 저수준 데이터 / 자료형을 요약 / 추상화하여 고차원의 새로운 자료형 / 자료 구조로 만드는 과정

 - ex) 변수, 데이터 타입, 배열, 구조체

 

2. 제어 추상화

 - 제어: 프로그램 내의 실행 순서.

 - 실행 흐름을 나타내는 저수준 명령어를 요약 / 추상화하여 높은 수준의 제어 구조를 만드는 것

 - ex) load R1, x. add R1, 3. store R1, x => x = x + 3으로 표현, if else, switch, for, while, ...

 

 그렇다면 데이터와 제어를 하나로 통합하여 추상화할 수는 없을까? 추상 자료형(Abstract Data Type)이 바로 이 둘을 통합한 것이다. 추상 자료형은 '데이터와 관련된 연산을 한데 묶어 캡슐화하여 정의한 것'이다.

스택 자료형을 한번 생각해 보자. 스택 자료형은 스택을 표현하기 위한 자료구조와 push, pop, peek와 같은 관련된 연산을 한 군데에 묶어 추상 자료형으로 정의할 수 있다.

 

프로그래밍 언어의 정의 / 구현

 프로그래밍 언어를 만들 때에는 다음 세 가지를 정의해야 한다.

1. 어휘 구조(Lexical structure): 언어에서 사용하는 단어의 구조, 철자법

2. 구문법(Syntax): 문장을 구성하는 방식

3. 의미론(Semantics): 문장 혹은 프로그램의 의미를 정함

 

 프로그래밍 언어 정의의 3가지 요소는 다음 포스팅에서 차차 알아가보도록 하자. 프로그래밍 언어를 구현하는 방법에는 일반적으로 두 방법이 있다.

 

1. 컴파일러

 - 소스 프로그램을 입력받아 구문법에 맞게 작성되었는지 검사 => 의미 파악해 의미에 맞게 동작하도록 기계어 명령어로 번역

 

2. 인터프리터

 - 소스 프로그램을 입력받아 구문법에 맞게 작성되었는지 검사 => 의미 파악해 의미에 맞게 동작하도록 해석

 

'CS > 프로그래밍 언어론' 카테고리의 다른 글

[프로그래밍 언어론] Parser와 추상 구문 트리  (0) 2025.06.26
[프로그래밍 언어론] 구문법 - 파스 트리와 모호성  (1) 2025.06.25
[프로그래밍 언어론] 구문법  (0) 2025.06.24
'CS/프로그래밍 언어론' 카테고리의 다른 글
  • [프로그래밍 언어론] Parser와 추상 구문 트리
  • [프로그래밍 언어론] 구문법 - 파스 트리와 모호성
  • [프로그래밍 언어론] 구문법
hyeon0117
hyeon0117
컴공으로 살아남기
  • hyeon0117
    컴공 생활기
    hyeon0117
  • 전체
    오늘
    어제
    • 분류 전체보기 (36) N
      • Algorithm (2)
      • PS (15)
        • Solve (15)
      • CS (19) N
        • 객체지향설계 & 패턴 (12)
        • COLMAP (2)
        • 머신러닝 (1)
        • 프로그래밍 언어론 (4) N
        • 형식언어 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    객체지향설계
    백준23882
    다이나믹 프로그래밍
    플로이드 워셜 알고리즘
    백준 10867
    soild 패턴
    디자인 패턴
    자료구조
    백준 11899
    선택 정렬
    백준 23881
    백준 23969
    누적 합 알고리즘
    BOJ
    백준 24051
    디자인패턴
    백준13417
    백준
    알고리즘
    플로이드-워셜 알고리즘
    백준1895
    백준 11659
    최단 경로
    플로이드 - 워셜
    객체지향
    백준 6825
    백준1531
    PS
    백준 11006
    Colmap
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hyeon0117
[프로그래밍 언어론] 프로그래밍 언어론 개요
상단으로

티스토리툴바