Post

[Java] Prologue

πŸ“Œ λ“€μ–΄κ°€λ©°

μ§§μ•˜λ˜ C μ–Έμ–΄ ν¬μŠ€νŒ…μ„ 마치고, 이제 Javaλ₯Ό μ‹œμž‘ν•œλ‹€. μ‰¬μš΄ 길은 μ•„λ‹ˆκ² μ§€λ§Œ 그만큼 μ–»μ–΄κ°ˆ 게 λ§Žμ„ 거라 λ―ΏλŠ”λ‹€. 이번 κΈ€μ—μ„œλŠ” Javaκ°€ μ–΄λ–€ 언어인지, 그리고 JVMΒ·JREΒ·JDK의 ꡬ성과 κΈ°λ³Έ ν”„λ‘œμ νŠΈ ꡬ쑰λ₯Ό μ •λ¦¬ν•œλ‹€.


1. Javaλž€?

썬 λ§ˆμ΄ν¬λ‘œμ‹œμŠ€ν…œμ¦ˆ(Sun Microsystems)μ—μ„œ 1995년에 κ°œλ°œν•œ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ, μ°½μ‹œμžλŠ” μ œμž„μŠ€ 고슬링(James Gosling)이닀.

ν•­λͺ©λ‚΄μš©
개발썬 λ§ˆμ΄ν¬λ‘œμ‹œμŠ€ν…œμ¦ˆ, 1995λ…„
μ°½μ‹œμžμ œμž„μŠ€ 고슬링
μ €μž‘κΆŒ2010λ…„ 였라클이 썬을 μΈμˆ˜ν•˜λ©° μ†Œμœ 
λΌμ΄μ„ μŠ€OpenJDK(GPL2) / Oracle JDK(μƒμ—…μš©, 2019.1~ μœ λ£Œν™” κ°•ν™”)
μ„±ν–₯C#κ³Ό λ¬Έλ²•μ μœΌλ‘œ μœ μ‚¬

C++과의 차이 β€” C++은 κΈ°μ‘΄ C에 객체지ν–₯을 μ–Ήλ‹€ λ³΄λ‹ˆ μ €μˆ˜μ€€Β·κ³ μˆ˜μ€€ κ°œλ…μ΄ μΆ©λŒν•˜λŠ” 뢀뢄이 λ§Žμ•˜λ‹€. 반면 JavaλŠ” μ²˜μŒλΆ€ν„° 객체지ν–₯ μ–Έμ–΄λ‘œ μ„€κ³„λ˜μ—ˆλ‹€. λ‹€λ§Œ μ›μ‹œ νƒ€μž…(primitive)은 객체둜 μ·¨κΈ‰ν•˜μ§€ μ•Šμ•„, λͺ¨λ“  것을 객체둜 λ³΄λŠ” 순수 객체지ν–₯ μ–Έμ–΄(Python, Ruby)μ™€λŠ” 쑰금 λ‹€λ₯΄λ‹€.


2. Java의 핡심 νŠΉμ§• β€” ν”Œλž«νΌ 독립성

Java의 κ°€μž₯ 큰 νŠΉμ§•μ€ ν”Œλž«νΌμ— λ…λ¦½μ μ΄λΌλŠ” 점이닀.

1
2
3
4
[C/C++]  μ†ŒμŠ€μ½”λ“œ β”€β”€μ»΄νŒŒμΌβ”€β”€β–Ί 기계어(ν”Œλž«νΌ 쒅속)

[Java]   μ†ŒμŠ€μ½”λ“œ β”€β”€μ»΄νŒŒμΌβ”€β”€β–Ί λ°”μ΄νŠΈμ½”λ“œ(.class) ──JVM──► 기계어
                                   ↑ μ–΄λŠ OSμ—μ„œλ“  λ™μΌν•œ .class

C/C++ μ»΄νŒŒμΌλŸ¬λŠ” μ†ŒμŠ€λ₯Ό κ³§λ°”λ‘œ κΈ°κ³„μ–΄λ‘œ μ»΄νŒŒμΌΒ·λ§ν¬ν•˜μ§€λ§Œ, μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” λ°”μ΄νŠΈμ½”λ“œ(.class)λ₯Ό μƒμ„±ν•œλ‹€. 이 λ°”μ΄νŠΈμ½”λ“œλ₯Ό 읽어 각 ν”Œλž«νΌμ˜ κΈ°κ³„μ–΄λ‘œ λ°”κΏ” μ‹€ν–‰ν•˜λŠ” 것이 JVM이닀. κ·Έλž˜μ„œ β€œν•œ 번 μž‘μ„±ν•˜λ©΄ μ–΄λ””μ„œλ‚˜ μ‹€ν–‰(Write Once, Run Anywhere)”이 κ°€λŠ₯ν•˜λ‹€.


