2023. 8. 20. 14:38ㆍJAVA
빌드와 컴파일 많이 들어서 익숙한 단어들이지만 정확히 어떤 뜻인지는 잘 알지 못 했다.
이번 기회를 통해서 두 단어의 차이에 대해서 알아보려고 한다!!
컴파일
컴파일의 정의는 개발자가 작성한 소스코드를 바이너리 코드로 변환해주는 것이다.
하지만, JAVA에서는 컴파일러에의해 소스파일(.java)가 목적파일(.class)로 변환될 때 가상머신(JVM)이 인식할 수 있는 바이트 코드로 변환된다!
💡
바이너리 코드란? CPU가 이해할 수 있는 언어이다.(0과 1로 구성된 이진코드)
바이트 코드란? 가상머신이 이해할 수 있는 언어이다.(0과 1로 구성된 이진 코드)
링크
컴파일이 각 소스파일(.java)들을 목적파일(.class)로 변환해주는 것이라면, 링크는 이들을 연결해주는 것이다.
개발을 할 때 다른 소스파일에 있는 메서드를 호출하는 경험을 한번쯤은 해봤을 것이다.
각 소스파일들은 다른 소스파일들에게 의존하기때문에 서로를 연결해주는 작업이 필요한데 이 작업을 링크라고 부른다.
정리하자면, 여러개의 소스파일들을 서로 연결시켜줘서 컴파일된 결과물이 최종적으로 실행 가능한 파일들이 되게끔하는 것이다!
자바의 경우에는 JVM이 프로그램 실행 도중 필요한 클래스를 찾아서 클래스패스에 로드해주는 데 이것이 동적 링크의 예이다.
빌드
소스코드 파일(.java)을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물이다.
빌드의 단계 중에는 컴파일이 포함되어 있는 데, 빌드의 부분집합이 컴파일이라고 할 수 있다!
(빌드 == 컴파일 + 링크)
최종적으로 필자가 궁금해하던, IntelliJ에서 Run 버튼이 어떻게 어플리케이션을 실행시키는 지에대해서 알게 되었다.
Run 버튼은 소스코드와 리소스파일들이 컴파일되고 이를 링크하여 만들어진 실행파일을 실행하는 과정을 간편화 한 것이다!
'JAVA' 카테고리의 다른 글
불변 객체와 가비지 컬렉션의 관계 (0) | 2024.08.22 |
---|---|
ArrayList는 어떻게 용량을 관리할까? (0) | 2023.07.24 |
불변 객체(Immnutable Object)란?? (1) | 2023.05.27 |
String vs StringBuilder vs StringBuffer (0) | 2023.05.27 |
final에 대하여 (4) | 2023.05.26 |