의견.png

"소스코드"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
21번째 줄: 21번째 줄:
 
== 활용 ==
 
== 활용 ==
 
=== 컴파일 방식 ===
 
=== 컴파일 방식 ===
 +
컴퓨터는 모든 명령을 CPU가 처리하고 CPU는 모든 명령을 0과 1로 이해하고 실행한다. CPU는 0과 1, 오직 두가지 경우 밖에 모르기 때문이다. 'A'라는 알파벳을 입력할 때 컴퓨터는 00110010와 같은 이진코드로 해석하고 명령을 처리한다. 즉, 우리의 언어는 컴퓨터가 이해하지 못하므로 컴퓨터가 이해할 수 있는 통역사가 필요하다. 여기에서 말하는 통역이 바로 컴파일이다.<ref>Mark J, 〈[https://itblog.lazyig.com/52 컴파일이란]〉, 《네이버 블로그》, 2017-05-11</ref>
 +
 
컴파일 방식은 소스 코드를 바로 컴퓨터가 바로 읽을 수 있도록 기계어로 변환 시키는 언어이다.
 
컴파일 방식은 소스 코드를 바로 컴퓨터가 바로 읽을 수 있도록 기계어로 변환 시키는 언어이다.
컴파일 방식은 기계어로 바로 번역시켜두고 실행하기 때문에 다른 방식에 비해서 실행 속도가 빠르다.
+
컴파일 방식은 기계어로 바로 번역시켜두고 실행하기 때문에 다른 방식에 비해서 실행 속도가 빠르다. 기계어로 번역이 되어버렸기 때문에 소스코드의 원본이 노출될 우려가 매우 적다. 거의 없다고 보면 된다. <ref name="lazyig" />
기계어로 번역이 되어버렸기 때문에 소스코드의 원본이 노출될 우려가 매우 적다. 거의 없다고 보면 된다.
 
  
 
=== 인터프리터 방식 ===
 
=== 인터프리터 방식 ===
인터프리터 방식은 소스 코드를 두고 그걸 한 줄씩 읽어가면서 실행하는 방식이다.
+
인터프리터(Interpreter) 방식은 소스 코드를 두고 그걸 한 줄씩 읽어가면서 실행하는 방식이다.
 
컴파일 방식과 다르게 그때 그때 번역을 하면서 실행해야하므로 실행속도가 느린 편이다.
 
컴파일 방식과 다르게 그때 그때 번역을 하면서 실행해야하므로 실행속도가 느린 편이다.
또한 이는 소스코드를 바로 번역해서 실행하기 때문에 원본 소스코드가 그대로 노출된다는 단점이 있다.
+
또한 이는 소스코드를 바로 번역해서 실행하기 때문에 원본 소스코드가 그대로 노출된다는 단점이 있다. 하지만 운영체제에 종속되지 않는다는 장점이 있다.
하지만 운영체제에 종속되지 않는다는 장점이 있다.
+
이 소스코드를 읽는 프로그램은 각 운영체제마다 따로 만들어져 있기 때문에 이를 어디 들고가도 읽을 수 있다. 단적인 예로 인터넷 웹 페이지를 리눅스에서 읽던 안드로이드에서 읽던 윈도우에서 읽던 다 같이 읽을 수 있는 것이 예이다.<ref name="lazyig" />
이 소스코드를 읽는 프로그램은 각 운영체제마다 따로 만들어져 있기 때문에 이를 어디 들고가도 읽을 수 있다.
+
 
단적인 예로 인터넷 웹 페이지를 리눅스에서 읽던 안드로이드에서 읽던 윈도우에서 읽던 다 같이 읽을 수 있는 것이 예이다.
+
런타임 이전에 기계어로 프로그래밍 언어를 변환하는 컴파일 방식과 다르게, 런타임 이후에 줄단위로 해석하며 프로그램을 구동시킨다. 런타임에 직접 코드를 구동시키는 특징이 있기 때문에 실제 실행시간은 느리며, 대신 런타임에 실시간 디버깅 및 코드 수정이 가능하다. 또한 메모리를 별도로 할당받아 수행되지 않으며, 필요할 때 할당하여 사용한다. 이와 관련되어 코드의 흐름 자체도 실제 필요할 때, 실제 수행되어야하는 시점에 수행되기 때문에 덕타이핑(Duck Typing) 이 가능한 측면이 있으나, 반대로 정적 분석이 되지않는 트레이드오프(Trade off)를 갖고 있다.
 +
대표적인 인터프리터 언어로는 자바스크립트(Javascript)와 같은 스크립팅 언어들이 있다. 하지만, 스크립트 언어 뿐 아니라 컴파일 이후의 동작에서 인터프릿(Interpret)을 수행하는 언어들도 많이 존재한다.
 +
많은 프로그래밍 언어들의 인터프리터는 해석을 위한 가상 머신(Virtual Machine)을 두고, Machine 위에서 인터프릿을 수행하게 되는데, 이 때 해석의 기반이 되는 머신들이 OS 환경들을 지원해줌으로써, 해당 방식으로 인터프리터는 OS 및 플랫폼 에 종속되지않는 프로그램 구동이 가능하게 된다.<ref>Mark J, 〈[https://jins-dev.tistory.com/entry/Compiler-%EC%99%80-Interpreter-%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%B0%A8%EC%9D%B4%EC%A0%90 컴파일러(Compiler) 와 인터프리터(Interpreter) 의 개념과 차이점]〉, 《네이버 블로그》, 2019-08-08</ref>
  
 
=== 하이브리드 방식 ===
 
=== 하이브리드 방식 ===
37번째 줄: 40번째 줄:
 
하이브리드 방식은 우선 소스코드를 바이트 방식으로 변경해둔다. 그리고 이 바이트 코드를 한 줄씩 읽어서 실행하는 방식이다.
 
하이브리드 방식은 우선 소스코드를 바이트 방식으로 변경해둔다. 그리고 이 바이트 코드를 한 줄씩 읽어서 실행하는 방식이다.
 
일단 컴파일 방식에 비해서 속도도 느리지만, 소스코드 원본의 노출우려가 적다 라고 일반적으로 가르친다. (하지만 프로그램을 이용하면 금새 소스코드로 복원 된다.)
 
일단 컴파일 방식에 비해서 속도도 느리지만, 소스코드 원본의 노출우려가 적다 라고 일반적으로 가르친다. (하지만 프로그램을 이용하면 금새 소스코드로 복원 된다.)
하지만 운영체제에 종속되지 않는 장점이 있다. 소스코드를 바이트 코드로 변경해둔 파일을 각 운영체제에 있는 인터프리터가 읽어주는 방식이기 때문이다. 또한, 실행 속도가 인터프리터 방식에 비해서는 빠르다. 물론 컴파일 방식에 비해서는 느린 편이다.
+
하지만 운영체제에 종속되지 않는 장점이 있다. 소스코드를 바이트 코드로 변경해둔 파일을 각 운영체제에 있는 인터프리터가 읽어주는 방식이기 때문이다. 또한, 실행 속도가 인터프리터 방식에 비해서는 빠르다. 물론 컴파일 방식에 비해서는 느린 편이다.<ref name="lazyig" />
  
 
=== 비교 ===
 
=== 비교 ===
44번째 줄: 47번째 줄:
 
== 분류 ==
 
== 분류 ==
 
=== 절차 지향 프로그래밍 ===
 
=== 절차 지향 프로그래밍 ===
절차 지향은 다른 말로 표현하면 하향식 프로그래밍이라고도 한다. 프로그램이 흘러가는 방식이 제일 위에서 아래로 순서대로 흘러가는 이유에서 이다.
+
절차 지향은 다른 말로 표현하면 하향식 프로그래밍이라고도 한다. 프로그램이 흘러가는 방식이 제일 위에서 아래로 순서대로 흘러가는 이유에서 이다.<ref name="lazyig" />
  
 
=== 객체 지향 프로그래밍 ===
 
=== 객체 지향 프로그래밍 ===

2020년 9월 17일 (목) 14:17 판

소스코드(source code)란 컴파일(compile)되어 기계어로 번역되기 전의 원래 프로그램 코드를 말한다. 약칭 소스(source)라고도 한다. 소스코드에 간략한 설명과 메모를 적은 주석(comment)을 덧붙일 수 있다.

개요

소스 코드(source code) 또는 원시 코드란 컴퓨터 프로그램을 (사람이 읽을 수 있는) 프로그래밍 언어로 기술한 글을 말한다. 한 개, 또는 여러 개의 텍스트 파일로 구성되어 있다. 현대 소프트웨어 개발에서 기계어는 극히 일부 영역에서만 쓰이며, 대부분 고급 언어로 된 소스 코드를 컴파일하여 개발한다. 소프트웨어와 이에 동반하는 소스 코드는 일반적으로 크게 자유 소프트웨어와 사유 소프트웨어 가운데 하나의 라이선스를 지닌다. [1]

프로그래머가 특정한 컴퓨터 소프트웨어(프로그램)를 만들 때는 설계도가 필요하다. 이러한 설계도로 비유할 수 있는 것이 바로 소스 코드이다. 소스코드로 만든 프로그램을 실행하려면 프로그래머는 컴퓨터가 이해할 수 있는 기계어로 번역을 해야 한다. 소스 코드는 사람이 읽을 수 있는 형태이지만 컴퓨터가 이해하지는 못한다. 따라서 기계어로 번역을 해줘야 하는데 그 첫 번째 단계가 컴파일러라고 하는 컴퓨터 프로그램을 이용하여 소스코드를 목적코드로 만들어 주는 것이다.[2]

역사

프로그램 내장식 컴퓨터를 위한 최초의 프로그램들은 컴퓨터의 전면 패널 스위치를 통해 바이너리 형태로 입력되었다. 1세대 프로그래밍 언어는 소스 코드와 기계어 간의 구별이 없었다.

IBM이 최초로 기계와 함께 작업할 소프트웨어를 제공했을 때 소스 코드는 무료로 제공되었다. 당시 소프트웨어를 개발하고 지원하는 비용이 하드웨어의 가격에 포함되었다. 수십년 간 IBM은 1983년까지 소스 코드를 자사의 소프트웨어 제품 라이선스와 함께 배포하였다.[1]

목적

소스 코드는 주로 실행 프로그램을 만드는 과정을 입력하는 데 이용된다. 또, 사람들 사이에 알고리즘을 주고 받는 방식으로 이용되기도 한다. 프로그래머는 프로그래밍 기술을 배우려면 기존에 있던 소스코드를 살펴 보는 것도 도움이 된다. 개발자들 사이의 소스 공유는 프로그래밍 기술의 성숙 요소에 기여하는 역할을 하며 자주 인용된다. 일부 사람들은 소스 코드를 풍부한 화재로 생각한다. 소프트웨어를 다른 컴퓨터 플랫폼포팅하는 것은 일반적으로 소스 코드 없이는 불가능하다. 이진 번역과 원본 플랫폼의 애뮬레이션과 같이 이용할 수 있는 포팅 옵션들이 있다. 실행 프로그램의 디컴파일은 고급 언어에서나 어셈블리어로 소스 코드를 만들어 내는데 쓰인다.[3]

프로그래머는 프로그래밍 기술을 배우려면 기존에 있던 소스 코드를 살펴보는 것이 도움이 된다. 개발자들 사이의 소스 공유는 프로그래밍 기술의 성숙 요소에 기여하는 역할을 하며 자주 인용된다. 일부 사람들은 소스 코드를 풍부한 화재로 생각한다. 소프트웨어를 다른 컴퓨터 플랫폼에 포팅하는 것은 일반적으로 소스 코드 없이는 불가능하다. 이진 번역과 원본 플랫폼의 에뮬레이션과 같이 이용할 수 있는 포팅 옵션들이 있다. 실행 프로그램의 디컴파일은 고급 언어에서나 어셈블리어로 소스 코드를 만들어내는 데 쓰인다.[4]

활용

컴파일 방식

컴퓨터는 모든 명령을 CPU가 처리하고 CPU는 모든 명령을 0과 1로 이해하고 실행한다. CPU는 0과 1, 오직 두가지 경우 밖에 모르기 때문이다. 'A'라는 알파벳을 입력할 때 컴퓨터는 00110010와 같은 이진코드로 해석하고 명령을 처리한다. 즉, 우리의 언어는 컴퓨터가 이해하지 못하므로 컴퓨터가 이해할 수 있는 통역사가 필요하다. 여기에서 말하는 통역이 바로 컴파일이다.[5]

컴파일 방식은 소스 코드를 바로 컴퓨터가 바로 읽을 수 있도록 기계어로 변환 시키는 언어이다. 컴파일 방식은 기계어로 바로 번역시켜두고 실행하기 때문에 다른 방식에 비해서 실행 속도가 빠르다. 기계어로 번역이 되어버렸기 때문에 소스코드의 원본이 노출될 우려가 매우 적다. 거의 없다고 보면 된다. [6]

인터프리터 방식

인터프리터(Interpreter) 방식은 소스 코드를 두고 그걸 한 줄씩 읽어가면서 실행하는 방식이다. 컴파일 방식과 다르게 그때 그때 번역을 하면서 실행해야하므로 실행속도가 느린 편이다. 또한 이는 소스코드를 바로 번역해서 실행하기 때문에 원본 소스코드가 그대로 노출된다는 단점이 있다. 하지만 운영체제에 종속되지 않는다는 장점이 있다. 이 소스코드를 읽는 프로그램은 각 운영체제마다 따로 만들어져 있기 때문에 이를 어디 들고가도 읽을 수 있다. 단적인 예로 인터넷 웹 페이지를 리눅스에서 읽던 안드로이드에서 읽던 윈도우에서 읽던 다 같이 읽을 수 있는 것이 예이다.[6]

런타임 이전에 기계어로 프로그래밍 언어를 변환하는 컴파일 방식과 다르게, 런타임 이후에 줄단위로 해석하며 프로그램을 구동시킨다. 런타임에 직접 코드를 구동시키는 특징이 있기 때문에 실제 실행시간은 느리며, 대신 런타임에 실시간 디버깅 및 코드 수정이 가능하다. 또한 메모리를 별도로 할당받아 수행되지 않으며, 필요할 때 할당하여 사용한다. 이와 관련되어 코드의 흐름 자체도 실제 필요할 때, 실제 수행되어야하는 시점에 수행되기 때문에 덕타이핑(Duck Typing) 이 가능한 측면이 있으나, 반대로 정적 분석이 되지않는 트레이드오프(Trade off)를 갖고 있다. 대표적인 인터프리터 언어로는 자바스크립트(Javascript)와 같은 스크립팅 언어들이 있다. 하지만, 스크립트 언어 뿐 아니라 컴파일 이후의 동작에서 인터프릿(Interpret)을 수행하는 언어들도 많이 존재한다. 많은 프로그래밍 언어들의 인터프리터는 해석을 위한 가상 머신(Virtual Machine)을 두고, Machine 위에서 인터프릿을 수행하게 되는데, 이 때 해석의 기반이 되는 머신들이 OS 환경들을 지원해줌으로써, 해당 방식으로 인터프리터는 OS 및 플랫폼 에 종속되지않는 프로그램 구동이 가능하게 된다.[7]

하이브리드 방식

하이브리드 방식은 컴파일 방식과 인터프리터 방식의 장점을 섞어놓은 언어이다. 하이브리드 방식은 우선 소스코드를 바이트 방식으로 변경해둔다. 그리고 이 바이트 코드를 한 줄씩 읽어서 실행하는 방식이다. 일단 컴파일 방식에 비해서 속도도 느리지만, 소스코드 원본의 노출우려가 적다 라고 일반적으로 가르친다. (하지만 프로그램을 이용하면 금새 소스코드로 복원 된다.) 하지만 운영체제에 종속되지 않는 장점이 있다. 소스코드를 바이트 코드로 변경해둔 파일을 각 운영체제에 있는 인터프리터가 읽어주는 방식이기 때문이다. 또한, 실행 속도가 인터프리터 방식에 비해서는 빠르다. 물론 컴파일 방식에 비해서는 느린 편이다.[6]

비교

분류

절차 지향 프로그래밍

절차 지향은 다른 말로 표현하면 하향식 프로그래밍이라고도 한다. 프로그램이 흘러가는 방식이 제일 위에서 아래로 순서대로 흘러가는 이유에서 이다.[6]

객체 지향 프로그래밍

객체 지향 역시 다른 말로 표현하는 말이 있다. 상향식 프로그래밍이라고 한다. 일단 상향식 프로그래밍이라는 말에 대해서 이야기 하기전에 객체가 무엇인지에 대해서 다뤄보아야 한다.[6]


각주

  1. 1.0 1.1 소스 코드 위키백과 - https://ko.wikipedia.org/wiki/%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C
  2. Code.D, 〈소스코드와 오픈소스〉, 《티스토리》, 2017-02-13
  3. 시큐비엠, 〈소스코드란?〉, 《티스토리》, 2018-10-01
  4. 소스 코드 리브레 위키- https://librewiki.net/wiki/%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C
  5. Mark J, 〈컴파일이란〉, 《네이버 블로그》, 2017-05-11
  6. 6.0 6.1 6.2 6.3 6.4 lazyig, 〈프로그래밍 언어의 종류〉, 《개인 블로그》, 2018-10-01
  7. Mark J, 〈컴파일러(Compiler) 와 인터프리터(Interpreter) 의 개념과 차이점〉, 《네이버 블로그》, 2019-08-08

참고자료

같이 보기


  의견.png 이 소스코드 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.