독도갈매기의 개발 블로그

세미콜론은 왜 필요한걸까? 인터프리터와 컴파일의 차이점 본문

기초 개념

세미콜론은 왜 필요한걸까? 인터프리터와 컴파일의 차이점

독도갈매기 2020. 10. 7. 21:19

프로그래밍을 배우다 보면 js에서나 python에서는 ;을 안붙여도 잘만 돌아가는데
C, C++, C# 같은 언어들은 ;이 빠지면 오류가 납니다.

그리고 사람은 사실상 느낄 수 없지만 python이 C보다 느리다라는 것도 들어봤을 것입니다.
위와 같은 일들이 벌어지는 이유는 바로 인터프리터 언어컴파일 언어라는 큰 차이점이 존재하기 때문입니다.

인터프리터, 컴파일 같은 의미 아닌가요?

인터프리터, 컴파일 모두 우리가 흔히아는 if, while, for 등 예약어나 직접 입력한 코드들을 기계어로 번역해주는 역할을 합니다.
하지만 번역을 하는 방식에 차이점이 존재합니다.

방식의 차이?

여기서 말하는 방식의 차이는 인터프리터는 기계어로 번역할 때 코드 한줄한줄을 읽으며 한줄씩 번역을 하고
컴파일에서는 코드를 여러줄을 전부 다 읽은 다음에 한번에 번역하여 컴퓨터에게 번역합니다.

let a = 0

console.log(a)
#include <stdio.h>

int main()
{
    int a = 0;

    printf("%d", a);

    return 0;
}

인터프리터와 컴파일의 차이점

설명은 한번에 번역을 하는지, 한줄씩 번역을 하는지 차이라고 했지만 이해를 돕기 위해 예시를 가져와 봤습니다.

요리를 할때 인터프리터는 '1. 물을 500ml를 넣어주세요'를 번역하고 물을 500ml를 넣었다면 2번을 번역하는 방식이라면
컴파일은 한번에 1번부터 끝까지 번역해서 알려주기 때문에 이런면에서 속도차이가 발생하게 되는 것이죠
레시피를 모두 듣고 외운 사람과 계속 차례차례 옆에서 방법을 들어서 한다면 당연히 모두 외운 사람이 빠르겠죠?

속도말고도 에러가 발생했을때도 차이점이 발생합니다.
한번에 번역하여 에러를 보고하는 컴파일 언어보다 한줄씩 번역하여 에러가 발생하면 보고하는 인터프리터 언어는
속도에서는 떨어질지어도 보안면에서는 더 좋다는 것을 알 수 있습니다.

세미콜론은 왜 필요할까요?

인터프리터 언어에서는 세미콜론이 필요 없습니다. 그 이유는 한줄씩 번역하기 때문에 '한줄이 끝났습니다'라는 것을
명시하지 않아도 알아서 아 이번줄이 끝났구나를 알고 번역하여 넘기는 것이죠

하지만 컴파일 언어는 한번에 번역하기 때문에 한줄이 언제 끝나는지를 모르겠죠?
그래서 ;으로 한줄이 끝났다라는 것을 명시해줘야지만 '아 한줄이 끝났구나'라고 알 수 있는것입니다.

들어봤을 인터프리터 언어, 컴파일 언어

인터프리터 언어 : Javascript, Python, Java, C#
컴파일 언어 : C/C++, C#, Java

Java, C#은 인터프리터 언어이기도 하며, 컴파일 언어입니다.

자바로 설명을 해드리자면 .java파일을 .class파일로 컴파일하고 .class파일을 JVM위에서 돌리기 위해 인터프리팅하는 것입니다.
이렇게 컴파일인터프리팅을 모두 하여 바이트 언어입니다.

바이트 언어라고 불리는 이유는 .java파일에 있는 실제 코드를 바이트 코드(0101001)로 변환(compile)하여 .class파일이 됩니다.
그리고 그 바이트 코드를 JVM같은 머신에 올려서 호환성과 속도를 얻는 것이죠! 와 쩌러!
이 변환 과정이 이해가 되지 않는다면 아래쪽 사진을 참고 해주세요
img


오늘도 제 포스팅을 읽어주셔서 감사하고, 잘못된 점이 있거나 궁금한 점이 있다면 댓글로 알려주세요! 감사합니다.

'기초 개념' 카테고리의 다른 글

[GIT] Git Merge 개념 -2- 3-Way Merge  (0) 2021.10.05
[GIT] Git Merge 개념 -1- Fast-Forward  (0) 2021.10.02
RAM은 왜 RAM일까?  (0) 2020.08.15
변수란 무엇일까?  (0) 2020.08.12
Comments