그 놀라운 이야기들...

살아 숨쉬는 코드들을 만들어 봅니다. 조심하세요. 날아갈 수도 있으니...

삶이 어떻게 더... 완벽해~

개발이야기/정보

[개발상식] 개발과 관련된 파일 형식들…

신코더 2022. 3. 8. 22:47
반응형


1. 소스 파일(.c, .cpp, .java)

   소스 파일은 각 프로그래밍 언어의 문법과 형식을 따르는 코드들이 텍스트 방식으로 쓰여진 파일이다. 이 자체로 실행 될 수 있는 파일은 아니고, 컴파일과 링크라는 과정을 거쳐야 각 운영체제에서 실행할 수 있는 바이너리 실행파일이 되는 것이다.
프로그램이 빌드되고 실행파일이 만들어지기 위해서는 최소한 1개의 소스파일이 존재해야한다. 그러다 구현되는 함수들이 늘어나고 프로그램 규모가 커지면 소스파일들의 수도 늘어나게 된다. 이 때 구현된 함수들의 특성별로 각각의 소스파일에 나누어 담게 된다.


2. 헤더파일(.h, .hpp)

   개발 초기애는 소스파일들만 가지고도 개발이 가능할 수도 있다. 그러나 개발 규모가 너무 커지게 되면 하나의 함수를 여러 모듈들이 공유해야하는 사항들도 많아지고, 일부는 라이브러리로 미리 빌드하여 사용해야하는 상황들도 발생한다. 또한 내가 개발한 코드를 공개하지 않고서도 다른 개발자들에게 기능을 제공할 방법도 필요하게 된다. 이럴때 필요한 파일이 헤더 파일파일이다.
   헤더파일은 공유를 목적으로 한다. 어떤 정의를 여러 모듈에서 사용할 때 한 개의 헤더파일에 이를 정의해 놓고 여러 소스코드에서 include 해 사용할 수있다. 통상적으로는 1개의 소스파일에 1개의 헤더파일을 만들게 된다. 이는 해당 소스파일에 구현되어 있는 함수나 정의들을 다른 모듈에서 사용할 수 있게 하기 위함이다. 단 C의 경우 main()함수가 포함되어 있는 소스(.c)파일은 헤더파일이 필요할 일이 없다. 헤더파일은 주로  C, C++, Objectiv-C 등에서만 쓰이고 다른 프로그램 언어에서는 헤더파일 자체가 없는 경우가 대부분이다.


3. 오브젝트(.o, .obj)

   C언어로 코딩한 파일(.c)을 실행 가능한 파일로 만드는데에는 2가지 단계가 있다. 바로 컴파일과 링크다. (이 둘을 합쳐서 빌드라고 한다.) 이 두가지 단계 중 컴파일 후 만들어 지는 결과물이 바로 오브젝트 파일이다. 오브젝트 파일은 컴파일을 마치고 실행 가능한 바이너리 코드들을 내부에 담고는 있으나 그 자체만으로는 실행이 불가능하다. 반드시 링크 과정을 거쳐야만 운영체제에서 실행 가능한 파일이 된다. 링크는 여러개의 오브젝트 파일들과 라이브러리 등을 하나의 파일로 합치면서 운영체제에 의해 메모리에 로드되었을때 main()함수가 실행될 수 있는 구조로 만들어 준다. 그러므로 main()함수만 있다면 오브젝트 파일 하나만으로도 링크를 통해서 실행파일을 만들수 있다. 간단히 말해 오브젝트 파일은 .c파일을 컴파일해 놓은 파일로서 다른 오브젝트 파일들과 합쳐질(링크) 준비가 되어있는 파일이다.


4. 정적 라이브러리 (.a, .lib)

   라이브러리 파일은 한 개 이상의 오브젝트 파일들을 묶어놓은 파일이다. 이 파일은 실행이 되진않고, 실행파일을 만들때 다른 오브젝트 파일들과 같이 링크된다. 이 파일은 주로 코드를 재활용하거나 기능을 공유할 목적으로 만들어 진다. 보통은 관련 헤더파일(.h)들과 함께 재공된다. 이 파일은 링크될때 .lib 파일이 전부 실행파일에 포함되는 것은 아니고 실제 사용되어진 함수가 속한 오브젝트 부분만 포함되어진다.

 

5. 동적 라이브러리 (.dylib, .dll)

   동적 라이브러리는 정적 라이브러리와는 좀 다르게 동작한다. 정적 라이브러리 같이 링크시 사용된 오브젝트가 실행파일에 실제 포함되는 게 아니라 동적 라이브러리에 대한 정보(참조)만 포함하게된다. 그리고 동적 라이브러리는 메모리에 상주 하면서 여러 실행 프로그램들이 공유하게된다. 각각의 실행 프로그램들은 필요시에만 메모리에 상주해 있는 라이브러리에서 함수를 실행한다. 동적 라이브러리는 링크시 가상의 정적 라이브러리(.lib)로 링크하도록 되어있다. 그래서 보통은 동적 라이브러리를 배포할 때에는 링크용 정적 라이브러리도 같이 배포하는게 일반적이다.

 

6. 실행파일(.com, .exe)

   프로그래머가 각 언어의 문법에 맞게 텍스트로 기술한 프로그램은 컴파일과 링크 과정을 거쳐 실행 가능한 파일로 변환된다. 어떤 언어로 개발이 되었든 같은 오에스에서 동작하는 실행파일의 구조는 모두 같다고 보면 된다. 간혹 텍스트 파일인데도 실행파일처럼 동작하는 파일들(.sh, .bat 등)이 있다. 이들은 스크립트 혹은 배치파일이라는 형식으로, 그 파일 자체가 실행되는개 아니라 OS가 해석을 해서 관련된 실행파일들을 순서와 조건에 맞게 실행해 주거나, 아니면 별도의 실행파일이 해당 텍스트의 내용을 실시간으로 번역하여 해당 기능들을 동작시키는 방식이다.



'개발이야기 > 정보' 카테고리의 다른 글

[개발상식] 플랫폼에 따른 개발 환경  (0) 2022.03.08