본문 바로가기
CS

프로그래밍 언어의 종류와 특징

by AlbertIm 2024. 12. 23.

시작

프로그래밍 언어는 컴퓨터에게 명령을 내리기 위한 언어입니다. 프로그래밍 언어도 다양한 종류가 있습니다. 이 글에서는 프로그래밍 언어의 종류와 특징에 대해 알아보겠습니다.

본문

인터프리터 언어 vs 컴파일러 언어

인터프리터 언어는 코드를 한 줄씩 읽어 실행하는 방식 즉 실행이 시작되기 전에 컴파일을 하지 않고 코드를 실행하면서 동시에 컴파일을 하는 방식으로 동작합니다. 대표적인 인터프리터 언어로는 Python, JavaScript가 있습니다.

print("Hello, World!")

=> 실행
$ python hello.py

 

반면 컴파일러 언어는 코드를 한 번에 컴파일하여 실행 파일을 만든 후 실행하는 방식으로 동작합니다. 대표적인 컴파일러 언어로는 C언어가 있습니다.

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

=> 컴파일
$ gcc hello.c -o hello

=> 실행
$ ./hello

 

JVM 언어들은 인터프리터 방식과 컴파일러 방식을 결합한 형태로 동작합니다. 예를 들어 자바는 소스 코드를 컴파일하여 바이트코드를 생성하고 JVM이 이를 실행하거나 JIT 컴파일러를 통해 기계어로 번역하여 실행합니다.

동적 타입 언어 vs 정적 타입 언어

동적 타입 언어는 변수의 타입을 런타임에 결정하는 언어 즉 변수를 선언할 때 타입을 지정하지 않아도 됩니다. 대표적인 동적 타입 언어로는 Python, JavaScript가 있습니다.

a = 1
a = "Hello, World!"

 

정적 타입 언어는 변수의 타입을 컴파일 시점에 결정하는 언어 즉 변수를 선언할 때 타입을 지정해야 합니다. 대표적인 정적 타입 언어로는 Java가 있습니다.

int a = 1; // int는 정수형 타입
a = "Hello, World!"; // 컴파일 에러

명령형 프로그래밍 언어 vs 함수형 프로그래밍 언어

명령형 프로그래밍 언어는 명령어를 사용하여 컴퓨터에게 어떻게 작업을 수행할지 지시하고 데이터 상태를 변경하는 방식으로 동작합니다. 대표적인 명령형 프로그래밍 언어로는 C, Java가 있습니다.

Class Money {
    private int amount;

    public Money(int amount) {
        this.amount = amount;
    }

    public Money add(int amount) {
        this.amount += amount;
        return this;
    }

    public int getAmount() {
        return amount;
    }
}

Money money = new Money(100);
money.add(50);

assert money.getAmount() == 150;

이런 식으로 객체를 사용하여 데이터 상태를 변경하는 방식으로 작업을 수행합니다. 객체를 사용하여 데이터 상태를 변경하는 방식을 명령형 프로그래밍이라고 합니다.

 

함수형 프로그래밍 언어는 함수를 사용하여 컴퓨터에게 어떻게 작업을 수행할지 지시하고 데이터를 변경하지 않는 방식으로 동작합니다. 대표적인 함수형 프로그래밍 언어로는 Haskell, Scala가 있습니다.

def add(a: Int, b: Int): Int = a + b

val result = add(1, 2)

assert result == 3

이런 식으로 함수를 사용하여 작업을 수행하고 데이터를 변경하지 않는 방식으로 동작합니다. 함수를 사용하여 데이터를 변경하지 않는 방식을 함수형 프로그래밍이라고 합니다.

객체지향 프로그래밍 언어 vs 절차지향 프로그래밍 언어 {id="vs_3"}

객체지향 프로그래밍 언어는 객체를 사용하여 데이터와 데이터를 처리하는 함수를 하나로 묶어서 사용하는 방식으로 동작합니다. 대표적인 객체지향 프로그래밍 언어로는 Java, C++가 있습니다.

class Money {
    private int amount;

    public Money(int amount) {
        this.amount = amount;
    }

    public Money add(int amount) {
        this.amount += amount;
        return this;
    }

    public int getAmount() {
        return amount;
    }
}

Money money = new Money(100);

assert money.getAmount() == 100;

이런 식으로 객체를 사용하여 데이터와 데이터를 처리하는 함수를 하나로 묶어서 사용하는 방식으로 동작합니다. 객체를 사용하여 데이터와 데이터를 처리하는 함수를 하나로 묶어서 사용하는 방식을 객체지향 프로그래밍이라고
합니다.

 

절차지향 프로그래밍 언어는 데이터와 데이터를 처리하는 함수를 따로 사용하는 방식으로 동작합니다. 대표적인 절차지향 프로그래밍 언어로는 C가 있습니다.

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int result = add(1, 2);

    assert result == 3;
}

이런 식으로 데이터와 데이터를 처리하는 함수를 따로 사용하는 방식으로 동작합니다. 데이터와 데이터를 처리하는 함수를 따로 사용하는 방식을 절차지향 프로그래밍이라고 합니다.

마무리

프로그래밍 언어는 다양한 종류와 특징을 가지고 있습니다. 프로그래밍 언어의 종류와 특징을 이해하면 어떤 프로그래밍 언어를 사용해야 하는지 어떤 프로그래밍 언어를 사용해야 하는지 결정하는 데 도움이 될 것입니다.

참고

'CS' 카테고리의 다른 글

인증 방법: Cookies and Sessions, JWT, PASETO  (1) 2025.01.14

댓글