컴퓨터가 01101010... 등 이진수만으로 이루어진 정보들(머신코드)을 기반으로 작동한다는 사실은 이미 잘 알려져있다.
하지만, 우리가 프로그래밍 언어를 통해 개발을 하는 과정에서 이러한 이진수들을 작성한 일은 아마 없을 것이며, 그렇게 하라고 해도 하지 못할 것이다.
이말은 즉, 우리의 프로그래밍 언어를 컴퓨터 머신코드로 바꾸어주는 번역기가 존재한다고 이해할 수 있다.
바로 이 번역기가 컴파일러와 인터프리터가 되시겠다.
1) 컴파일러
개발자에 의해 작성된 코드가 컴파일러로 번역되어 프로그램의 실제 사용자에게까지 도달하는 과정은 다음과 같다.
코드 작성완료(프로그래밍 언어) -> 컴파일러로 번역(머신코드) -> 실제 사용자의 컴퓨터에 다운로드(머신코드) -> 작동
컴파일러를 통해 머신코드로 번역이 완료가 되고 나면 해당 머신코드로 이루어진 프로그램이 직접 사용자의 컴퓨터로 가 작동하기 때문에, 사용자의 컴퓨터 내에선 더 이상 번역을 거칠 일이 없다.
또한, 우리가 이해할 수 없는 머신코드의 형태가 배포되는 것이기에 개발자의 직접적인 코드가 유출될 가능성이 적다.
하지만, 프로그램을 위해 작성된 모든 코드가 저장되어야 하므로, 이용자가 받게 되는 프로그램의 용량이 크다는 단점이 있다.
또한, 컴파일러는 모든 코드를 한 번에 번역하기 때문에 개발자는 코드 한 줄을 수정을 할 때마다 혹은 테스트를 할 때마다 코드 전체를 컴파일하는 과정을 거쳐야하고, 이것은 개발의 편의성을 떨어트릴 수 있다.
컴파일러 요약
- 코드 수정과 테스트마다 모든 코드를 컴파일하므로 개발 편의성이 떨어진다.
- 개발자 컴퓨터에서 머신코드로 번역을 완료 후 사용자들에게 배포되므로, 사용자들이 이용할 때는 번역 과정이 필요없어 실행속도가 빠르다.
- 개발자의 직접적인 코드가 유출될 가능성이 적다.
- 배포된 프로그램이 번역된 긴 머신코드를 모두 담기 때문에 용량이 크다.
- 주로 C, C++와 같이 저수준 언어에서 많이 사용된다.
2) 인터프리터
인터프리터는 개발자의 코드를 머신코드로 바꾼다는 점에서 컴파일러와 동일한 역할을 하지만 수행 방식에서 차이를 보인다.
컴파일러가 컴파일 과정에서 코드 전체를 번역하는 것과 달리 인터프리터는 코드를 줄 단위로 번역해준다.
이 과정 덕분에 개발자는 컴파일러를 이용할 때에 비해 오류 수정이나 개선 작업에 대한 결과를 곧바로 확인할 수 있다.
또한, 인터프리터를 활용해 프로그램을 개발, 배포할 때는 컴파일러 때와 다른 과정을 거치게 된다.
코드 작성(프로그래밍 언어) -> 인터프리터로 용이한 수정 및 테스트 -> 코드와 인터프리터를 함께 사용자의 컴퓨터에 다운로드 -> 사용자가 이용할 때마다 코드-인터프리터 번역 과정거침
이러한 작동방식은 번역된 머신코드가 아닌 번역 전 코드와 번역기를 함께 보내는 방식이라고 이해할 수 있겠다.
이렇게 하면 프로그램의 코드만 전송하기 때문에 컴파일러를 이용할때보다 프로그램의 용량을 줄일 수 있다.
하지만, 개발자의 직접적인 코드가 전송되는 것이므로 유출의 위험이 존재하며 이용자가 프로그램을 실행할 때마다 이용자 컴퓨터에서 번역과정을 거치기 때문에 실행속도가 느려질 수 있다.
인터프리터 요약
- 코드를 수정하고 테스트하는데 용이하다.
- 프로그램 배포시 프로그래밍 언어로 된 코드를 보내기 때문에 용량이 작다.
- 개발자의 직접적인 코드가 유출될 가능성이 있다.
- 사용자의 컴퓨터에서 번역 과정이 이루어지기 때문에 실행속도가 느리다.
- Python, Ruby처럼 고수준 언어에서 주로 사용된다.
'그 외 공부 > CS' 카테고리의 다른 글
동적타이핑 (Dynamic typing), 정적타이핑 (Static typing) (0) | 2021.01.10 |
---|