[TIL] 11μ›” 3일: Build, Compile

JungΒ·2021λ…„ 11μ›” 3일
0

TIL

λͺ©λ‘ 보기
42/77
post-thumbnail

맀일맀일 TIL을 μž‘μ„±ν•˜λŠ” 것이 슬슬 νž˜λ“€μ–΄μ§€κΈ° μ‹œμž‘ν•œλ‹€... λΌλŠ” 생각이 λ“œλŠ” μˆœκ°„ λ‚΄ 머리λ₯Ό 주먹으둜 콩 ν•˜κ³  λ²Œμ„ 주자. μ§€κΈˆμ€ νž˜λ“€μ§€λ§Œ 미래의 λ‚΄κ°€ 였늘의 λ‚˜μ—κ²Œ 감사해 ν•  것이닀. 꾸쀀함을 μžƒμ§€ 말자 !

Build

μ†ŒμŠ€ μ½”λ“œ νŒŒμΌμ„ μ»΄ν“¨ν„°λ‚˜ νœ΄λŒ€ν°μ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” 독립(standalone) μ†Œν”„νŠΈμ›¨μ–΄ κ°€κ³΅λ¬Όλ‘œ λ³€ν™˜ν•˜λŠ” 과정을 λ§ν•˜κ±°λ‚˜ 그에 λŒ€ν•œ 결과물을 μΌμ»«λŠ”λ‹€. μ†Œν”„νŠΈμ›¨μ–΄ λΉŒλ“œμ— μžˆμ–΄ κ°€μž₯ μ€‘μš”ν•œ 단계듀 κ°€μš΄λ° ν•˜λ‚˜λŠ” μ†ŒμŠ€ μ½”λ“œ 파일이 μ‹€ν–‰ μ½”λ“œλ‘œ λ³€ν™˜λ˜λŠ” 컴파일 과정이닀.

Compile

인간이 이해할 수 μžˆλŠ” κ³ κΈ‰ μ–Έμ–΄λ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€ μ½”λ“œλ₯Ό 컴퓨터가 이해할 수 μžˆλŠ” 기계어 λ˜λŠ” λ°”μ΄νŠΈμ½”λ“œλ‘œ λ²ˆμ—­ν•΄ μ£ΌλŠ” 것이닀.
μ›μ‹œμ½”λ“œμ—μ„œ λͺ©μ  μ½”λ“œ(λͺ©μ  파일)둜 λ°”κΎΈλŠ” 것이 컴파일이고, λͺ©μ  νŒŒμΌμ„ μ‹€ν–‰ 파일둜 λ°”κΎΈλŠ” 것이 링크닀. μ›μ‹œμ½”λ“œλŠ” cμ–Έμ–΄λ‚˜ java, 파이썬 같은 μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” μ–Έμ–΄λ₯Ό λ§ν•˜κ³  λͺ©μ  νŒŒμΌμ€ 컴퓨터가 이해할 수 μžˆλŠ” μ–Έμ–΄λ₯Ό λ§ν•œλ‹€. μ‹€ν–‰ νŒŒμΌλ„ λ§ˆμ°¬κ°€μ§€λ‘œ 컴퓨터가 이해할 수 μžˆλŠ” μ–Έμ–΄λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. μ»΄νŒŒμΌμ— λŒ€ν•΄ μ•Œμ§€ λͺ»ν•œ μ‚¬λžŒλ“€μ΄ 많이 μ˜€ν•΄ν•˜κ³  μžˆλŠ” 뢀뢄이 μ†ŒμŠ€ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  μ‹€ν–‰ νŒŒμΌμ„ λ§Œλ“œλŠ” 것을 컴파일이라고 μƒκ°ν•˜μ§€λ§Œ 이것은 μ»΄νŒŒμΌλŸ¬κ°€ ν•˜λŠ” 역할일 뿐, μ»΄νŒŒμΌμ΄λΌλŠ” κ°œλ…μ€ μ›μ‹œμ½”λ“œμ—μ„œ λͺ©μ  파일둜 λ°”κΎΈλŠ” 것이닀. λͺ©μ  νŒŒμΌμ€ λ‹¨μˆœνžˆ 컴퓨터가 이해할 수 μžˆλŠ” 파일(μ½”λ“œ)일 뿐 μ‹€ν–‰ν•  μˆ˜λŠ” μ—†μœΌλ©° 이것을 링컀가 μ‹€ν–‰ κ°€λŠ₯ν•  파일둜 λ§Œλ“œλŠ”λ° 이 μ‹€ν–‰νŒŒμΌμ„ .exe파일이라고 λΆ€λ₯Έλ‹€.

Build vs Compile

