일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ApplicationContext
- 컴퓨터시스템
- lambda
- springwebmvc
- JPA
- 메이븐
- IOC
- Kotlin for Java Developers
- 자바
- 프록시
- 토비의스프링3.1
- 링킹
- Spring
- ORM
- 빌드툴
- hibernate
- 토비의스프링
- java
- 클린코드
- Immutable
- exception
- String
- FunctionalInterfaces
- AutoConfiguration
- 링커
- DesignPattern
- springboot
- gradle
- beanfactory
- DispatcherServlet
- Today
- Total
엔지니어로 가는 길
[Linking] 링커 / 링킹이란 무엇인가 본문
이번에는 링킹이 무엇인지, 링커란 무엇인지에 대해 간략히 알아보도록 한다.
Linking(링킹)은 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업이다. 이 파일이 메모리에 로딩되어 실행된다. 링크는 컴파일시에 수행되는 경우도 있고, 로딩시에 수행되는 경우도 있고, 실행시에 수행되는 경우도 있다.
Linker(링커)란 링킹을 담당하는 프로그램이다. 링커는 소프트웨어 개발에서 독립적인 컴파일을 가능하게 하는 아주 중요한 역할을 담당한다. 링커 덕분에 큰 규모의 응용프로그램을 한 개의 소스 파일로 구성하는 대신 별도로 수정할 수 있고, 컴파일할 수 있는 보다 관리할 만한 규모의 더 작은 모듈들로 나눌 수 있다. 즉, 아주 거대한 프로그램을 하나의 소스 파일이 아니라 수많은 소스 파일로 모듈화하여 개발을 진행할 수 있는 것이다. 링커 덕분에 우리는 모듈 중에 한 개를 변경할 때, 다른 파일들을 재컴파일할 필요 없이 이 파일만을 간단히 재컴파일하고 이를 다시 링크하여 변경사항을 적용할 수 있다.
잘 모르겠으므로 이해를 돕기 위하여 프로그램이 실행되는 과정부터 다시 살펴보자.
프로그램은 먼저 사람(프로그래머)에 의해 소스코드로 작성된다. 하지만 소스코드는 사람의 편의만을 생각한 것으로 컴퓨터가 이해할 수 없다. 따라서 사람이 작성한 코드를 컴퓨터가 이해할 수 있도록 번역해주어야 하는데, 컴파일러가 이 역할을 한다.
작성한 프로그램이 다른 프로그램이나 다른 프로그램의 라이브러리를 사용하는 경우는 매우 흔하다. 이 경우에 작성한 프로그램이 정상적으로 실행되기 위해서는 프로그램에서 사용한 다른 프로그램이나 다른 프로그램의 라이브러리를 가져와야 한다. 생각해보면 매우 당연하다. 작성한 프로그램에서 A라는 외부의 함수를 사용했는데, 실행할 때 A가 어떤 함수인지를 알 수 없으면 프로그램이 정상적으로 실행될 수 없기 때문이다!
링킹이란 컴파일 이후, 실행하기 이전에 작성한 프로그램이 사용하는 다른 프로그램이나 라이브러리를 가져와 연결하는 과정을 말한다. 링킹은 정적 링킹과 동적 링킹, 두 가지 방식이 있는데 이는 다음에 알아보기로 한다.
참고자료
computer systems: a programmer's perspective 3rd
https://cs-fundamentals.com/tech-interview/c/difference-between-static-and-dynamic-linking.php
'프로그래밍 > 전공서적' 카테고리의 다른 글
메모리의 계층구조와 캐시 그리고 지역성 (2) | 2020.11.21 |
---|---|
(C언어)프로그램이 실행되는 과정을 살펴보자 (0) | 2020.08.23 |
[Linking] 정적 링킹과 동적 링킹의 차이 (0) | 2020.01.05 |