3. JVM Β· JRE Β· JDK

μžλ°”λŠ” μ„Έ κ°€μ§€ ꡬ성 μš”μ†Œλ‘œ 이루어진닀. JDKκ°€ JREλ₯Ό, JREκ°€ JVM을 ν¬ν•¨ν•˜λŠ” ꡬ쑰닀.

1
2
3
4
5
6
7
8
9
10
11
12
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ JDK (Java Development Kit)               β”‚
β”‚   κ°œλ°œμ— ν•„μš”ν•œ 도ꡬ(컴파일러 λ“±) 포함     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ JRE (Java Runtime Environment)     β”‚ β”‚
β”‚  β”‚   싀행에 ν•„μš”ν•œ λΌμ΄λΈŒλŸ¬λ¦¬Β·νŒŒμΌλ“€    β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚
β”‚  β”‚  β”‚ JVM (Java Virtual Machine)   β”‚  β”‚ β”‚
β”‚  β”‚  β”‚   Java ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰        β”‚  β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
ꡬ성역할
JVMJava ν”„λ‘œκ·Έλž¨μ„ μ‹€μ œλ‘œ μ‹€ν–‰
JREJVM 싀행에 ν•„μš”ν•œ 라이브러리·파일 보유
JDKJRE + 개발 도ꡬ(컴파일러 λ“±) 보유

πŸ’‘ λ‚˜λŠ” JDK 8을 μ„€μΉ˜ν•˜κ³ , IDE둜 Eclipse Photon을 μ„ νƒν–ˆλ‹€. ν•˜λ‚˜μ˜ μ°½μ—μ„œ μ—¬λŸ¬ ν”„λ‘œμ νŠΈλ₯Ό 관리할 수 μžˆμ–΄ νŽΈλ¦¬ν•˜λ‹€.


4. μžλ°”μ˜ κΈ°λ³Έ ꡬ쑰

Java μ½”λ“œλŠ” λ‹€μŒκ³Ό 같은 계측 ꡬ쑰둜 μ‘°μ§λœλ‹€.

1
ν”„λ‘œμ νŠΈ ─► νŒ¨ν‚€μ§€ ─► 클래슀 ─► λ©”μ†Œλ“œ ─► μ†ŒμŠ€μ½”λ“œ

1

day01 ν”„λ‘œμ νŠΈμ— day01 νŒ¨ν‚€μ§€λ₯Ό λ§Œλ“€κ³ , PrintTest 클래슀 μ•ˆμ˜ main λ©”μ†Œλ“œμ— μ•„λž˜ μ½”λ“œλ₯Ό λ„£μ–΄ 이름을 좜λ ₯ν•΄ 보자.

1
System.out.println("신동희");

πŸ’‘ μ‹€ν–‰ λ‹¨μΆ•ν‚€λŠ” C(Visual Studio)와 달리 Ctrl + F11이닀.

2

μ½˜μ†”μ— 신동희가 좜λ ₯됐닀.


πŸ“ 정리

1
2
3
4
5
Java κ°œμš”
β”œβ”€ 정체    1995λ…„ 썬, μ œμž„μŠ€ 고슬링, 객체지ν–₯ μ–Έμ–΄
β”œβ”€ νŠΉμ§•    ν”Œλž«νΌ 독립 (μ†ŒμŠ€β†’λ°”μ΄νŠΈμ½”λ“œ(.class)β†’JVM→기계어)
β”œβ”€ ꡬ성    JDK βŠƒ JRE βŠƒ JVM
└─ ꡬ쑰    ν”„λ‘œμ νŠΈ βŠƒ νŒ¨ν‚€μ§€ βŠƒ 클래슀 βŠƒ λ©”μ†Œλ“œ βŠƒ μ†ŒμŠ€μ½”λ“œ
κ°œλ…ν•œ 쀄 μ •μ˜
λ°”μ΄νŠΈμ½”λ“œν”Œλž«νΌ 독립적인 쀑간 μ½”λ“œ(.class)
JVMλ°”μ΄νŠΈμ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 가상 λ¨Έμ‹ 
JREJVM + μ‹€ν–‰ 라이브러리
JDKJRE + 개발 도ꡬ

μ•žμœΌλ‘œ 배울 λ‚΄μš©μ΄ λ§Žμ§€λ§Œ, 그만큼 μž¬λ―Έμžˆμ„ 것 κ°™λ‹€. Java 여정을 μ‹œμž‘ν•΄λ³΄μž!

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.