λΉŒλ“œλŠ” 기본적으둜 μ‹€ν–‰ νŒŒμΌμ„ λ§Œλ“œλŠ” 것을 μ˜λ―Έν•œλ‹€. 사싀상 ν•˜λ‚˜μ˜ μ†ŒμŠ€ 파일이 ν•˜λ‚˜μ˜ μ‹€ν–‰ 파일둜 μƒμ„±λ˜κΈ° μœ„ν•΄μ„œλŠ” 컴파일 κ³Όμ •κ³Ό 링크 과정을 거쳐야 ν•œλ‹€. λ§ν¬λΌλŠ” 것은 말 κ·ΈλŒ€λ‘œ μ‹€ν–‰νŒŒμΌλ‘œ λ§Œλ“œλŠ”λ° ν•„μš”ν•œ κΈ°λŠ₯듀을 컴파일된 νŒŒμΌμ— μ—°κ²°μ‹œν‚¨λ‹€λŠ” μ˜λ―Έλ‹€. λ”°λΌμ„œ .cνŒŒμΌμ„ μ»΄νŒŒμΌν•œ 후에 μƒμ„±λœ 였브젝트 νŒŒμΌλ“€μ„ μ΄μš©ν•˜μ—¬ 링크 μž‘μ—…μ„ ν•΄μ•Ό μ‹€ν–‰ 파일인 .exe파일이 μƒμ„±λœλ‹€. λΉ„μ£Όμ–Ό C++μ—μ„œλŠ” λΉŒλ“œλ₯Ό ν†΅ν•΄μ„œ 링크 과정을 μ‹€ν–‰ν•œλ‹€. λ§Œμ•½ .c파일이 컴파일 λ˜μ–΄μžˆμ§€ μ•Šμ€ μƒνƒœμ—μ„œ λΉŒλ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ 컴파일과 링크λ₯Ό λͺ¨λ‘ μ‹€ν–‰ν•˜λ©° 이미 .obj둜 컴파일된 파일이 μ‘΄μž¬ν•˜λ©΄ λΉŒλ“œλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ 컴파일 μž‘μ—…μ„ μƒλž΅ν•˜κ³  링크 μž‘μ—…μ„ ν•œ 후에 μ‹€ν–‰νŒŒμΌμ„ μƒμ„±ν•œλ‹€. κ·ΈλŸ¬λ‚˜ 컴파일된 νŒŒμΌμ€ μ‹€ν–‰νŒŒμΌμ΄ μ•„λ‹ˆλ‹€. λ‹€μ‹œ λ§ν•˜λ©΄ μš°λ¦¬κ°€ μœˆλ„μš° ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” .exe파일의 ν˜•νƒœκ°€ μ•„λ‹ˆλΌλŠ” μ˜λ―Έλ‹€. λΉ„μ₯¬μ–Ό C++μ—μ„œλŠ” .c둜 λ˜μ–΄μžˆλŠ” μ†ŒμŠ€μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜λ©΄ .obj파일둜 λ³€ν™˜ν•œλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ λ¦¬λˆ…μŠ€λ‚˜ μœ λ‹‰μŠ€μ—μ„œλ„ .c둜 λ˜μ–΄μžˆλŠ” μ†ŒμŠ€μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜λ©΄ .o파일둜 λ³€ν™˜ν•œλ‹€. 이와 같은 .objνŒŒμΌμ΄λ‚˜ .o와 같은 νŒŒμΌλ“€μ„ 였브젝트(λͺ©μ ) 파일이라고 λΆ€λ₯Έλ‹€.

Java Compiler

μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” μžλ°”λ₯Ό 가지고 μž‘μ„±ν•œ μžλ°” μ†ŒμŠ€ μ½”λ“œλ₯Ό μžλ°” 가상 머신이 이해할 수 μžˆλŠ” μžλ°” λ°”μ΄νŠΈ μ½”λ“œλ‘œ λ³€ν™˜ν•œλ‹€.
μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” μžλ°”λ₯Ό μ„€μΉ˜ν•˜λ©΄ javac.exeλΌλŠ” μ‹€ν–‰ 파일 ν˜•νƒœλ‘œ μ„€μΉ˜λœλ‹€.

Java bytecode

μžλ°” λ°”μ΄νŠΈ μ½”λ“œ(Java bytecode)λž€ μžλ°” 가상 머신이 이해할 수 μžˆλŠ” μ–Έμ–΄λ‘œ λ³€ν™˜λœ μžλ°” μ†ŒμŠ€ μ½”λ“œλ₯Ό μ˜λ―Έν•œλ‹€.
μžλ°” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ³€ν™˜λ˜λŠ” μ½”λ“œμ˜ λͺ…λ Ήμ–΄ 크기가 1λ°”μ΄νŠΈλΌμ„œ μžλ°” λ°”μ΄νŠΈ μ½”λ“œλΌκ³  뢈리고 μžˆλ‹€.
μ΄λŸ¬ν•œ μžλ°” λ°”μ΄νŠΈ μ½”λ“œμ˜ ν™•μž₯μžλŠ” .class이닀.
μžλ°” λ°”μ΄νŠΈ μ½”λ“œλŠ” μžλ°” 가상 λ¨Έμ‹ (JVM, Java Virtual Machine)만 μ„€μΉ˜λ˜μ–΄ 있으면, μ–΄λ–€ μš΄μ˜μ²΄μ œμ—μ„œλΌλ„ 싀행될 수 μžˆλ‹€.

JVM

μžλ°” 가상 λ¨Έμ‹ (JVM, Java Virtual Machine)μ΄λž€ μžλ°” λ°”μ΄νŠΈ μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œν‚€κΈ° μœ„ν•œ κ°€μƒμ˜ 기계라고 ν•  수 μžˆλ‹€.

μžλ°”λ‘œ μž‘μ„±λœ λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ€ μžλ°” 가상 λ¨Έμ‹ μ—μ„œλ§Œ 싀행될 수 μžˆμœΌλ―€λ‘œ, μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ μžλ°” 가상 머신이 μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

μ°Έκ³ 
β€œμ†Œν”„νŠΈμ›¨μ–΄ λΉŒλ“œ.” Wikipedia, Wikimedia Foundation, 10 July 2021, https://ko.wikipedia.org/wiki/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EB%B9%8C%EB%93%9C.

β€œμ»΄νŒŒμΌ.” 컴파일 - ν•΄μ‹œλ„·, http://wiki.hash.kr/index.php/%EC%BB%B4%ED%8C%8C%EC%9D%BC.

β€œμ½”λ”©κ΅μœ‘ ν‹°μ”¨ν”ΌμŠ€μΏ¨.” TCPschool, http://www.tcpschool.com/java/java_intro_programming.

profile
97kim.github.io

0개의 λŒ“κΈ€