본문 바로가기
[POLF] : 코딩

[용어부터 정리하자] 기계어, 자연어, 어셈블리어?

by POLF 2023. 1. 9.

 

기계어는 뭐고, 자연어는 뭐고, 어셈블리어는 뭘까? 파이썬은 어디에 속할까?

By. POLF

 

 

기계어는 말 그대로 기계의 언어, 기계가 이해하는 언어입니다. 자연어는 뭘까요? 자연어는 인간에 가까운 언어를 이야기 합니다. 그럼 어셈블리어는? 기계어와 자연어 사이에 있는 언어입니다. 그럼 조금 더 자세히 알아보겠습니다. 

 

기계어

기계어는 컴퓨터나 기계가 직접 읽고 이해할 수 있는 비트 단위로 쓰여진 언어입니다. 쉽게 말하면 컴퓨터가 쓰는 언어라고 생각할 수 있습니다. 

 

0101 0011 0100 1111 1000

1000 0011 1100 1001 1100

 

위에 나열된 0과 1만 가지고 무슨 의미인지 알기란 어렵습니다. 그렇기 때문에 기계어라고 지칭하는 것 같습니다.

 

01010100010010010100110101000101 를 사람이 쓰는 언어로 번역해보면? 

'TIME'

 

컴퓨터가 쓰는 언어이다 보니 컴퓨터에게 명령을 내리면 빠르게 처리가 가능합니다. 그래서 기계어에 가까울수록 처리속도가 빨라지게 됩니다. 하지만 2진법으로 구성되어 있기 때문에 사람이 작성하기 위해서는 전문지식이 필요합니다. 

 

 

어셈블리어

기계어의 단점을 보와하기 위해 나온 게 바로 '어셈블리어'입니다. 기계어로 작성된 명령어에 대해서 기호를 정해 사람이 쉽게 컴퓨터를 제어할 수 있도록 했죠. 

 

adosseg
.model small
.stack 100h

.data
hello_message db 'Hello, World!',0dh,0ah,'$'

.code
main proc
        mov ax, @data
        mov ds, ax

        mov ah, 9
        mov dx, offset hello_message
        int 21h

        mov ax, 4C00h
        int 21h

main endp
end main

위는 NASM x86 어셈블리어를 구현한 헬로 월드 프로그램입니다. 그래도 저는 모르겠네요. mov는 move를 변형한 명령문이다 정도만 이해가 됩니다. (저도 이제 막 코딩을 공부하는 초보이기 때문에...ㅜㅜ)

 

어셈블리어 또한 모르는 사람에게는 어려운 언어이지만, 기계어와 같이 2진법으로 이루어진 것보다는 조금 더 친근하게 느껴집니다. 하지만 컴퓨터 입장에서는 어셈블리어로 작성한 코드로 작동되기 때문에 자연어와 같은 고급언어를 사용할 경우에는 번역기가 필요하게 됩니다. 

 

여기서 나온 것이 바로 컴파일러과 인터프리터 입니다.

 

컴파일러(Compiler)

 

컴파일은 번역을 하자면 '엮다, 편집하다'라는 의미입니다. 그럼 컴파일러는 편집해주는 프로그램 정도가 되겠네요. 한마디로 컴파일러는 고급언어로 작성된 코드를 기계가 이해할 수 있도록 편집해주는 편집기 정도로 보면 될 것 같습니다.   

 

컴파일러의 작동 방식은 전체 코드를 스캔해서 기계어로 번역을 한다고 합니다. 전체 코드를 스캔해야 되기 때문에 초기에 시간은 오래걸리지만 전체 시간을 보면 인터프리터에 비해 짧다고 합니다. 

 

컴파일러의 단점으로는 소스코드를 기계어로 번역하는 과정에서 오브젝트 코드라는 파일을 만들고, 다시 오브젝트 코드를 링킹(Linking)하는 작업이 필요하다고 합니다. 그렇기 때문에 이 작업에서 필요한 메모리가 인터프리터 보다 많습니다. 

 

컴파일러는 사용하는 고급언어에는 JAVA, C, C++ 정도가 있습니다. 

 

 

인터프리터(Interpreter)

 

인터프리터는 컴파일러와는 다르게 한 번에 한 문장을 번역해서 명령을 하는 방식으로 작동된다고 합니다. 그래서 컴파일러보다 실행시간이 오래 걸리게 됩니다. 

 

하지만 컴파일러와 다르게 오브젝트 코드나 링킹 작업을 필요로 하지 않기 때문에 메모리 효율이 더 좋다고 합니다. 

 

컴파일러는 프로그램 실행 전 전체 코드를 검사한 후 오류메세지를 생성하는 반면, 인터프리터는 프로그램을 실행시키고 한 문장씩 실행되면서 오류가 발생하면 프로그램이 중지된다고 합니다. 

 

인터프리터를 사용하는 언어에는 Python, Javascript 등이 있습니다. 

 

 

자연어

 

 

 

 

분류상으로 기계어, 어셈블리어까지는 동일하게 분류하는데 자연어로 쓰느냐, 고급언어로 쓰느냐에 대해서는 많이 갈리는 것 같습니다. 하지만 분류체계를 보면 기계어에 대한 정의가 기계가 이해하기 편한 언어로 되어 있기 때문에 자연어로 지칭하는게 맞는 분류인 것 같네요. 

 

인공지능에서 중요한 부분이 자연어 처리라는 과정이 있습니다. 자연어라는 게 사람이 일상 생활에서 사용하는 언어이기 때문에 인공지능이 이를 학습할 수 있도록 의미를 분석해주고 처리해주는 작업입니다. 

 

코딩도 마찬가지로 자연어란 사람이 일반적으로 쓰는 언어로 코딩을 하는 것을 의미합니다. 

 

만약 "돈이 있으면 택시를 타고, 돈이 없으면 걸어 가라"를 코딩해본다면

 

>>> money = True

>>> if money:

            print("택시를 타고 가라")

        else:

            print("걸어 가라")

 

이런 식으로 작성해 볼 수 있다. 코딩에 대해서 모르더라도 대략 어떤 의미인지는 알 수가 있다. 

 


개념부터 차근차근 공부하고, 공부한 내용을 남기는 중입니다. 물론 저보다 코딩을 잘하고, 많이 알고 계시는 분들이 많지만 저 같은 생초보가 이해하기는 쉽지 않더라구요. 그래서 저와 같이 아무것도 모르는 분들을 위한 일종의 발자국이니, 수정이 필요한 내용이 있을 경우에는 댓글로 남겨주시면 반영하도록 하겠습니다. 

 

 

 

댓글