์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
TIOBE ์„ ์ • ์˜ฌํ•ด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
2004๋…„
PHP
โ†’
2005๋…„
Java
โ†’
2006๋…„
Ruby
2014๋…„
JavaScript
โ†’
2015๋…„
Java
โ†’
2016๋…„
Go
์ž๋ฐ”
Java
์šด์˜ ๋ฐ ๊ฐœ๋ฐœ
์ฒ˜์Œ๋ฒ„์ „
  1. 0 (1995.01.23)
์ตœ์‹ ๋ฒ„์ „
15
2020๋…„ 9์›” 15์ผ ์—…๋ฐ์ดํŠธ
16
2021๋…„ 3์›” ์ถœ์‹œ ์˜ˆ์ •
์›น์‚ฌ์ดํŠธ
์ตœ์ดˆ ๊ฐœ๋ฐœ์ž
1. ๊ฐœ์š”2. ์ด๋ฆ„ ์œ ๋ž˜3. ๋ถ„๋ฅ˜4. ์—ญ์‚ฌ
4.1. JDK 1.0a4.2. JDK 1.0a24.3. JDK 1.04.4. JDK 1.14.5. J2SE 1.24.6. J2SE 1.34.7. J2SE 1.44.8. J2SE 54.9. Java SE 64.10. Java SE 74.11. Java SE 84.12. Java SE 94.13. Java SE 104.14. Java SE 114.15. Java SE 124.16. Java SE 134.17. Java SE 144.18. Java SE 15
5. ๋ฌธ๋ฒ•6. C, C++์™€์˜ ๋น„๊ต7. ํŠน์ง•
7.1. ์žฅ์ 
7.1.1. ์ˆ˜๋งŽ์€ ๊ฐœ๋ฐœ์ž์™€ ๋ ˆํผ๋Ÿฐ์Šค7.1.2. ๋น„๊ต์  ๋†’์€ ์ƒ์‚ฐ์„ฑ7.1.3. ๊ธฐ๊ธฐ ํ˜ธํ™˜์„ฑ7.1.4. ์•ˆ์ •์„ฑ7.1.5. ์†Œ์Šค ์ฝ”๋“œ ๊ฐ€๋…์„ฑ
7.2. ๋‹จ์ 
7.2.1. ์†๋„ ๋ฌธ์ œ
7.2.1.1. JVM ๋กœ๋”ฉ ์†๋„ ๋ฌธ์ œ7.2.1.2. ๊ฐ€์ƒ ๋จธ์‹  ๋ฐ”์ดํŠธ์ฝ”๋“œ ์‹คํ–‰ ์†๋„ ๋ฌธ์ œ7.2.1.3. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ์˜ํ•œ ์‹คํ–‰ ์ง€์—ฐ ๋ฌธ์ œ
7.2.2. ๋ถˆํŽธํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ7.2.3. ์†Œ์Šค ์ฝ”๋“œ ๊ธธ์ด7.2.4. ์–ธ์–ด์  ๋ถˆํŽธํ•จ
7.2.4.1. ๋ช…์‚ฌํ˜• ์‚ฌ๊ณ ๋ฅผ ๊ฐ•์ œ7.2.4.2. ํด๋กœ์ € ๋ฏธ์ง€์›
8. ๊ฐœ๋ฐœํ™˜๊ฒฝ, JVM ์–ธ์–ด
8.1. ๊ฐœ๋ฐœํ™˜๊ฒฝ8.2. JVM ์–ธ์–ด
8.2.1. ์œ ๋ช…ํ•œ JVM ์–ธ์–ด ๋ชฉ๋ก
9. ํ˜ผ๋™ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ๋“ค10. ๊ตฌ๊ธ€ vs. ์˜ค๋ผํด: Java ์ €์ž‘๊ถŒ ๋ถ„์Ÿ11. ์ ์œ ์œจ12. ๋ถˆํˆฌ๋ช…ํ•œ ๋ฏธ๋ž˜?13. ๋„์„œ14. ์—ฌ๋‹ด15. ๊ด€๋ จ ๋ฌธ์„œ

1. ๊ฐœ์š”[ํŽธ์ง‘]

package wiki.namu.helloworld;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ์—์„œ 1995๋…„์— ๊ฐœ๋ฐœํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด. ์ฐฝ์‹œ์ž๋Š” ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง์ด๋‹ค. 2010๋…„์— ์˜ค๋ผํด์ด ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ์„ ์ธ์ˆ˜ํ•˜๋ฉด์„œ Java์˜ ์ €์ž‘๊ถŒ์„ ์†Œ์œ ํ•˜์˜€๋‹ค. ํ˜„์žฌ๋Š” OpenJDK๋Š” GPL2์ด๋‚˜ ์˜ค๋ผํด์ด ๋ฐฐํฌํ•˜๋Š” Oracle JDK๋Š” ์ƒ์—…๋ผ์ด์„ ์Šค๋กœ ์˜ค๋ผํด์ด ๋ˆ๋… ์˜ฌ๋ž๋Š”์ง€ 2019๋…„ 1์›”๋ถ€ํ„ฐ ์œ ๋ฃŒํ™”์ •์ฑ…์„ ๊ฐ•ํ™”ํ•˜๊ณ  ์žˆ๋‹ค. Java EE๋Š” ์ดํด๋ฆฝ์Šค ์žฌ๋‹จ์˜ ์†Œ์œ ์ด๋‹ค. Java ์–ธ์–ด๋Š” J2SE 1.4๋ถ€ํ„ฐ๋Š” Java Community Process (JCP)์—์„œ ๊ฐœ๋ฐœ์„ ์ฃผ๋„ํ•˜๊ณ  ์žˆ๋‹ค.

C#๊ณผ ๋ฌธ๋ฒ•์  ์„ฑํ–ฅ์ด ๊ต‰์žฅํžˆ ๋น„์Šทํ•˜๋ฉฐ[1][2], ๊ทธ์— ๋น„ํ•ด 2019๋…„ Q3์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์ด์šฉํ•˜๋Š” ์–ธ์–ด๋กœ ๋ฝ‘ํ˜”๋‹ค. JavaScript์™€๋Š” ๋‹ค๋ฅด๋‹ค.

์˜จ๋ผ์ธ ์ƒ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ๋กœ.

์ฐธ๊ณ ๋กœ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ๋ผ๋Š” ์œ ๋ช…ํ•œ ๊ฒŒ์ž„๋„ ์ž๋ฐ”๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

2. ์ด๋ฆ„ ์œ ๋ž˜[ํŽธ์ง‘]

์ฒ˜์Œ์—” ๊ณ ์Šฌ๋ง ์‚ฌ๋ฌด์‹ค ์•ž์— ์žˆ๋Š” ์ฐธ๋‚˜๋ฌด์—์„œ ๋”ฐ์™€ OAK๋กœ ์ง€์—ˆ๋‹ค๊ฐ€ ๊ทธ๋Œ€๋กœ ์ƒํ‘œ๋กœ ๋“ฑ๋กํ•˜๊ธฐ์—” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ์„œ[3] ์ปจ์„คํ„ดํŠธ๊ฐ€ ๊ทน๋‹จ์ ์ธ ๋ฐฉ๋ฒ•์„ ๋„์ž…, ์˜คํ›„์— ๊ฐœ๋ฐœ์ง„๋“ค์„ ํšŒ์˜์‹ค์— ๊ฐ€๋‘ฌ์„œ(...) ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ์„ ์‹œ์ผฐ๋‹ค. "๊ธฐ๋ถ„์ด ์–ด๋–ค๊ฐ€์š”"(Excited!), "๋ฌด์—‡์ด ๋‹น์‹  ๊ธฐ๋ถ„์„ ์ข‹๊ฒŒ ๋งŒ๋“œ๋‚˜์š”?"(Java coffee!) ๊ฐ™์€ ์—ฐ์ƒ์ ์ธ ์ž‘์šฉ์„ ๊ฑฐ์ณ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด๋ฆ„์„ ์ •ํ•˜๊ณ , ๊ทธ ์ค‘์—์„œ ์ž๋ฐ” ์ปคํ”ผ์˜ Java๋ฅผ ์„ ํƒํ–ˆ๋‹ค. Java๋Š” ๋žญํ‚น ์ค‘ ๋„ค ๋ฒˆ์งธ. ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ์ด๋ฆ„์€ Silk์˜€๊ณ  ๊ณ ์Šฌ๋ง์ด ๊ฐ€์žฅ ์ข‹์•„ํ–ˆ๋˜ ์ด๋ฆ„์€ Lyrics, ์„ธ ๋ฒˆ์งธ์— ์˜ฌ๋ผ์™”๋˜ ์ด๋ฆ„์ด๋ผ๊ณ .

๊ฐœ๋ฐœ์ง„์ด ์ž๋ฐ”์‚ฐ ์ปคํ”ผ๋ฅผ ์ข‹์•„ํ•ด์„œ ๊ทธ๋žฌ๋‹ค๋Š” ์„ค๋„ ์žˆ๋‹ค. 3 Bilion Devices like Java(Coffee) ์•„์ด์ฝ˜๋„ ์ปคํ”ผ์ž” ๋ชจ์–‘. ๋˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ด๋ฆ„์ธ James Gosling, Arthur Van Hoff, Andy Bechtolsheim์˜ ๋จธ๋ฆฟ๊ธ€์ž๋ฅผ ๋”ฐ์˜จ ๊ฒƒ์ด๋ผ๋Š” ์„ค๋„ ์žˆ๊ณ , ๊ทธ๋ƒฅ ์‚ฌ์ „์„ ํŽผ์ณค๋Š”๋ฐ ๋ˆˆ์— ๋“ค์–ด์˜จ ์ด๋ฆ„์ด์—ˆ๋‹ค๋Š” ์„ค๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ง‰ ์ง€์€ ๊ฒƒ ์น˜๊ณ ๋Š” ํฌ๊ฒŒ ํฅํ•˜์—ฌ ์ฌ์ด ์ž์‚ฌ์˜ ๋‚˜์Šค๋‹ฅ ์ฝ”๋“œ๋ฅผ SUNW์—์„œ JAVA๋กœ ๋ฐ”๊พธ์—ˆ์„ ์ •๋„๋กœ ์ด์ œ๋Š” ์ฌ์˜ ์ƒ์ง•์ด์ž, ๊ทผ๋ฐ ๊ทธ ์ฌ์ด ์˜ค๋ผํด์— ์ธ์ˆ˜๋ผ์„œ ์‚ฌ๋ผ์ง„ ๊ฑด ํ•จ์ • ์„ธ๊ณ„์ ์œผ๋กœ๋„ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๋‹จ์–ด๊ฐ€ ๋˜์—ˆ๋‹ค. ์ถœ์ฒ˜

3. ๋ถ„๋ฅ˜[ํŽธ์ง‘]

Java๋Š” ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 4๊ฐ€์ง€ ์—๋””์…˜์œผ๋กœ ๋‚˜๋‰œ๋‹ค.
  • Java SE(Java Standard Edition / J2SE)
    ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์žฅ ๋งŽ์ด ์ ‘ํ•˜๋Š” ํ‘œ์ค€ ์—๋””์…˜. Java์˜ ํ•ต์‹ฌ API์™€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค. JDK ํ•ญ๋ชฉ๋„ ์ฐธ๊ณ .
  • Jakarta EE, ๊ตฌ Java EE(Java Enterprise Edition / J2EE)
    ๊ธฐ์—…์—์„œ ์šด์˜ํ•˜๋Š” ์„œ๋ฒ„ ํŽ˜์ด์ง€์— ํŠนํ™”๋œ ์—๋””์…˜์ด๋‹ค. JSP์™€ ์„œ๋ธ”๋ฆฟ์„ ๋น„๋กฏํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ๊ด€๋ จ๋œ ๊ธฐ์ˆ ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
  • Java ME(Java Micro Edition / J2ME)
    PDA๋‚˜ ์…‹ํ†ฑ๋ฐ•์Šค, ์„ผ์„œ ๋“ฑ์˜ ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์— ํŠนํ™”๋œ ์—๋””์…˜์ด๋‹ค.
  • JavaFX
    ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์—๋””์…˜์œผ๋กœ, ํฌ๋กœ์Šคํ”Œ๋žซํผ ์ด์‹๊ณผ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

4. ์—ญ์‚ฌ[ํŽธ์ง‘]

๋ฒ„์ „ ์ •๋ณด์™€ ๋‚ ์งœ๋งŒ ํ™•์ธํ•œ๋‹ค๋ฉด, Java/๋ฒ„์ „ ์ •๋ณด ๋ฌธ์„œ ์ฐธ์กฐ.

4.1. JDK 1.0a[ํŽธ์ง‘]

1994๋…„ ๋ฐœํ‘œ.

4.2. JDK 1.0a2[ํŽธ์ง‘]

1995๋…„ 5์›” 23์ผ ๋ฐœํ‘œ. ์–ธ์–ด ์ž์ฒด๊ฐ€ ์ •์‹์œผ๋กœ ๋ฐœํ‘œ๋œ ๋‚ ์ด๊ธฐ๋„ ํ•˜๋‹ค.

4.3. JDK 1.0[ํŽธ์ง‘]

1996๋…„ 1์›” 23์ผ ๋ฐœํ‘œ. ๋ฐœํ‘œ ์ด์ „์— ๋ถˆ๋ ธ๋˜ ์ด๋ฆ„์€ Oak์˜€์œผ๋ฉฐ, ์•ˆ์ •ํ™” ์ž‘์—…์„ ๊ฑฐ์นœ 1.0.2 ๋ฒ„์ „์—์„œ Java๋กœ ์ด๋ฆ„์ด ๋ฐ”๋€Œ์—ˆ๋‹ค.

4.4. JDK 1.1[ํŽธ์ง‘]

1997๋…„ 2์›” 19์ผ ๋ฐœํ‘œ. ์ด๋„ˆ ํด๋ž˜์Šค, JavaBeans, RMI, ๋ฆฌํ”Œ๋ ‰์…˜, ์œ ๋‹ˆ์ฝ”๋“œ ์ง€์›, ๊ตญ์ œํ™”(Internationalization) ๋“ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

4.5. J2SE 1.2[ํŽธ์ง‘]

1998๋…„ 12์›” 8์ผ ๋ฐœํ‘œ. ์ผ๋ฐ˜ ์ง€์›์€ 2003๋…„ 11์›”์— ์ข…๋ฃŒ๋˜์—ˆ๋‹ค. ์ƒˆ๋กœ์šด GUI, JIT, CORBA ๋“ฑ์˜ ๊ตต์งํ•œ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ 2 ๋ถ€ํ„ฐ ์•ฝ์นญ์„ J2SE(Java 2 Standard Edition) ๋กœ ํ‘œ๊ธฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ, ์ด ํ‘œ๊ธฐ๋Š” 5 ๊นŒ์ง€ ์‚ฌ์šฉ๋œ๋‹ค. strictfp, Swing GUI, JIT, Java Applet์„ ๊ตฌ๋™ํ•˜๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ํ”Œ๋Ÿฌ๊ทธ์ธ, CORBA, Collections ๋“ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. 1999๋…„์— ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด HotSpot JVM์ด ์ฒซ ์„ ์„ ๋ณด์ธ๋‹ค.

4.6. J2SE 1.3[ํŽธ์ง‘]

2000๋…„ 3์›” 8์ผ ๋ฐœํ‘œ. ์ผ๋ฐ˜ ์ง€์›์€ 2006๋…„ 11์›”์— ์ข…๋ฃŒ๋˜์—ˆ๋‹ค. HotSpot JVM, JNDI, JPDA, JavaSound ๋“ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. RMI๊ฐ€ CORBA๋ฅผ ์ง€์›ํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

4.7. J2SE 1.4[ํŽธ์ง‘]

2002๋…„ 2์›” 6์ผ ๋ฐœํ‘œ. ์ผ๋ฐ˜ ์ง€์›[4]์€ 2008๋…„ 10์›”, ์—ฐ์žฅ ์ง€์›[5]์€ 2013๋…„ 2์›”์— ์ข…๋ฃŒ๋˜์—ˆ๋‹ค. assert, ์ •๊ทœํ‘œํ˜„์‹, IPv6, Non-Blocking IO, XML API, JCE, JSSE, JAAS, Java Web Start ๋“ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

4.8. J2SE 5[ํŽธ์ง‘]

2004๋…„ 9์›” 30์ผ ๋ฐœํ‘œ. ์ผ๋ฐ˜ ์ง€์›์€ 2009๋…„ 9์›”, ์—ฐ์žฅ ์ง€์›์€ 2015๋…„ 5์›”์— ์ข…๋ฃŒ๋˜์—ˆ๋‹ค. J2SE 5.0๊นŒ์ง€ Windows 9x์™€ Windows NT 4.0์ด ์ง€์›๋˜์—ˆ๋‹ค. ์ด ๋•Œ๋ถ€ํ„ฐ ๋ฒ„์ ผ ์ค‘ ์•ž์˜ 1์„ ๋นผ๋ฒ„๋ฆฌ๊ณ  ํ‘œ๊ธฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์—ฌ์ „ํžˆ 1.5, 1.6, 1.7 ๋“ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. Generics, Annotation, Auto Boxing/Unboxing, Enumeration, ๊ฐ€๋ณ€ ๊ธธ์ด ํŒŒ๋ผ๋ฏธํ„ฐ, Static Import, ์ƒˆ๋กœ์šด Concurrency API ๋“ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. Java๋Š” ํ‘œ์ค€ ์ž…๋ ฅ(stdin) ์ง€์›์ด ์‹œ์›์ฐฎ์•˜๋Š”๋ฐ, J2SE 5์— ๋“ค์–ด์„œ java.util.Scanner๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด์„œ ์ด์ „๋ณด๋‹ค ํŽธํ•˜๊ฒŒ ํ‘œ์ค€ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

4.9. Java SE 6[ํŽธ์ง‘]

2006๋…„ 12์›” 11์ผ ๋ฐœํ‘œ. ์ผ๋ฐ˜ ์ง€์›์€ 2013๋…„ 2์›”์— ์ข…๋ฃŒ๋˜์—ˆ์œผ๋ฉฐ, ์—ฐ์žฅ ์ง€์›์€ 2018๋…„ 12์›”์— ์ข…๋ฃŒ๋˜์—ˆ๋‹ค. ์ด ๋•Œ๋ถ€ํ„ฐ ํ‘œ๊ธฐ๊ฐ€ J2SE์—์„œ Java SE๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค. Scripting Language Support, JDBC 4.0, Java Compiler API, Pluggable Annotation ๋“ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด ์ง€์›๊ณผ ํ•จ๊ป˜ Rhino JavaScript ์—”์ง„์ด ๊ธฐ๋ณธ์œผ๋กœ ํƒ‘์žฌ๋˜์—ˆ๋‹ค.

4.10. Java SE 7[ํŽธ์ง‘]

2011๋…„ 7์›” 7์ผ ๋ฐœํ‘œ. ์ผ๋ฐ˜ ์ง€์›์€ 2015๋…„ 4์›”์— ์ข…๋ฃŒ๋˜์—ˆ์œผ๋ฉฐ, ์—ฐ์žฅ ์ง€์›์€ 2022๋…„ 7์›”์— ์ข…๋ฃŒ๋  ์˜ˆ์ •์ด๋‹ค. Dynamic Language ์ง€์›, switch๋ฌธ์—์„œ String ์‚ฌ์šฉ, try๋ฌธ์—์„œ ์ž๋™ ์ž์› ๊ด€๋ฆฌ, Diamond Operator <>, ์ด์ง„์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด, ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์— _ ์ง€์›, ์ƒˆ๋กœ์šด Concurrency API, ์ƒˆ๋กœ์šด File NIO ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Elliptic Curve Cryptography, Java2D๋ฅผ ์œ„ํ•œ XRender, Upstream, Java Deployment Ruleset ๋“ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

4.11. Java SE 8[ํŽธ์ง‘]

2014๋…„ 3์›” 18์ผ ๋ฐœํ‘œ. ์ผ๋ฐ˜ ์ง€์›์€ 2019๋…„ 1์›”์— ์ข…๋ฃŒ๋˜์—ˆ๊ณ , ์—ฐ์žฅ ์ง€์›์€ 2023๋…„ 9์›”์— ์ข…๋ฃŒ๋  ์˜ˆ์ •์ด๋‹ค. Lambda Expression, Rhino ๋Œ€์‹  Nashorn JavaScript ์—”์ง„ ํƒ‘์žฌ, Annotation on Java Types, Unsigned Integer ๊ณ„์‚ฐ, Repeating Annotation, ์ƒˆ๋กœ์šด ๋‚ ์งœ์™€ ์‹œ๊ฐ„ API(์‚ฌ์‹ค์ƒ JodaTime์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค), Static Link JNI Library, Interface Default Method, PermGen ์˜์—ญ ์‚ญ์ œ, Stream API ๋“ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ๋ณธ๋ž˜ ์ผ๋ฐ˜ ์ง€์›์€ 2017๋…„ 9์›” ์ข…๋ฃŒ ์˜ˆ์ •์ด์—ˆ์œผ๋‚˜ Java 9 ๋ฐœํ‘œ์˜ ์ง€์—ฐ ๋•Œ๋ฌธ์— 2018๋…„ 9์›”๋กœ ์—ฐ์žฅ๋˜์—ˆ๋‹ค๊ฐ€, ์ดํ›„ ๋ผ์ด์„ ์Šค ์ด๊ด€ ๋ฌธ์ œ๋กœ ์ธํ•ด 2019๋…„ 1์›”๋กœ ๋‹ค์‹œ ์—ฐ์žฅ๋˜์—ˆ๋‹ค.

32๋น„ํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋งˆ์ง€๋ง‰ ๊ณต์‹ Java ๋ฒ„์ „์œผ๋กœ, ์ดํ›„ ๋ฒ„์ „์˜ 32๋น„ํŠธ ์ง€์›์€ ์˜ค์ง ์„œ๋“œํŒŒํ‹ฐ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ง€์›๋œ๋‹ค. JRE ์—ญ์‹œ ์ด ๋ฒ„์ „๊นŒ์ง€๋งŒ ๋ฐฐํฌ๋˜๊ณ  ์ดํ›„๋กœ๋Š” executable ํ˜•ํƒœ๋กœ ์ปดํŒŒ์ผํ•ด์„œ ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค.

4.12. Java SE 9[ํŽธ์ง‘]

2017๋…„ 9์›” 21์ผ ๋ฐœํ‘œ. ์ผ๋ฐ˜ ์ง€์›์€ 2018๋…„ 3์›”์— ์ข…๋ฃŒ๋˜์—ˆ๋‹ค.

Project Jigsaw ๊ธฐ๋ฐ˜์œผ๋กœ ๋Ÿฐํƒ€์ž„์ด ๋ชจ๋“ˆํ™”๋œ ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ํŠน์ง•. ์ด์— ๋”ฐ๋ผ ๋Œ€๋ถ€๋ถ„์˜ ์ฝ˜์†” ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์—๋Š” ๋” ์ด์ƒ AWT๋‚˜ Swing ๊ฐ™์€ ๋ถˆํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋Œ์–ด์“ธ ํ•„์š”๋„ ์—†์ด, ์ตœ์ƒ์œ„ ๋ชจ๋“ˆ์ธ Base๋งŒ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค. ๋”๋ถˆ์–ด ํŠน์ • ํ”„๋กœ๊ทธ๋žจ์— ์ตœ์ ํ™”๋œ ์ตœ์†Œ ๋Ÿฐํƒ€์ž„์„ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด์„œ ํŒจํ‚ค์ง• ์—ญ์‹œ ๊ฐ„ํŽธํ•ด์กŒ๋‹ค.

์—ฌ๊ธฐ์— Java๋ฅผ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด ์…ธ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” JShell์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, Java ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฏธ๋ฆฌ ๋ฒˆ์—ญํ•˜๋Š” ์„ ํ–‰ ์ปดํŒŒ์ผ(Ahead-Of-Time Compilation) ์—ญ์‹œ ์‹คํ—˜ ๊ธฐ๋Šฅ์œผ๋กœ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.[6] ๋˜ํ•œ Deprecated ํ‘œ์‹œ์—๋Š” ํ•ด๋‹น ๋ฒ„์ „๊ณผ ์ œ๊ฑฐ ์˜ˆ์ • ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ ์™ธ์— ๊ตฌ์กฐ์  ๋ถˆ๋ณ€ ์ปฌ๋ ‰์…˜, ํ†ตํ•ฉ ๋กœ๊น…, HTTP/2, private ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ, HTML5 Javadoc ๋“ฑ๋„ ์ง€์›๋˜๋ฉฐ, ํ”„๋กœํผํ‹ฐ ํŒŒ์ผ์— UTF-8์ด ์ง€์›๋จ์— ๋”ฐ๋ผ ๋” ์ด์ƒ ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ๋กœ ์‚ฝ์งˆํ•  ํ•„์š”๊ฐ€ ์—†์–ด์กŒ๋‹ค. ๋˜ํ•œ Java Applet ๊ธฐ๋Šฅ์€ ์ง€์›์ด ์ข…๋ฃŒ๋œ๋‹ค.

์ƒˆ๋กœ ์ ์šฉ๋œ ๋ฒ„์ €๋‹ ์ •์ฑ…์— ๋”ฐ๋ผ ์ด ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ๋” ์ด์ƒ 1.x ๋ฒ„์ „์œผ๋กœ ๋‚ด๋†“์ง€ ์•Š๊ณ , ๋Œ€์‹  9.0์œผ๋กœ ๊ธ‰์†ํ•œ ํŒ์˜ฌ๋ฆผ์ด ์ผ์–ด๋‚ฌ๋‹ค. ๋˜ํ•œ ์ œ๊ฑฐ ์˜ˆ์ •์ธ Deprecated API๋Š” ๋‹ค์Œ ๋ฒ„์ „์ธ Java SE 10๋ถ€ํ„ฐ ์™„์ „ ์‚ญ์ œ ์˜ˆ์ •์ด๋ฏ€๋กœ ํ•ด๋‹น API๋ฅผ ์“ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ๋” ์ด์ƒ ์ดํ›„์˜ ๋ฒ„์ „์—์„œ ์ปดํŒŒ์ผ์กฐ์ฐจ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Java SE 9๋ถ€ํ„ฐ๋Š” 6๊ฐœ์›”๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ์—…๋ฐ์ดํŠธ๋œ๋‹ค.

๋ณธ๋ž˜๋Š” 2016๋…„ ๋ฐœํ‘œ ์˜ˆ์ •์ด์—ˆ์œผ๋‚˜ 2๋ฒˆ์ด๋‚˜ ์—ฐ๊ธฐ๋˜์–ด 2017๋…„ 7์›” 27์ผ ๋ฐœํ‘œ ์˜ˆ์ •, ๊ทธ๋‚˜๋งˆ๋„ ํ•œ๋ฒˆ ๋” ์—ฐ๊ธฐ๋˜์–ด 9์›” 21์ผ์— ๋ฐœํ‘œ๋˜์—ˆ๋‹ค. ๊ฐ€์žฅ ํฐ ์›์ธ์€ ์—ญ์‹œ Project Jigsaw์˜ ๊ฐœ๋ฐœ ๋‚œ์ด๋„์˜€๋‹ค. ๋Ÿฐํƒ€์ž„์˜ ๋ชจ๋“ˆํ™”๋Š” ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์–ด๋А ์ •๋„ ํฌ๊ธฐํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ถ”๊ตฌํ•œ ๊ฒƒ์ด๊ธฐ์— ์•„์ง ํ˜„์žฅ์—์„œ๋Š” Java 9๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๊บผ๋ฆฌ๋Š” ๋ถ„์œ„๊ธฐ๋‹ค.

์ด ๋ฒ„์ „๋ถ€ํ„ฐ 64๋น„ํŠธ ๋ฒ„์ „๋งŒ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ, 32๋น„ํŠธ ๋ฒ„์ „์€ ๋” ์ด์ƒ ๊ณต์‹์ ์œผ๋กœ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค.

4.13. Java SE 10[ํŽธ์ง‘]

2018๋…„ 3์›” 20์ผ ๋ฐœํ‘œ. ์ผ๋ฐ˜ ์ง€์›์€ 2018๋…„ 9์›”์— ์ข…๋ฃŒ๋˜์—ˆ๋‹ค. var ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•œ ์ง€์—ญ ๋ณ€์ˆ˜ ํƒ€์ž… ์ถ”๋ก [7], ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜, ๊ฐœ๋ณ„ ์“ฐ๋ ˆ๋“œ๋กœ ๋ถ„๋ฆฌ๋œ Stop-The-World, ๋ฃจํŠธ CA ๋ชฉ๋ก ๋“ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ๋˜ํ•œ JDK์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ๋˜์—ˆ์œผ๋ฉฐ, JVM ํž™ ์˜์—ญ์„ ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋ฉ”๋ชจ๋ฆฌ์—๋„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์‹คํ—˜ ๊ธฐ๋Šฅ์œผ๋กœ Java ๊ธฐ๋ฐ˜์˜ JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๊ณ , ์ด์ „ ๋ฒ„์ „์—์„œ Deprecated ์ฒ˜๋ฆฌ๋œ API๋Š” Java SE 10์—์„œ ๋ชจ๋‘ ์‚ญ์ œ๋˜์—ˆ๋‹ค.

4.14. Java SE 11[ํŽธ์ง‘]

2018๋…„ 9์›” 25์ผ ๋ฐœํ‘œ. ์ผ๋ฐ˜ ์ง€์›์€ 2023๋…„ 9์›”, ์—ฐ์žฅ ์ง€์›์€ 2026๋…„ 9์›”์— ์ข…๋ฃŒ๋  ์˜ˆ์ •์ด๋‹ค. ์ดํด๋ฆฝ์Šค ์žฌ๋‹จ์œผ๋กœ ๋„˜์–ด๊ฐ„ Java EE๊ฐ€ JDK์—์„œ ์‚ญ์ œ๋˜๊ณ , JavaFX๋„ JDK์—์„œ ๋ถ„๋ฆฌ๋˜์–ด ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ์ œ๊ณต๋œ๋‹ค. #[8] Gloun์ด๋ผ๋Š” ์—…์ฒด๊ฐ€ JavaFX๋ฅผ ์œ ์ง€๋ณด์ˆ˜ ์ค‘์ด๋ฏ€๋กœ ์ด๊ณณ์—์„œ ๋‹ค์šด๋กœ๋“œ๋ฐ›์œผ๋ฉด ๋œ๋‹ค. ๋žŒ๋‹ค ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์ง€์—ญ ๋ณ€์ˆ˜ ๋ฌธ๋ฒ•[9], ์—ก์‹ค๋ก  ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ, HTTP ํด๋ผ์ด์–ธํŠธ ํ‘œ์ค€ํ™” ๋“ฑ์˜ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

๊ฐ€์žฅ ์ปค๋‹ค๋ž€ ๋ณ€ํ™”๋Š” ๋ฐ”๋กœ ๋ผ์ด์„ ์Šค ๋ถ€๋ถ„. Java SE 11๋ถ€ํ„ฐ Oracle JDK์˜ ๋…์  ๊ธฐ๋Šฅ์ด ์˜คํ”ˆ ์†Œ์Šค ๋ฒ„์ „์ธ OpenJDK์— ์ด์‹๋œ๋‹ค. ์ด๋Š” ๋‹ค์‹œ ๋งํ•ด Oracle JDK์™€ OpenJDK๊ฐ€ ์™„์ „ํžˆ ๋™์ผํ•ด์ง„๋‹ค๋Š” ๋œป์ด๋‹ค. Oracle JDK๋Š” Java SE 11๋ถ€ํ„ฐ LTS(์žฅ๊ธฐ ์ง€์›) ๋ฒ„์ „์œผ๋กœ 3๋…„๋งˆ๋‹ค ์ถœ์‹œ๋˜๋Š”๋ฐ, ์ถœ์‹œ ํ›„ 5๋…„ ๋™์•ˆ ์˜ค๋ผํด์˜ ๊ธฐ์ˆ  ์ง€์›์ด ์ œ๊ณต๋˜๊ณ  ์ตœ๋Œ€ 3๋…„๊นŒ์ง€ ์ง€์› ๊ธฐ๊ฐ„์„ ์—ฐ์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. Oracle JDK๋Š” ์ด์ œ 3๋…„์— ํ•œ ๋ฒˆ ์ถœ์‹œ๋˜๋‹ˆ Java์˜ ์‹ค์งˆ์ ์ธ ๋ฒ„์ „ ์—…์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์€ OpenJDK๊ฐ€ ๋œ ์…ˆ์ด๋‹ค. OpenJDK๋Š” ๊ธฐ์—…๋“ค์„ ์œ„ํ•œ ๊ธฐ์ˆ  ์ง€์›์€ ์—†๊ณ , ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ๋‚˜์˜ค๋ฉด ์ด์ „ ๋ฒ„์ „์— ๋Œ€ํ•œ ๋งˆ์ด๋„ˆ ์—…๋ฐ์ดํŠธ์™€ ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๋Š” ์ค‘๋‹จ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Java 11๊ณผ ํ•จ๊ป˜ ๋ฐœํ‘œ๋œ ๋˜ ๋‹ค๋ฅธ ์†Œ์‹์€ ๋ฐ”๋กœ Oracle JDK๊ฐ€ ๊ตฌ๋…ํ˜• ์œ ๋ฃŒ ๋ชจ๋ธ๋กœ ์ „ํ™˜๋œ๋‹ค๋Š” ์ ์ด๋‹ค. # 2019๋…„ 1์›”๋ถ€ํ„ฐ ์˜ค๋ผํด์ด ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  Oracle JDK๋Š” ์œ ๋ฃŒํ™”๋˜๋ฉฐ, ๊ตฌ๋…๊ถŒ์„ ๊ตฌ์ž…ํ•˜์ง€ ์•Š์œผ๋ฉด Oracle JDK์— ์ ‘๊ทผ ์ž์ฒด๊ฐ€ ๊ธˆ์ง€๋œ๋‹ค. ๊ธฐ์กด์˜ ์ผ๋ฐ˜/์—ฐ์žฅ ์ง€์› ์„œ๋น„์Šค๋Š” ๊ตฌ๋…๊ถŒ์— ํฌํ•จ๋˜๋ฏ€๋กœ ๋ณ„๋„์˜ ์„œ๋น„์Šค๋กœ๋Š” ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐœ์ธ ์‚ฌ์šฉ์ž๋Š” 2021๋…„ 1์›”๋ถ€ํ„ฐ ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ธฐ์—…๋“ค์ด Oracle JDK์—์„œ ๋ฐœ์„ ๋นผ๊ณ  ์žˆ์œผ๋ฉฐ, OpenJDK๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋‹ค๋ฅธ ์„œ๋“œํŒŒํ‹ฐ JDK๊ฐ€ ๋Œ€์•ˆ์œผ๋กœ ๋– ์˜ค๋ฅด๊ณ  ์žˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ Azul Systems์—์„œ ๊ฐœ๋ฐœํ•œ Zulu JDK๊ฐ€ ์žˆ๋Š”๋ฐ, Zulu JDK๋Š” ์˜ค๋ผํด์˜ TCK(Technology Certification Kit) ์ธ์ฆ์„ ๋ฐ›์€ ๊ตฌํ˜„์ฒด์ด๋‹ค. ๊ฐœ์ธ๊ณผ ๊ธฐ์—… ๋ชจ๋‘ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๊ธฐ์ˆ  ์ง€์›์— ํ•œํ•ด์„œ๋งŒ ์œ ๋ฃŒ ์„œ๋น„์Šค๊ฐ€ ์ œ๊ณต๋œ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋Œ€์•ˆ์œผ๋กœ๋Š” AdoptOpenJDK๊ฐ€ ์žˆ๋Š”๋ฐ, AdoptOpenJDK๋Š” HotSpot VM ๋Œ€์‹  Eclipse OpenJ9์„ ํƒ‘์žฌํ•œ ๋ฒ„์ „๋„ ๊ฐ™์ด ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ๋‹ค๋งŒ ์•„์ง TCK ์ธ์ฆ์„ ๋ฐ›์ง€ ์•Š์•˜๊ธฐ์— ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

4.15. Java SE 12[ํŽธ์ง‘]

2019๋…„ 3์›” 19์ผ ๊ณต๊ฐœ. ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋กœ ๋ฌธ๋ฒ•์ ์œผ๋กœ Switch๋ฌธ์„ ํ™•์žฅํ•œ ๊ฒƒ์ด ์žˆ๋‹ค.(์ถœ์ฒ˜)
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}

์˜ˆ์ „์—๋Š” ์ด๋ ‡๊ฒŒ ์จ์•ผ ํ–ˆ๋˜ Switch๋ฌธ์„ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ๋„ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
์ด์™ธ์— ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ๊ฐœ์„ , ๋งˆ์ดํฌ๋กœ ๋ฒค์น˜๋งˆํฌ ํˆด ์ถ”๊ฐ€, ์„ฑ๋Šฅ ๊ฐœ์„ ์˜ ๋ณ€๊ฒฝ์ ์ด ์žˆ๋‹ค.

4.16. Java SE 13[ํŽธ์ง‘]

2019๋…„ 9์›” 17์ผ ๊ณต๊ฐœ. java 12์—์„œ์˜ ์Šค์œ„์น˜ ๊ฐœ์„ ์„ ์ด์–ด yield ๋ผ๋Š” ์˜ˆ์•ฝ์–ด๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
var a = switch (day) {
    case MONDAY, FRIDAY, SUNDAY:
        yield 6;
    case TUESDAY:
        yield 7;
    case THURSDAY, SATURDAY:
        yield 8;
    case WEDNESDAY:
        yield 9;
};

4.17. Java SE 14[ํŽธ์ง‘]

2020๋…„ 3์›” 18์ผ ๊ณต๊ฐœ. ํ”„๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ์œผ๋กœ instanceof์˜ ํŒจํ„ด ๋งค์นญ๊ณผ record๋ผ๋Š” ๋ฐ์ดํ„ฐ ์˜ค๋ธŒ์ ํŠธ ์„ ์–ธ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ๊ทธ ์™ธ์— ์ธํ๋ฒ ์ดํ„ฐ๋ผ๋Š” ํŒจํ‚ค์ง• ํˆด(OS์— ๋งž์ถ˜ ์‹คํ–‰ํŒŒ์ผ ์ƒ์„ฑ๊ธฐ๋Šฅ) ์ถ”๊ฐ€ ๋“ฑ์ด ์žˆ๋‹ค.

instanceof ํŒจํ„ด ๋งค์นญ
if (!(obj instanceof String s)) {
    .. s.contains(..) ..
} else {
    .. s.contains(..) ..
}


record ํƒ€์ž… ์ง€์›
record Point(int x, int y) { }

4.18. Java SE 15[ํŽธ์ง‘]

2020๋…„ 9์›” 15์ผ ๊ณต๊ฐœ (ํ•œ๊ตญ ๊ธฐ์ค€ 9์›” 16์ผ)
  • EdDSA ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ถ”๊ฐ€
  • ํŒจํ„ด ๋งค์นญ (2์ฐจ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ƒ๋‹จ Java 14 ์ฐธ์กฐ)
  • ์Šค์ผ€์ผ๋ง ๊ฐ€๋Šฅํ•œ ๋‚ฎ์€ ์ง€์—ฐ์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ์ถ”๊ฐ€(ZGC)
  • Solaris ๋ฐ SPARC ํ”Œ๋žซํผ ์ง€์› ์ œ๊ฑฐ
  • ์™ธ๋ถ€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ API (์ธํ๋ฒ ์ดํŒ…)
  • ๋ ˆ์ฝ”๋“œ (2์ฐจ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ƒ๋‹จ Java 14 ์ฐธ์กฐ)
  • ํด๋ž˜์Šค ๋ด‰์ธ (๋ฏธ๋ฆฌ๋ณด๊ธฐ)
    ์ƒ์† ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ด‰์ธ ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณต๋œ๋‹ค.
    ์ƒ์† ๊ฐ€๋Šฅํ•œ ๋Œ€์ƒ์€ ์ƒ์œ„ ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ํŒจํ‚ค์ง€ ๋‚ด์— ์†ํ•ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
package wiki.namu.example.species;

public sealed class Animal
       Dog,
	   wiki.namu.example.species.india.Monkey,
	   wiki.namu.example.species.sabana.Leopard
{
    // ...
}
  • ๋‹ค์ค‘ ํ…์ŠคํŠธ ๋ธ”๋ก
    ์ด์ œ ์ž๋ฐ”์—์„œ๋„ ์—ฌ๋Ÿฌ ์ค„์˜ ๋ฌธ์ž์—ด์„ ์†์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

5. ๋ฌธ๋ฒ•[ํŽธ์ง‘]

6. C, C++์™€์˜ ๋น„๊ต[ํŽธ์ง‘]

๊ธฐ์กด์˜ C์— ๊ฐ์ฒด์ง€ํ–ฅ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋‹ค ๋ณด๋‹ˆ ์–ธ์–ด์˜ ์‚ฌ์šฉ์— ์žˆ์–ด ์ €์ˆ˜์ค€๊ณผ ๊ณ ์ˆ˜์ค€์˜ ๊ฐœ๋…์ด ์ถฉ๋Œํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•˜๋˜ C++๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์•„์˜ˆ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค. ๋‹ค๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ฐฉ๊ฐํ•˜๋Š” ๋ถ€๋ถ„์ธ๋ฐ, Java๋Š” ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ์™„๋ฒฝํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋‹ค. ์›์‹œ(Primitive) ํƒ€์ž…์€ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ. ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ์–ธ์–ด๋ฅผ ์ˆœ์ˆ˜ ๊ฐ์ฒด์ง€ํ–ฅ(Pure object-oriented)์ด๋ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ์–ธ์–ด๋กœ๋Š” Python, Ruby, Smalltalk๋“ฑ์ด ์žˆ๋‹ค.

C, C++, Java์˜ ์ฐจ์ด์ ์„ ๋งํ•˜์ž๋ฉด, C๋Š” ํฌ์ธํ„ฐ ๋“ฑ์„ ํ™œ์šฉํ•œ ์ €์ˆ˜์ค€ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—[10] ๊ฐ•์ ์„ ๊ฐ€์ง€๋ฉฐ, C++๋Š” C์˜ ๊ทธ๋Ÿฐ ๊ฐ•์ ์„ ๊ฑฐ์˜ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๋ฉด์„œ ๊ฑฐ๊ธฐ์— ๊ฐ์ฒด ์ง€ํ–ฅ์ด๋‚˜ ์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ฐ™์€ ๋ฉ€ํ‹ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ง€์›ํ•˜๊ณ ์ž ํ•˜๋Š” ์‹œ๋„[11]์—์„œ ํƒ„์ƒํ•˜์˜€๋‹ค. ์ด๋ ‡๊ฒŒ ๊ณ ์ˆ˜์ค€๊ณผ ์ €์ˆ˜์ค€์˜ ๊ฐœ๋…์„ ๋ชจ๋‘ ํฌํ•จํ•˜๋ ค๋‹ค ๋ณด๋‹ˆ ๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด์„œ ์ƒ๋‹นํžˆ ๋ณต์žกํ•ด์กŒ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ตœ์‹  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์†์ ์œผ๋กœ ๊ฐœ์ •๋˜๊ณ  ์žˆ๋Š” ๋ชจ๋˜ C++๋Š” ๋ณ€ํ™”์˜ ํญ์ด ์ปค์„œ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ „๋ถ€ ์ œ๋Œ€๋กœ ๋‹ค๋ฃฐ ์ค„ ์•„๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋น„๊ต์  ์ ๋‹ค๋Š” ํ‰์ด ๋„๋ฆฌ ๋ฐ›์•„๋“ค์—ฌ์ง€๊ณ  ์žˆ๋‹ค. ์ด์™€๋Š” ๋Œ€์กฐ์ ์œผ๋กœ Java๋Š” C++์˜ ์ดˆ๊ธฐ ๋ฐœ์ „ ๋ฐฉํ–ฅ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ํฌ์ธํ„ฐ๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ๋กœ์šฐ ๋ ˆ๋ฒจ ๊ธฐ๋Šฅ์„ ํฌ๊ธฐํ•˜๊ณ  ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ๋‚ด์žฅํ•˜๋ฉฐ, ๊ณ ์ˆ˜์ค€์˜ ๊ฐ์ฒด์ง€ํ–ฅ ๋ถ€๋ถ„์„ ์ž˜ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์–ธ์–ด๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์˜€๋‹ค.

์ˆ˜๋งŽ์€ C๊ณ„์—ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๊ทธ๋ ‡๋“ฏ์ด, C/C++์™€ ๋น„์Šทํ•œ ๋ฌธ๋ฒ• ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ๋„ Java๊ฐ€ C/C++๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋„๋ฆฌ ์“ฐ์ด๋Š” ๋ถ„์•ผ๊ฐ€ ๋งŽ์ด ์กด์žฌํ•œ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฑ์—”๋“œ์™€ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์ด ๋Œ€ํ‘œ์ ์ธ ์‚ฌ๋ก€. ๋˜ํ•œ ์•„ํŒŒ์น˜ ์†Œํ”„ํŠธ์›จ์–ด ์žฌ๋‹จ์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ์ˆ˜๋งŽ์€ ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด๋“ค์ด Java๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ํ•˜์ง€๋งŒ Java ํ”„๋กœ๊ทธ๋žจ์—์„œ ์†๋„๊ฐ€ ๋งค์šฐ ์ค‘์š”์‹œ๋˜๋Š” ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ๋–ผ์–ด์„œ C/C++๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์ œ์ž‘ํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒ์‚ฐ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ ์ ˆํžˆ ๊ณ ๋ คํ•˜์—ฌ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•˜๋‹ค.

7. ํŠน์ง•[ํŽธ์ง‘]

Java์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ํ”Œ๋žซํผ์— ๋…๋ฆฝ์ ์ธ ์–ธ์–ด๋ผ๋Š” ์ ์ด๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ์ง์ ‘ ์ปดํŒŒ์ผํ•˜์—ฌ ๋งํฌํ•˜๋Š” C/C++์˜ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋‹ฌ๋ฆฌ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ์ธ ํด๋ž˜์Šค ํŒŒ์ผ(.class)์„ ์ƒ์„ฑํ•˜๊ณ , ์ด ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ฝ์€ ๋’ค ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊พธ์–ด ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ Java Virtual Machine(JVM)์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด C ๊ณ„์—ด ์–ธ์–ด๋“ค์€ ์œˆ๋„์šฐ์—์„œ ๋นŒ๋“œํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ทธ๋Œ€๋กœ ๋ฆฌ๋ˆ…์Šค๋‚˜ macOS์—์„œ ์‹คํ–‰ํ•˜๋ ค ํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€๋งŒ Java๋กœ ์ž‘์„ฑ ๋œ ํ”„๋กœ๊ทธ๋žจ์€ ํ”Œ๋žซํผ์— ๋งž๋Š” JVM๋งŒ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด ๋ฌธ์ œ ์—†์ด ๋™์ž‘ํ•œ๋‹ค. ์ด๋Š” Java ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ํ”Œ๋žซํผ์ด ์•„๋‹Œ ๊ฐ€์ƒ๋จธ์‹ ์— ์ข…์†์ ์ด๋ผ๋Š” ์ , ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ์ฃผ์ฒด๊ฐ€ ์šด์˜์ฒด์ œ๊ฐ€ ์•„๋‹Œ JVM์ด๋ผ๋Š” ์  ๋•Œ๋ฌธ์ด๋ฉฐ ์ด๋Ÿฌํ•œ ์ ์„ ํ†ตํ‹€์–ด Java๋Š” ํ”Œ๋žซํผ ์ข…์†์„ฑ์ด ๋‚ฎ์€ ์–ธ์–ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

JVM ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ•˜๋‚˜์˜ ์–ธ์–ด๋งŒ์„ ๊ณ ์ง‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๊ฐ€ ์œ ๋ฆฌ(์ตœ๊ทผ ์œ ํ–‰ํ•˜๋Š” ๋น…๋ฐ์ดํ„ฐ ๋“ฑ)ํ•œ ๋ถ€๋ถ„์€ Scala๋กœ ์ž‘์—…ํ•˜๋ฉฐ, ๊ฒฌ๊ณ ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋Œ€๊ทœ๋ชจ ํ†ตํ•ฉ์ด ํ•„์š”ํ•œ ๊ณณ์€ Java๋กœ ์ž‘์—…ํ•œ ๋’ค ์ด๋“ค์„ ์„œ๋กœ ํ•ฉ์ณ์„œ ์šด์˜ํ•˜๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค. (Java์—์„œ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ Scala์—์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.) ์•ˆ๋“œ๋กœ์ด๋“œ ์ชฝ์—์„œ๋Š” ํฌ๋ฆฌํ‹ฐ์ปฌํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋ถ€ํ„ฐ Kotlin์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ์•„์ง€๊ณ  ์žˆ๋‹ค.

์‹ค์ œ ํ˜„์—…์—์„œ๋Š” Java๋ฅผ ๋น„๋กฏํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ธ๊ธฐ ์–ธ์–ด๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์žฅ๋‹จ์ ์„ ์ž˜ ์•Œ์•„๋‘๋Š”๊ฒŒ ์ข‹๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์— ๋Œ€ํ•ด ๋งน๋ชฉ์ ์œผ๋กœ ์ฐฌ์–‘/๋น„ํŒํ•˜๋Š” ํƒœ๋„๋ณด๋‹ค๋Š” ํ™˜๊ฒฝ์ด๋‚˜ ์ฃผ์–ด์ง„ ์ž‘์—…์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์ ํ•ฉํ•œ ์–ธ์–ด๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธํ•˜์šฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

PC์—์„œ ์ž๋ฐ” ๋Ÿฐ๋„ˆ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•  ๋•Œ ๋œจ๋Š” ์ฐฝ์— '30์–ต๊ฐœ ๊ธฐ๊ธฐ์—์„œ Java ์‚ฌ์šฉ'์ด๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋‚˜์˜จ๋‹ค.

7.1. ์žฅ์ [ํŽธ์ง‘]

7.1.1. ์ˆ˜๋งŽ์€ ๊ฐœ๋ฐœ์ž์™€ ๋ ˆํผ๋Ÿฐ์Šค[ํŽธ์ง‘]

๋‚˜์˜จ์ง€๋„ ์˜ค๋ž˜ ๋˜์—ˆ๊ณ , ๋‹ค๋ฅธ ์ตœ์‹  ์–ธ์–ด์— ๋น„ํ•ด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ์š•์„ ๋จน๋Š” Java๊ฐ€ ๊ทธ๋ž˜๋„ ํ•ญ์ƒ ์ƒ์œ„๊ถŒ์„ ์œ ์ง€ํ•˜๋Š” ์ด์œ ๋Š” ๋ฐ”๋กœ ์ˆ˜๋งŽ์€ ๊ฐœ๋ฐœ์ž์™€ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ํƒ€ ์–ธ์–ด๋ฅผ ์ „๋ฌธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค๋„ Java ์ •๋„๋Š” ํ•  ์ค„ ์•ˆ๋‹ค๊ณ  ํ•  ์ •๋„๋กœ ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ  ๋Œ€์ค‘์ ์ด๋‹ค. ๋Œ€์ค‘์ ์ธ ์–ธ์–ด๋ผ์„œ ์ฐธ๊ณ  ์ž๋ฃŒ๋‚˜ ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ๋งŽ๊ณ , ๊ทธ๋Ÿฌํ•œ ์ž๋ฃŒ๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ์ˆ˜๋งŽ์€ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ๋“ค์ด ์ง„ํ–‰๋˜์–ด์™”๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๋ถ€๋ถ„์—์„œ ์•ˆ์ •์„ฑ์ด ์ž…์ฆ๋˜์—ˆ๋‹ค. ์ฆ‰, ์•ˆ์ •์ ์ธ ์ธ๋ ฅํ’€์„ ์œ ์ง€ํ•˜๋ฉด์„œ, ์•Œ๋ ค์ง„ ์œ„ํ˜‘์„ ์ œ๊ฑฐํ•˜๊ณ  ์šด์˜ ๋…ธํ•˜์šฐ๊ฐ€ ๋งŽ์€ ๊ฒ€์ฆ๋œ ์–ธ์–ด๋ผ๋Š” ๊ฒƒ.

ํ•˜์ง€๋งŒ ๊ฒ€์ฆ๋˜์—ˆ๋‹ค๋Š” ๊ฑด ๋ฐ˜๋Œ€๋กœ ๋งํ•˜์ž๋ฉด ์˜ค๋ž˜๋˜์—ˆ๋‹ค๋Š” ๋œป์ด๊ธฐ๋„ ํ•˜๋‹ค. ์ตœ๊ทผ์—๋Š” Java์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋ถˆ๋งŒ์ด ๋ˆ„์ ๋œ ํƒ“์ธ์ง€ JavaScript๋‚˜ Python ๊ฐ™์€ ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝํ–ฅ์ด ๊ฐ•ํ•˜๋‹ค. ๊ตญ๋‚ด์—์„œ๋Š” ์ „์ž์ •๋ถ€ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์กด์žฌ ๋•Œ๋ฌธ์ธ์ง€ ์•„์ง๋„ ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ์˜ ์ฃผ ์–ธ์–ด๋กœ Java๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝํ–ฅ์ด ๊ฐ•ํ•˜์ง€๋งŒ, ์„ธ๊ณ„์ ์œผ๋กœ๋Š” ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ์—์„œ Java๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๋น„์ค‘์€ ๋†’์ง€ ์•Š์€ ํŽธ์ด๋‹ค.[12]

๊ตญ๋‚ด์—์„œ์˜ ์–ธ์–ด ์™ธ์ ์ธ ์žฅ์ ์€ ๋ฐ”๋กœ ๊ฐœ๋ฐœ์ž ๊ตฌ์ธ์˜ ์šฉ์ด์„ฑ์ด๋‹ค. ๊ตญ๋‚ด์—์„œ Java ๊ฐœ๋ฐœ์ž์˜ ์ธ๋ ฅํ’€์ด ํƒ€ ์–ธ์–ด๋ณด๋‹ค ๋” ํฐ ์ด์œ ๋Š” ์•ž์„œ ๋งํ–ˆ๋˜ ์ „์ž์ •๋ถ€ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์กด์žฌ ๋•Œ๋ฌธ์ด๊ธฐ๋„ ํ•˜๊ณ , ๊ทธ ๋•Œ๋ฌธ์— Java ๊ฐœ๋ฐœ์ž๋ฅผ ์ •๋ถ€์—์„œ ๊ตญ๋น„์ง€์›์œผ๋กœ ๋Œ€๊ฑฐ ์–‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ธฐ๋„ ํ•˜๋‹ค. ์ƒ๋‹น์ˆ˜์˜ ์ •๋ถ€ ํ•˜์ฒญ ํ”„๋กœ์ ํŠธ๊ฐ€ Java์™€ ์ „์ž์ •๋ถ€ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค. ์ด๋Ÿฐ ์ด์œ  ๋•Œ๋ฌธ์— ๊ตณ์ด ์ •๋ถ€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ Java ๊ฐœ๋ฐœ์ž๋ฅผ ๊ตฌ์ธํ•˜๊ธฐ ์‰ฌ์› ๊ณ , ๋” ๋งŽ์€ ํ”„๋กœ์ ํŠธ๊ฐ€ Java๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋” ๋งŽ์€ Java ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋” ๋งŽ์€ ์ธ๋ ฅ์ด ์œ ์ž…๋˜๋Š” ์ผ์ข…์˜ ์„ ์ˆœํ™˜ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค. ์ทจ์—… ์‚ฌ์ดํŠธ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค๋ฅธ ๋ถ„์•ผ๋ณด๋‹ค Java ๊ฐœ๋ฐœ์ž๋ฅผ ๊ตฌ์ธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ๊ฑด ์ด ๋•Œ๋ฌธ์ด๋‹ค. ์‚ฌ๋žŒ์„ ๊ตฌํ•˜๊ธฐ๋„ ์‰ฝ๊ณ , ์ง์žฅ์„ ๊ตฌํ•˜๊ธฐ๋„ ์‰ฝ๋‹ค. ์˜์–ด๊ถŒ ๊ตญ๊ฐ€์— ๋น„ํ•ด ๊ณต์œ ๋˜๋Š” ์ž๋ฃŒ๊ฐ€ ๋น„๊ต์  ๋ถ€์กฑํ•œ ๊ตญ๋‚ด์—์„œ๋„ JSP, Spring์— ๊ด€ํ•œ ์ž๋ฃŒ๋งŒํผ์€ ๋†’์€ ํ€„๋ฆฌํ‹ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋Œ€๋กœ ํ•  ์ค„ ์•„๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„ ๊ฒฝ์Ÿ๋ ฅ์ด ๋–จ์–ด์ง€๋Š” ๋ฉด๋„ ์žˆ๋‹ค. ๋ช‡๋ช‡ ํšŒ์‚ฌ์—์„œ๋Š” Java ๊ฐœ๋ฐœ์ž์— ๋Œ€ํ•œ ๋ณด์ˆ˜๋‚˜ ๊ธฐํƒ€ ๋Œ€์šฐ๊ฐ€ ์ข‹์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŽ๋‹ค๋Š” ๊ฒƒ์€ ์ทจ์—…์ด๋‚˜ ๊ตฌ์ธ ๋ฉด์—์„œ๋Š” ์žฅ์ ์ด์ง€๋งŒ, ๋‹ค๋ฅธ ์ธก๋ฉด์—์„œ๋Š” ๋‹จ์ ์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

๊ธฐ์กด์˜ Java๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Java๊ฐ€ ์“ฐ์ธ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ๋ก€๋Š” ์นด์นด์˜ค๋ฑ…ํฌ๊ฐ€ ์žˆ๋‹ค. ํ•œ์ •๋œ ์‹œ๊ฐ„ ๋•Œ๋ฌธ์— Java ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋˜ ๊ฒฝ์šฐ๋‹ค.#

7.1.2. ๋น„๊ต์  ๋†’์€ ์ƒ์‚ฐ์„ฑ[ํŽธ์ง‘]

์˜ค๋Š˜๋‚  ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ์น˜์™€ ๋‹ค๋ฃจ๋Š” ๊ฒƒ๋“ค์ด ํฌ๊ณ  ๋ณต์žกํ•ด์ง€๋ฉด์„œ ์ƒ์‚ฐ์„ฑ๊ณผ ํผํฌ๋จผ์Šค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, C/C++ ๊ฐ™์€ ์–ธ์–ด๋Š” ์ƒ์‚ฐ์„ฑ์ด ๋„ˆ๋ฌด ๋–จ์–ด์ง€๊ณ  ๊ด€๋ฆฌ๋„ ํž˜๋“ค์–ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ์ž‘์—…์ด ํž˜๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋ฌด๋ฆฌ ์ปดํ“จํ„ฐ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ฐœ๋‹ฌํ•œ๋‹ค๊ณ  ํ•ด๋„ ์„ฑ๋Šฅ์ด ๋” ์ข‹์•„์ง€๋ฉด ์ ์  ๋” ๋ณต์žกํ•œ ๊ฒƒ์„ ๋‹ค๋ฃจ๊ณ , ๊ทธ๊ฒƒ์ด ์ƒˆ๋กœ์šด ํ‘œ์ค€์ด ๋˜๋ฉด์„œ ํ•˜๋“œ์›จ์–ด์˜ ์†๋„ ํ–ฅ์ƒ์ด ๋ฌด์ƒ‰ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ๊ทธ ์™€์ค‘์— ๋‚˜ํƒ€๋‚œ ๊ฒŒ ๋ฐ”๋กœ Java๋‹ค. C/C++์™€ ๋น„์Šทํ•œ ๋ฌธ๋ฒ•์œผ๋กœ ์ง„์ž… ์žฅ๋ฒฝ๋„ ๋‚ฎ๊ณ , ๊ฐ์ฒด ์ง€ํ–ฅ์„ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋กœ์šฐ ๋ ˆ๋ฒจ ์ž‘์—…๋“ค์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋Š” ํ•˜์ด ๋ ˆ๋ฒจ ์–ธ์–ด์ด๋ฉด์„œ, ํผํฌ๋จผ์Šค๋„ ๋‹ค๋ฅธ ํ•˜์ด ๋ ˆ๋ฒจ ์–ธ์–ด๋“ค์— ๋น„ํ•ด ๋น ๋ฅธ ํŽธ์ด๋‹ค. ๊ฑฐ๊ธฐ์— ํ˜ธํ™˜์„ฑ๊นŒ์ง€! ๋“ฑ์žฅํ•˜์ž๋งˆ์ž ์ˆœ์‹๊ฐ„์— ๋Œ€์„ธ๊ฐ€ ๋œ ๊ฒƒ๋„ ๋ฌด๋ฆฌ๋Š” ์•„๋‹ˆ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ๋“ฑ์ด ์ผ๋ฐ˜ํ™”๋˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ๋„ ์ ์ฐจ ์ค‘์š”ํ•œ ๊ฐœ๋…์„ ์–ธ์–ด ์•ˆ์œผ๋กœ ์ˆจ๊ธฐ๊ณ  ์‚ฌ์šฉ์ž์—๊ฒ ๊ทธ๊ฒƒ์„ ๊ฐ„ํŽธํžˆ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ œ๊ณตํ•˜๋Š” ์ถ”์„ธ๋กœ ํ˜๋Ÿฌ๊ฐ€๊ณ  ์žˆ๋Š”๋ฐ, Java๋Š” ์—ฌ๊ธฐ์— ์ •ํ™•ํ•˜๊ฒŒ ๋ถ€ํ•ฉํ•˜๋Š” ์–ธ์–ด์˜€๋˜ ๊ฒƒ. ๋‹ค๋งŒ ์ตœ๊ทผ ์ธ๊ธฐ๋ฅผ ๋Œ๊ณ  ์žˆ๋Š” Python์ด๋‚˜ Go ๊ฐ™์€ ์–ธ์–ด์— ๋น„ํ•˜๋ฉด Java์˜ ์ƒ์‚ฐ์„ฑ์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ์€ ํŽธ์ด๋‹ค.

7.1.3. ๊ธฐ๊ธฐ ํ˜ธํ™˜์„ฑ[ํŽธ์ง‘]

์žฅ์ ์œผ๋กœ๋Š”, ํ•ด๋‹น ์šด์˜์ฒด์ œ์— Java Virtual Machine(JVM)์„ ์„ค์น˜ํ•˜๋ฉด Java๋กœ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์€ ์–ด๋–ค ์ปดํ“จํ„ฐ์—์„œ๋„ ์™„๋ฒฝํžˆ ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค. ๊ฐ€์ƒ๋จธ์‹ ์ด ๊ฐ๊ฐ์˜ ์šด์˜์ฒด์ œ์— ๋งž์ถฐ์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์™„๋ฒฝํžˆ ๋˜‘๊ฐ™์ด ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์ œ์ž‘๋˜๋Š” ๋•. ๊ฐ€์ƒ๋จธ์‹  ์—†๋Š” ์šด์˜์ฒด์ œ๋ผ๋ฉด ์•„์˜ˆ Java ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒ ์ง€๋งŒ, ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ๋Š” ์ฃผ์š” OS์šฉ์˜ ๊ฐ€์ƒ ๋จธ์‹ ์„ ๋ฐœํ‘œํ•˜๊ณ  ์žˆ๊ณ , IBM, ํœด๋ ›ํŒฉ์ปค๋“œ ๋“ฑ์˜ ํšŒ์‚ฌ๋Š” ์ง์ ‘ ์ž์‚ฌ ์šด์˜์ฒด์ œ์šฉ JDK/JVM์„ ์ œ์ž‘ํ•˜์—ฌ ๋ฐœํ‘œํ•˜๋ฉฐ, ์ด๋“ค๊ณผ ์ƒ๊ด€์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ํŠนํ™”๋œ ์„ฑ๋Šฅํ–ฅ์ƒ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ JVM์„ ๋งŒ๋“ค์–ด์„œ ๋ฐœํ‘œํ•˜๋Š” ํšŒ์‚ฌ๋„ ์กด์žฌํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋ถ€๋ถ„์€ ๋ณดํ†ต ๋‹จ์ ์œผ๋กœ ๊ผฝํžˆ์ง€ ์•Š๋Š”๋‹ค. ์˜คํžˆ๋ ค ์—ฌ๋Ÿฌ ์šด์˜์ฒด์ œ์— ๋ฐœ ๋ฒŒ๋ฆฌ๋Š” ์—…์ฒด๋ผ๋ฉด ์œˆ๋„์šฐ์šฉ, ๋งฅ์šฉ ๋“ฑ์„ ๋”ฐ๋กœ ์ œ์ž‘ํ•  ํ•„์š” ๋”ฐ์œ„๊ฐ€ ์—†์ด "๊ทธ๋ƒฅ ํ•˜๋‚˜ ๋งŒ๋“ค๋ฉด ๋!"์ด๋ผ๊ณ  Java ์ดˆ์ฐฝ๊ธฐ์— ํ™๋ณด๋˜์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์–ธ์–ด๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ ํ”Œ๋žซํผ๋งˆ๋‹ค ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๊ธฐ๋Šฅ์ด๋‚˜ ์ž‘๋™์— ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์ด ๊ฒฐ๊ตญ์€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ทธ๋Œ€๋กœ ๋‹ค๋ฅธ ๋ฐ์—์„œ ๋Œ๋ฆด ๋•Œ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•œ๋‹ค. JVM์˜ ์žฅ์ ์€ ๊ทธ๋‚˜๋งˆ ์ด๋Ÿฐ ๋ถ€๋ถ„๋“ค์ด ๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด์„œ ๋งค์šฐ ์ ์€ ํŽธ์ด๋ผ๋Š” ์ ์ด๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ, ๋Œ€๋ถ€๋ถ„ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ๊ทธ๋Ÿฌํ•˜๋“ฏ ํƒ€๊ฒŸ ํ”Œ๋žซํผ์„ ์ธ์ง€ํ•˜์—ฌ ํŠน์ • ํ”Œ๋žซํผ์—์„œ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ์‹์œผ๋กœ ์ฝ”๋”ฉ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฃผ๋กœ java.nio ํŒจํ‚ค์ง€์— ์†ํ•œ API ์—์„œ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, OS X ์—์„œ๋งŒ ์ผ๋ถ€ ํŠน์ดํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” MIDI ๊ด€๋ จ API ๋˜ํ•œ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ์†ํ•œ๋‹ค. Java์˜ ๋ชจํ† ๋Š” Write once, run everywhere(ํ•œ ๋ฒˆ ์งœ์„œ, ์–ด๋””์„œ๋‚˜ ์‹คํ–‰ํ•˜๋ผ)์ธ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ์ด๋ฅผ ๋น„๊ผฌ์•„ Write once, test everywhere(ํ•œ ๋ฒˆ ์งœ์„œ, ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ํ…Œ์ŠคํŠธํ•˜๋ผ)๋ผ๊ณ  ๋งํ•˜๊ณค ํ•œ๋‹ค.

C๋‚˜ C++์—์„œ๋„ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํ˜•ํƒœ๋กœ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํƒ€๊ฒŸ ํ”Œ๋žซํผ๊ณผ ํ•ด๋‹น ํ”Œ๋žซํผ์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•ด์„œ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๋‚˜์„œ #define, #if ๋“ฑ ์ „์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์จ์„œ ๊ฐ ํƒ€๊ฒŸ ํ”Œ๋žซํผ์— ๋งž๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ–ˆ๋‹ค. ์ด์™€ ๋‹ฌ๋ฆฌ, Java๋Š” ๋‹จ์ผ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ์ƒ์„ฑ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํด๋ž˜์Šค ํŒŒ์ผ์„ JVM์ด ์กด์žฌํ•˜๋Š” ํ™˜๊ฒฝ์ด๋ผ๋ฉด ์–ด๋””์„œ๋‚˜ (๋Œ€๋ถ€๋ถ„์€) ์ถ”๊ฐ€ ์ปดํŒŒ์ผ์ด๋‚˜ ์ˆ˜์ •์ž‘์—… ์—†์ด ๊ทธ๋Œ€๋กœ ๋˜‘๊ฐ™์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ฐจ์ด์ ์ด๋‹ค. ๊ธฐ์—… ์ž…์žฅ์—์„œ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์„ ๋ณด์žฅํ•ด์ฃผ๋Š” Java๋Š” ๋งค๋ ฅ์ ์ธ ์–ธ์–ด์˜€๋‹ค.

JVM ์œ„์—์„œ ๊ตฌ๋™ ๊ฐ€๋Šฅํ•œ ์–ธ์–ด๋Š” Java ์™ธ์—๋„ ์กด์žฌํ•˜๋Š”๋ฐ, ์ด ์–ธ์–ด๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด Java์™€ ๋™์ผํ•œ ์ˆ˜์ค€์˜ ํ˜ธํ™˜์„ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.[13] ๊ตฌ๊ธ€์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์˜ ์ฐจ์„ธ๋Œ€ ์–ธ์–ด๋กœ ๋ฐ€์–ด์ฃผ๋Š” Kotlin์ด ๋Œ€ํ‘œ์ ์ธ ์ผ€์ด์Šค๋‹ค. Java์˜ ๊ฐœ๋ฐœ ์ฃผ์ฒด์ธ Oracle์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” GraalVM์ด๋ผ๋Š” ํ•œ๊ตญ์–ด์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ์–ด๋–ค ์š•์„ค๊ณผ ๊ด€๊ณ„ ์—†๋‹ค ํ”„๋ ˆ์ž„์›Œํฌ๋„ ์žˆ๋‹ค. ์ด ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” C++๋„ JVM ์œ„์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์š”์ฆ˜์€ ํ•˜๋“œ์›จ์–ด์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๋™๋˜์–ด์•ผ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹ˆ๋ผ๋ฉด, ๋˜๋Š” ๋ฉ”์ธ ๋กœ์ง์€ ์„œ๋ฒ„์—์„œ ๋Œ์•„๊ฐ€๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ œ๊ณตํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด JVM๋ณด๋‹ค๋Š” ์›น ๊ธฐ์ˆ ์„ ์ด์šฉํ•œ ๋ฐฉ์‹์ด ๋” ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ๋‹ค. ์•„์˜ˆ ์–ด๋””์—์„œ๋‚˜ ๋™์ผํ•œ ๋™์ž‘์„ ๋ณด์ฆํ•˜๋Š” ์›น ์‚ฌ์ดํŠธ์˜ ํ˜•์‹์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ํ•˜๊ฑฐ๋‚˜, ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์˜ UI๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” React Native ๋˜๋Š” Flutter ๋“ฑ์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ „์ž๋Š” ์›น ๊ฐœ๋ฐœ์—์„œ ์ฃผ๋กœ ์“ฐ์ด๋Š” JavaScript๋ฅผ ์ด์šฉํ•˜๊ณ , ํ›„์ž๋Š” ๊ตฌ๊ธ€์—์„œ ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์šฉ๋„๋กœ ๋งŒ๋“  Dart๋ผ๋Š” ์–ธ์–ด๋ฅผ ์ด์šฉํ•œ๋‹ค. ์ด ์™ธ์— ๊ฒŒ์ž„์ด๋‚˜ 3D ๋ Œ๋”๋ง์ด ํ•„์š”ํ•œ ์•ฑ์˜ ๊ฒฝ์šฐ ๊ฒŒ์ž„ ์—”์ง„์„ ์ด์šฉํ•œ๋‹ค.

7.1.4. ์•ˆ์ •์„ฑ[ํŽธ์ง‘]

๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด ๋†’์€ ์•ˆ์ •์„ฑ์„ ๊ผฝ๊ณ  ์žˆ๋‹ค. ์šฐ์„  C๋‚˜ C++์— ์•ˆ์ •์„ฑ ๋ฌธ์ œ๊ฐ€ ์ œ๊ธฐ๋˜๋Š” ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ž[14] ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์ง์ ‘์ ‘๊ทผ ํ•จ์ˆ˜๋“ค์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์—ฌ๊ธฐ์— C++๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋‹ค์ค‘ ์ƒ์†์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŠน์„ฑ ์ค‘ ํ•˜๋‚˜์ธ '์ƒ์†'์˜ ์ž์œ ๋„๋ฅผ ํ™• ๋–จ์–ดํŠธ๋ฆฌ๋Š” ๊ฒƒ์ด๊ธฐ์— ์–ธ๋œป ๋ณด๊ธฐ์—๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์  ๊ด€์ ์— ์œ„๋ฐฐ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋‚˜, ๋ฐ˜๋Œ€๋กœ ์˜คํžˆ๋ ค ์ด๊ฒŒ ๋” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋ชฉ์  ์ž์ฒด๊ฐ€ ์žฌ์‚ฌ์šฉ์„ ํ†ตํ•œ ์ƒ์‚ฐ์„ฑ์˜ ํ–ฅ์ƒ๊ณผ ๊ด€๋ฆฌ ์ƒ์˜ ์ด์ ์ธ๋ฐ, ๋‹ค์ค‘ ์ƒ์†์€ ์ž˜๋ชป ์‚ฌ์šฉํ•  ์‹œ ๊ทน๋„๋กœ ๋ณต์žกํ•˜๊ฒŒ ๊ผฌ์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์œ„ํ—˜์„ฑ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๋ฌผ๋ก  ์ฝ”๋“œ ๊ด€๋ฆฌ์˜ ์ธก๋ฉด์—์„œ๋„ ๋‹ค์ค‘์ƒ์†์— ์˜ํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋Š” ์ข‹์ง€ ์•Š๋‹ค. ์ˆ˜์ค€ ๋†’์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๋ฉด ์ด ๋ฌธ์ œ๋„ ์ž˜ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Java๋Š” ์•„์˜ˆ ๋ฏธ์—ฐ์— ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์ค‘์ƒ์†์„ ์–ธ์–ด ์ŠคํŽ™์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํƒํ–ˆ๋‹ค.[15]

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋Œ€์šฉ๋Ÿ‰์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ƒ๋Œ€์ ์œผ๋กœ C/C++๋ณด๋‹ค ์•ˆ์ •์ ์ธ ๋ชจ์Šต์„ ๋ณด์ผ ๋•Œ๋„ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ ๊ฒฝ์šฐ์— JVM์ด ์‹œ์ž‘๋  ๋•Œ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋จผ์ € ํ†ต์œผ๋กœ ์žก์•„๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž์ฃผ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ•ด์ œํ•˜๋Š” C/C++ ํ”„๋กœ๊ทธ๋žจ์€ ์˜คํžˆ๋ ค Java๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋А๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž ์—†์ด ๋งค๋ฒˆ ํž™ ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›๋Š” ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•˜๋Š” ๋ง์ด๊ณ [16], ์‹ค์ œ C/C++ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” jemalloc ๋“ฑ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์—ฌ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

7.1.5. ์†Œ์Šค ์ฝ”๋“œ ๊ฐ€๋…์„ฑ[ํŽธ์ง‘]

๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ์ฒซ์งธ ๋ชฉ์ ์€ '์ข€ ๋” ์ธ๊ฐ„ ์นœํ™”์ ์ธ' ์ฝ”๋“œ์˜ ์ž‘์„ฑ์„ ๋•๋Š” ๋ฐ ์žˆ๋‹ค. ๊ธฐ๊ณ„์–ด๊ฐ€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์ง„ํ™”ํ•˜๊ณ  ๊ทธ๊ฒƒ์ด C์–ธ์–ด๋กœ ์ง„ํ™”ํ•œ ๋ฐฐ๊ฒฝ์—๋Š” '์‚ฌ๋žŒ์ด ๋” ์‰ฝ๊ฒŒ ์ฝ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ'๊ฐ€ ์žˆ๋‹ค. Java๋Š” ๋™์‹œ๊ธฐ์— ๋ฐœํ‘œ๋œ ๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด ์ฝ”๋“œ๊ฐ€ ๋ช…๋ฃŒํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋›ฐ์–ด๋‚ฌ๋‹ค. C++์€ ์–ด๋ ค์šด ๋ฌธ๋ฒ•์œผ๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ์ด๋ฆฌ์ €๋ฆฌ ๊ผฌ์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ , ํŠนํžˆ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜์˜ ์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Generic Programming) ๊ฐœ๋…์ด ์ฝ”๋“œ ๋‚œ๋…ํ™”์— ๊ฒฐ์ •ํƒ€๋ฅผ ๋‚ ๋ ธ๋Š”๋ฐ Java๋Š” ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์„ ๋ฐฐ์ œํ•˜๊ณ  ์˜ค๋กœ์ง€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ์ฒด์˜ ์กฐ์ž‘์„ ํ—ˆ์šฉํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์„ ์ง€์ผœ๋ƒˆ๋‹ค.[17]

C++ ํ…œํ”Œ๋ฆฟ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ ์‚ฌ์šฉ ์šฉ๋„์ธ ์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋„ ์ œ๋„ค๋ฆญ์ด๋ผ๋Š” ๋” ์‰ฌ์šด ๊ฐœ๋…์„ ๋„์ž…ํ•ด์„œ(Java 5๋ถ€ํ„ฐ ์ง€์›) ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ•ด์น˜์ง€ ์•Š๊ณ  ์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋„์ž…ํ–ˆ๋‹ค.[18][19] ํ‚ค์›Œ๋“œ์— ์•ฝ์–ด ์‚ฌ์šฉ์„ ์ž์ œํ•œ ์ ๋„ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ์ƒ์Šน์— ๊ธฐ์—ฌํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ Java๊ฐ€ ๋กœ์šฐ๋ ˆ๋ฒจ ์–ธ์–ด์ธ C๋‚˜ C++๋ณด๋‹ค ์ฝ๊ธฐ ์‰ฝ๋‹ค๊ณ  ํ•ด์„œ[20] ์ผ๋ฐ˜์ ์ธ ์‹œ๊ฐ์—์„œ ๋ณด๊ธฐ์— ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์–ธ์–ด๋Š” ์•„๋‹Œ๋ฐ, ๊ทธ ์ด์œ ๋Š” ๋‹จ์  ํ•ญ๋ชฉ์—์„œ ์–ธ๊ธ‰๋œ ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ธธ์ด ๋ฌธ์ œ ๋•Œ๋ฌธ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ Java๊ฐ€ ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์–ธ์–ด๋กœ ํ†ต์šฉ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. Kotlin์ด ๊ตฌ๊ธ€์— ์˜ํ•ด Java์˜ ๋Œ€์ฒด ์–ธ์–ด๋กœ ์„ ์ •๋œ ์ด์œ ๋Š” ์˜ค๋ผํด๊ณผ์˜ ์ €์ž‘๊ถŒ ๊ด€๋ จ ๋ถ„์Ÿ ๋•Œ๋ฌธ๋„ ์žˆ์ง€๋งŒ, Java ๋ฌธ๋ฒ•์˜ ์žฅํ™ฉํ•จ๊ณผ ๊ฐ€๋…์„ฑ์˜ ๋ถˆํŽธํ•จ์—์„œ ๊ธฐ์ธํ•œ ๊ฒƒ์ด๊ธฐ๋„ ํ•˜๋‹ค. ๋น„์œ ๋ฅผ ํ•˜์ž๋ฉด Java๋Š” ์ž…๋ฌธ ์žฅ๋ฒฝ์„ ๋‚ฎ์ถ˜ ๋Œ€์‹  ์ด๋Ÿฐ์ €๋Ÿฐ ์ œ์•ฝ์„ ์šธํƒ€๋ฆฌ์ฒ˜๋Ÿผ ๋‘˜๋Ÿฌ์นœ ์–ธ์–ด์ด๊ณ , C/C++๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์ž์œ ๋„๋ฅผ ๋ถ€์—ฌํ•œ ๋Œ€์‹  ์ž…๋ฌธ ์žฅ๋ฒฝ์„ ๋†’์—ฌ๋ฒ„๋ฆฐ ์–ธ์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

7.2. ๋‹จ์ [ํŽธ์ง‘]

7.2.1. ์†๋„ ๋ฌธ์ œ[ํŽธ์ง‘]

์—ฌ๊ธฐ์„œ ์ž ์‹œ ์œ ์˜ํ•  ์ ์€, ๋А๋ฆฌ๋‹ค๋Š” ๋‚ด์šฉ์€ ๋Œ€๋ถ€๋ถ„ C/C++, Pascal, Fortran ๊ฐ™์€ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ์–ธ์–ด์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ์˜ ์ด์•ผ๊ธฐ์ด๋‹ค. Java๊ฐ€ C/C++๋ณด๋‹ค 2~3๋ฐฐ ๋А๋ฆฌ๋‹ค๊ณ  ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋“ค์— ๋น„ํ•ด์„œ๋Š” ๊ทธ๋ฆฌ ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค. 1.4๋ฒ„์ „์—์„œ JIT ์ปดํŒŒ์ผ ์ง€์›์ด ๋ผ์„œ ๋งŽ์ด ๋นจ๋ผ์กŒ๋‹ค.[21] ํŠนํžˆ ์ธํ„ฐํ”„๋ฆฌํ„ฐ/์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ Java์— ๋น„ํ•ด์„œ๋„ ํ›จ์”ฌ ๋А๋ฆฌ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์ž. ์˜ˆ๋ฅผ ๋“ค์–ด ์š”์ฆ˜ ์ธ๊ธฐ์žˆ๋Š” Python์€ C๋ณด๋‹ค ์ˆ˜์‹ญ ๋ฐฐ ๋А๋ฆฌ๋‹ค. ๊ทธ๋‚˜๋งˆ ๋น ๋ฅด๋‹ค๊ณ  ํ•˜๋Š” JavaScript๋„ Java์— ๋น„ํ•ด์„œ 2๋ฐฐ ์ •๋„ ๋А๋ฆฌ๋‹ค.

๋˜ํ•œ ์†๋„ ๊ด€๋ จ ๋ฌธ์ œ๋Š” ํ•˜๋“œ์›จ์–ด์˜ ์„ฑ๋Šฅ์ด ์ ์  ์ข‹์•„์ง€๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€๋ฉด์„œ ํฌ์„๋˜๊ณ  ์žˆ๋‹ค. ์ฒ˜์Œ Java๊ฐ€ ๋‚˜์™”์„ ๋•Œ์ธ 1995๋…„๋งŒ ํ•˜๋”๋ผ๋„, ๋А๋ฆฐ ์„ฑ๋Šฅ ๋•Œ๋ฌธ์— ๊ทธ๋‹ค์ง€ ๋งŽ์ด ์“ฐ์ด์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ–ˆ์ง€๋งŒ ํ˜„์žฌ Java๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ณณ ์ค‘ ํ•˜๋‚˜๋Š” ์•ˆ์ •์„ฑ๊ณผ ์ผ์ • ์ˆ˜์ค€ ์ด์ƒ์˜ ์„ฑ๋Šฅ์ด ์š”๊ตฌ๋˜๋Š” ์„œ๋ฒ„๋‹ค. Java๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ณด๋‹ค ๋А๋ฆฌ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.
7.2.1.1. JVM ๋กœ๋”ฉ ์†๋„ ๋ฌธ์ œ[ํŽธ์ง‘]
Java์˜ ์‹ฌ๊ฐํ•œ ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š”, ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ Java Virtual Machine์ด ๋ฐ˜๋“œ์‹œ ์™„๋ฒฝํ•˜๊ฒŒ ๋กœ๋”ฉ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์˜ ์ดˆ๊ธฐ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ์™„์ „ํ•œ ์ด์ง„ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ๋‹จ์ ์ธ ์˜ˆ๋กœ, ์•„๋ฌด๊ฒƒ๋„ ์•ˆํ•˜๊ณ  ์ฝ˜์†” ํ™”๋ฉด์— ๋‹ฌ๋ž‘ "Hello, World!" ๋ผ๊ณ  ์ฐ๊ธฐ๋งŒ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋ฐ์—๋„ thread๊ฐ€ 10๊ฐœ ์ฏค ๋œฌ๋‹ค. ํŠนํžˆ ๊ทธ ํ”„๋กœ๊ทธ๋žจ์— AWT, Swing, SQL ๊ฐ™์ด ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋Œ์–ด๋“ค์ด๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ด๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋Ÿฐํƒ€์ž„ ์ž์ฒด๊ฐ€ ์•„์ง ๋ชจ๋“ˆํ™”๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ์ ์—์„œ ๊ธฐ์ธํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์š”์ฆ˜ ๊ฐ™์€ ๊ณ ์‚ฌ์–‘ ์ปดํ“จํ„ฐ์—์„œ๋Š” ์•„์ฃผ ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋Œ์–ด์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ฒด๊ฐ์ƒ ์ฐจ์ด๋Š” ํฌ๊ฒŒ ๋‚˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ Java 9๋ถ€ํ„ฐ๋Š” ๋“œ๋””์–ด ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ๋Œ์–ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์งค ์ˆ˜ ์žˆ๋‹ค.
7.2.1.2. ๊ฐ€์ƒ ๋จธ์‹  ๋ฐ”์ดํŠธ์ฝ”๋“œ ์‹คํ–‰ ์†๋„ ๋ฌธ์ œ[ํŽธ์ง‘]
C/C++, Pascal, Fortran๊ณผ ๊ฐ™์€ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ, Java๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์šด์˜์ฒด์ œ์™€ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์— JVM์ด๋ผ๋Š” ๋‘๊บผ์šด ๊ณ„์ธต์ด ํ•˜๋‚˜ ๋” ์ž๋ฆฌ์žก๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ ํƒ€๊ฒŸ ํ”Œ๋žซํผ์šฉ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋˜์–ด ์‹คํ–‰๋œ๋‹ค. ์ด๋กœ ์ธํ•ด ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์–ธ์–ด์™€ ๋น„๊ตํ•˜์—ฌ ์‹คํ–‰์†๋„์™€ ์„ฑ๋Šฅ์— ์ผ์ • ๋ถ€๋ถ„ ์†์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜๋ฐ–์— ์—†๋‹ค. AWT, Swing ๊ฐ™์€ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋А๋ฆฐ ๊ฒƒ์„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ๋„ ๊ณง ๊นจ๋‹ฌ์•˜๊ณ , ์ตœ์ดˆ ๋ฐœํ‘œ์—์„œ 2๋…„ ํ›„์ธ 1998๋…„๋ถ€ํ„ฐ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ JVM์— ๋‚ด์žฅํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ƒ๋‹น ๋ถ€๋ถ„ ๊ฐœ์„ ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ทธ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋’ท๋ฐ›์นจํ•ด์ค˜์•ผ ํ•œ๋‹ค. ํ˜„์žฌ๋Š” ๋ณดํ†ต ๊ฐ™์€ ๊ธฐ๋Šฅ/์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ C++๋ณด๋‹ค 2~3๋ฐฐ ์ •๋„์˜ ์‹œ๊ฐ„์ด ๋” ํ•„์š”ํ•˜๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๊ฝค ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์ง€์†์ ์œผ๋กœ ๊ฐœ์„ ๋˜์–ด ์™”๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์‹คํ–‰์†๋„ ์ž์ฒด์— ๋Œ€ํ•œ ์ด์Šˆ๋Š” ์˜ˆ์ „์— ๋น„ํ•ด ๋งŽ์ด ์ค„์–ด๋“  ํŽธ์ด๋‹ค.

์ด ๋ฌธ์ œ๋Š” Java 9์—์„œ '์„ ํ–‰ ์ปดํŒŒ์ผ'์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฐœ์„ ๋  ์˜ˆ์ •์ด๋‹ค. JIT ์ปดํŒŒ์ผ๋กœ ์‹คํ–‰๊ณผ ๋™์‹œ์— ์ปดํŒŒ์ผ์„ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ธฐ์กด์˜ ์ •์  ์ปดํŒŒ์ผ์ฒ˜๋Ÿผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฆฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋ฉด, ์ปดํŒŒ์ผ ์†๋„๋Š” ๋‹ค์†Œ ๋А๋ ค์ง€์ง€๋งŒ ์‹คํ–‰ ์†๋„๋Š” ๋นจ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. ๋ฌผ๋ก  ์ปดํŒŒ์ผ ํ•œ ๋ฒˆ์œผ๋กœ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
7.2.1.3. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ์˜ํ•œ ์‹คํ–‰ ์ง€์—ฐ ๋ฌธ์ œ[ํŽธ์ง‘]
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ์˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋ฆฌ์ง• ํ˜„์ƒ[22]์ด ์ดˆ๋ฐ˜๋ถ€ํ„ฐ ์ง€์†์ ์œผ๋กœ Java๋ฅผ ๊ดด๋กญํ˜”๋‹ค. ๋ฉ€์ฉกํ•˜๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•  ํ”„๋กœ๊ทธ๋žจ์ด ์ˆœ๊ฐ„์ ์œผ๋กœ ๋š ๋š ๋Š๊ธฐ๋Š” ๋“ฏํ•œ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ. ์˜ค๋Š˜๋‚  Java์˜ ๋ฌธ์ œ๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ณ€ํ™˜์œผ๋กœ ์ธํ•œ ์†๋„ ์ €ํ•˜๋ณด๋‹ค ์ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ์˜ํ–ฅ์ด ๋” ํฌ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์ง€์›ํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๊ธด ํ•˜์ง€๋งŒ ์‹คํ–‰์†๋„์™€ ํ•จ๊ป˜ Java ์ดˆ๊ธฐ๋ถ€ํ„ฐ ๊พธ์ค€ํžˆ ๋ฌธ์ œ๋กœ ๊ผฝํ˜€์˜จ ๊ฒƒ์œผ๋กœ, ๋ฒ„์ „์ด ์˜ฌ๋ผ๊ฐˆ ๋•Œ๋งˆ๋‹ค ๋‹ค์–‘ํ•˜๊ฒŒ ๊ฐœ์„ ๋˜์–ด ์™”๋‹ค.

Java 8๋ถ€ํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ผ์œผํ‚ค๋˜ ๋ฉ”์†Œ๋“œ ์˜์—ญ์˜ PermGen Area๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ static ์ธ์Šคํ„ด์Šค์™€ ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ์ž์—ด๋„ GC์˜ ๋Œ€์ƒ์ด ๋˜๋„๋ก ๋ฐ”๋€Œ์—ˆ์œผ๋ฉฐ, ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ, ๋ฐฐ์—ด์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋Š” ๋™์  ๋ฆฌ์‚ฌ์ด์ง•์ด ๊ฐ€๋Šฅํ•œ Metaspace๋กœ ์ด๋™์‹œ์ผœ ์‹œ์Šคํ…œ ํž™ ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค. ๋•๋ถ„์— JVM ํž™ ์˜์—ญ์˜ ๊ณต๊ฐ„์ด ๋Š˜์–ด๋‚˜๊ณ  PermGen Area๋ฅผ ์Šค์บ”/์‚ญ์ œํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ ธ GC์˜ ์„ฑ๋Šฅ์ด ๋Œ€ํญ ํ–ฅ์ƒ๋˜์—ˆ๋‹ค.

7.2.2. ๋ถˆํŽธํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ[ํŽธ์ง‘]

๋‹ค๋ฅธ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋“ค์ฒ˜๋Ÿผ, Java ์—ญ์‹œ try~catch๋ฌธ์œผ๋กœ ๋Œ€ํ‘œ๋˜๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ ์ฐจ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ข‹์€ ๊ธฐ๋Šฅ์ด์ง€๋งŒ... ์œ ๋… Java๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€๋Š” ๋‹ฌ๋ฆฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•œ ์˜ˆ์™ธ(Exception์„ ์ง์ ‘ ์ƒ์†ํ•˜๋Š” ์˜ˆ์™ธ ํด๋ž˜์Šค)๊ฐ€ ๋“ฑ์žฅํ•œ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์„ ์–ธ์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ์กฐ์ฐจ ๊ฑฐ๋ถ€ํ•œ๋‹ค. ์›๋ž˜ ์˜๋„๋Š” ์ฒ ์ €ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‹ˆ๊นŒ ๋งŒ์•ฝ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ƒํ™ฉ์— ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€...์˜€์œผ๋‚˜, ๊ฒฐ๊ตญ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—” ๊ท€์ฐฎ๋‹ค๋Š” ์ด์œ ๋กœ, ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์™ธ์ธ Exception ๋” ๋ง‰๋‚˜๊ฐ€๋ฉด Throwable ํ•˜๋‚˜๋งŒ ์จ์„œ ๋„˜์–ด๊ฐ€๋ฒ„๋ฆฌ๊ณ [23] ํญํƒ„ ๋Œ๋ฆฌ๋“ฏ ๋„˜๊ธฐ๊ธฐ๋งŒ ํ•˜๊ฑฐ๋‚˜(์˜ˆ์™ธ ๋˜์ง€๊ธฐ๋งŒ ํ•˜๊ณ  try~catch ์•ˆํ•˜๋ฉด ๋ฉ”์†Œ๋“œ๋ฅผ ๋Œ๊ณ  ๋Œ๋‹ค๊ฐ€ ์ฝฐ๊ด‘!), ์˜ˆ์™ธ ๋‚˜๋“  ๋ง๋“  ๋ฌด์‹œํ•ด ๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€์žฅ ํ”ํ•˜๋‹ค.[24] ์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ํ”ํ•ด ๋น ์ง„ ๋‚˜๋จธ์ง€ ์ด๋”ด ์‹์œผ๋กœ ์“ธ ๊ฑฐ๋ฉด ์™œ ๋„ฃ์—ˆ๋ƒ๊ณ  ๊นŒ๋Š” ์‚ฌ๋žŒ๋„ ๋งŽ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์„ ์–ธ์ด ํ•„์š”์—†๋Š”, ๊ฒ€์‚ฌ ์•ˆํ•˜๋Š” ์˜ˆ์™ธ๋„ Java์— ๋งŽ๋‹ค(...).[25] ๊ทธ๋ฆฌ๊ณ  C++์ด๋‚˜ C# ๊ฐ™์ด ์˜ˆ์™ธ๊ฐ€ ์žˆ๋Š” ์–ธ์–ด๋ผ๋„ Java์ฒ˜๋Ÿผ ์˜ˆ์™ธ๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š” ๋ณ„๋กœ ์—†๋‹ค. ๋‘ ์–ธ์–ด๋Š” ๋ชจ๋“  ์˜ˆ์™ธ๊ฐ€ ๊ฒ€์‚ฌ ์•ˆํ•˜๋Š” ์˜ˆ์™ธ์ด๋‹ค. ์‚ฌ์‹ค ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ท€์ฐจ๋‹ˆ์ฆ˜๊ณผ ๊ฒฌ๊ณ ํ•จ์„ ๋งž๋ฐ”๊พธ๋Š” ์ผ์ธ๋ฐ, ์•ˆํ•  ์‚ฌ๋žŒ์€ ๋ฌธ๋ฒ•์œผ๋กœ ๊ฐ•์ œํ•ด๋„ ์•ˆํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” ์›ํ•˜๋Š” ์—๋Ÿฌ๋งŒ try-catch๋ฌธ์œผ๋กœ ๋ฝ‘์•„๋‚ด๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ƒฅ ์•„๋ฌด ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์–ธ์–ด๋ฅผ ์ ‘ํ•˜๋˜ ์‚ฌ๋žŒ์ด Java๋ฅผ ์ ‘ํ•˜๋ฉด ๊ทธ ํŠน์œ ์˜ ๊ฒฝ์ง๋œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ์— ๋ถˆํŽธํ•ดํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์˜คํžˆ๋ ค ๋ช…์‹œ์ ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌํ•˜๋Š”๋ฐ, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์„ ๋•Œ ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธ๋œ ์˜ˆ์™ธ๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ตฌํ˜„ ํด๋ž˜์Šค์—์„œ ๊ทธ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์—†๋‹ค! ํŠนํžˆ, Java์—์„œ ์ œ๊ณตํ•˜๋Š” Iterator ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” throws ์„ ์–ธ ๋”ฐ์œ„๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— Iterator๋ฅผ ๊ตฌํ˜„๋ฐ›์•˜์„ ๋•Œ ๋ช…์‹œ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์—†๋‹ค. ์ด ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด RuntimeException ๊ณ„์—ด์„ ์“ธ ์ˆ˜๋ฐ–์— ์—†๋Š” ์ƒํ™ฉ์ด ํŽผ์ณ์ง„๋‹ค.

๋‹ค๋งŒ, ์ƒ๊ธฐ์˜ ๋‚ด์šฉ์€ ์‹ค๋ฌด์  ์ ‘๊ทผ์— ์˜ํ•œ ๋‚ด์šฉ์ด๊ณ , ์‹ค์ œ๋กœ๋Š” ์ด๋Š” ์žฅ์ ์œผ๋กœ๋„ ์ทจ๊ธ‰๋˜๊ธฐ๋„ ํ•œ๋‹ค. Assert๋ฌธ์„ ์ž์œ ์ž์žฌ๋กœ ์“ฐ๋ฉด์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฑฐ๋‚˜ ์ฝ”๋”ฉ๊ณผ ๋™์‹œ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ข… ์˜ˆ์™ธ๋“ค์„ ์ธ์ง€ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฑธ ์žŠ์–ด๋จน๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๋Œ€์ฒ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.[26]

7.2.3. ์†Œ์Šค ์ฝ”๋“œ ๊ธธ์ด[ํŽธ์ง‘]

Java๋Š” ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด ์ƒ๋‹นํžˆ ๊ธด ํŽธ์ด๋‹ค. ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ง ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด ์ž…๋ ฅํ•ด์•ผ ํ•  ์–‘์ด ๋งŽ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด ์ผ๋ช… Boilerplate๋ผ๊ณ  ๋ถ€๋ฅด๋Š”, ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์งœ๊ธฐ ์œ„ํ•ด์„œ ๋ฌด์กฐ๊ฑด ์˜๋ฌด์ ์œผ๋กœ ์ž‘์„ฑํ•ด ์ฃผ์–ด์•ผ๋งŒ ํ•˜๋Š” ์„œ์‹๊ณผ ์ฝ”๋“œ์˜ ๋ถ„๋Ÿ‰์ด ๋งŽ๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์—์„œ๋Š” puts("Hello") ์ •๋„๋กœ ๋๋‚ฌ์„ ์ผ์„ Java์—์„œ๋Š”
class Main {
    public static void main(String args[]) {
        System.out.println("Hello");
    }
}

์ด๋งŒํผ์„ ์จ์•ผ ํ•œ๋‹ค. ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” C์–ธ์–ด ์ฝ”๋“œ๋Š”
#include<stdio.h>

int main() { 
    puts("Hello");
}
[27]
ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ
print("Hello")

HQ9+์˜ ๊ฒฝ์šฐ H
์œ„ํ‚ค์ฑ…์— ์žˆ๋Š” Hello World ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชฉ๋ก์ด๋‚˜, ๋‚˜๋ฌด์œ„ํ‚ค ๋‚ด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/์˜ˆ์ œ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ํ•˜์ด๋ ˆ๋ฒจ ์–ธ์–ด ์ค‘์—์„œ๋Š” ์ฝ”๋“œ๋Ÿ‰์ด ๊ธด ํŽธ์ธ ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์˜ค์ฃฝํ•˜๋ฉด ์ด๋Ÿฐ ํฌ์ŠคํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ๊นŒ. ๋ฌผ๋ก  ์ด๊ฑด Java์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๊ณ  ๋งˆ์„ธ๋ผํ‹ฐ ๋ฌธ์ œ[28]๋ผ๊ณ  ์•Œ๋ ค์ง„ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ณผ์š•์ด ๋ถ€๋ฅธ ์ฐธ์ƒ์ด์ง€๋งŒ ์ฝ”๋“œ์— ์œ ์—ฐ์„ฑ์„ ์กฐ๊ธˆ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์จ ๋„ฃ์–ด์•ผ ํ•  ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ํ•˜๋‚˜์˜ ์˜ˆ์‹œ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ € ํฌ์ŠคํŠธ์˜ 5๋…„์ฐจ ์ฝ”๋“œ๋Š” Spring์˜ ํŒจ๋Ÿฌ๋””๋‹ค. Java ์ดํ›„์— ๋‚˜์˜จ ์ฐจ์„ธ๋Œ€ ์–ธ์–ด๋“ค์€ ๊ฐ™์€ ์ˆ˜์ค€์˜ ์œ ์—ฐ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ๋“ค์—ฌ์•ผ ํ•  ๋…ธ๋ ฅ์˜ ์–‘์ด ํ›จ์”ฌ ์ ๋‹ค.

์ด๋ ‡๊ฒŒ ์˜๋„์ ์ธ ์žฅํ™ฉํ•จ(verbosity)์„ ์ถ”๊ตฌํ•˜๋Š” ์–ธ์–ด ์„ค๊ณ„์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋ฌธํ™”๊ฐ€ ์•„์ด๋Ÿฌ๋‹ˆํ•˜๊ฒŒ๋„ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์žฅ์ ์ด ๋ฌด์ƒ‰ํ•˜๊ฒŒ ๊ฐ€๋…์„ฑ์„ ์ €ํ•ดํ•˜๋Š” ์š”์ธ์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋”๋ผ๋„ ์ˆ˜์‹ญ ์ค„์˜ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๋Š” Java ์ฝ”๋“œ๋ณด๋‹ค ๋‹ค๋ฅธ ์–ธ์–ด์˜ ์ฝ”๋“œ๊ฐ€ ๋ณดํ†ต์€ ๋” ์ฝ๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ.

๊ฒŒ๋‹ค๊ฐ€ ๋‹ค๋ฅธ ํ•˜์ด๋ ˆ๋ฒจ ์–ธ์–ด(C#, Python, Ruby ๋“ฑ)์— ๋น„ํ•ด ๋ฌธ๋ฒ•์  ์„คํƒ•(Syntactic sugar)[29]์ด ์ ์–ด ์ด์ชฝ์—์„œ ๋„˜์–ด์˜ค๋ฉด ๊ฝค ๋ถˆํŽธํ•ดํ•˜๋Š” ํŽธ. ํ•˜์ง€๋งŒ ์ตœ๊ทผ Java 8๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ ๋žŒ๋‹ค ํ‘œํ˜„์‹, ์ŠคํŠธ๋ฆผ[30] ๋“ฑ์„ ์ง€์›ํ•˜๋Š” ์‹์œผ๋กœ ๋ฌธ๋ฒ•์  ํŽธ๋ฆฌํ•จ์„ ๋Š˜๋ ค๊ฐ€๋Š” ์ถ”์„ธ๋‹ค. ์ด ํ๋ฆ„์€ ๋‹ค์Œ Java 9์—์„œ ๋”์šฑ ๊ฐ•ํ™”๋  ๊ฒƒ์œผ๋กœ ๋ณด๋Š” ์ถ”์„ธ.[31]

๊ทธ๋Ÿฌ๋‚˜ ๋ฌด์กฐ๊ฑด ์ฝ”๋“œ๋Ÿ‰์ด ๋งŽ๋‹ค๊ณ  ํ•ด์„œ ๋‚˜์œ ๊ฒƒ๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์ผ๋‹จ Java๋Š” ํด๋ž˜์Šค ์ง€ํ–ฅ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„์ด๊ณ , ์ปค๋‹ค๋ž€ ํ”„๋กœ์ ํŠธ ๋‹จ์œ„์—์„œ ๋ดค์„ ๋• ์˜คํžˆ๋ ค ํด๋ž˜์Šค์™€ ๋ฉ”์†Œ๋“œ, ๋ณ€์ˆ˜์˜ ์†Œ์†์ด ํ™•์‹คํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ๊ธˆ๋ฐฉ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถ•์•ฝ์–ด์˜ ์‚ฌ์šฉ์„ ์ตœ๋Œ€ํ•œ ์ž์ œํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๋‹ค.[32] Python์ด๋‚˜ JavaScript ๊ฐ™์€ ๋™์  ํƒ€์ž… ์–ธ์–ด๋“ค์€ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—๋Š” ์ข‹๊ฒ ์ง€๋งŒ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ถˆํŽธํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

JetBrains์—์„œ ๊ฐœ๋ฐœํ•œ Kotlin์€ ๋ฐ”๋กœ ์ด Java์˜ ์–ธ์–ด์  ๋ถˆํŽธํ•จ์„ ์ตœ์†Œํ™”ํ•˜๋ ค๊ณ  ๋‚˜์˜จ ์ƒˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋ฉฐ, ์นด์นด์˜ค์—์„œ๋„ ์นด์นด์˜คํ†ก ๋ฉ”์‹œ์ง• ์„œ๋ฒ„์— Kotlin์„ ๋„์ž…ํ•˜๋Š” ๋“ฑ(#) Java๋ฅผ Kotlin์œผ๋กœ ๋Œ€์ฒดํ•˜๋ ค๋Š” ์›€์ง์ž„์ด ์กฐ๊ธˆ์”ฉ ๋‚˜ํƒ€๋‚˜๋‹ค๊ฐ€, ์ดํ›„์—๋Š” ์•„์˜ˆ ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์—์„œ ์•ฑ ๊ฐœ๋ฐœ ๊ธฐ๋ณธ ์–ธ์–ด๋กœ ์ง€์ •๋˜๊ธฐ๊นŒ์ง€ ํ–ˆ๋‹ค.

7.2.4. ์–ธ์–ด์  ๋ถˆํŽธํ•จ[ํŽธ์ง‘]

7.2.4.1. ๋ช…์‚ฌํ˜• ์‚ฌ๊ณ ๋ฅผ ๊ฐ•์ œ[ํŽธ์ง‘]
Java๋Š” ๋ชจ๋“  ๋™์ž‘์ด ๊ฐ์ฒด ์ƒ์œ„์—์„œ ์ด๋ฃจ์–ด์ง€๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ช…์‚ฌํ˜•์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•์ œํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋กœ Java์—๋Š” ์ „์—ญ ํ•จ์ˆ˜๊ฐ€ ์—†๊ณ  ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ์–ด๋–ค ํด๋ž˜์Šค์— ์ข…์†๋˜์–ด์žˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ์ ์ธ ๋ถ€๋ถ„์„ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์ž์ž˜ํ•œ ํด๋ž˜์Šค๋“ค์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค.

์ด๋Ÿฐ ๋ช…์‚ฌ ์ค‘์‹ฌ์  ์ƒ๊ฐ์€ ํ™•์‹คํžˆ ๋งŽ์€ ๊ฒฝ์šฐ ํŽธ๋ฆฌํ•˜๋‚˜ ๋™์‚ฌ ์ค‘์‹ฌ์œผ๋กœ ์ƒ๊ฐํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ๋„ ์ƒ๊ฐ๋ณด๋‹ค ํ”ํ•˜๋‹ค๋Š” ๊ฒŒ ๋ฌธ์ œ. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, ํ€ต์†ŒํŠธ๋ฅผ Java์—์„œ ์—„๊ฒฉํ•˜๊ฒŒ ์˜๋„๋œ ๋Œ€๋กœ ์งœ๋ ค๋ฉด quickSort(array)๋ผ๋Š” ํ•จ์ˆ˜ ๋Œ€์‹  QuickSorter๋ผ๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž์— ๋ฐฐ์—ด์„ ๋„ฃ๊ณ , ๊ทธ ์ƒ์„ฑ์ž๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด run()์„ ํ˜ธ์ถœํ•˜์—ฌ ๋™์ž‘์‹œ์ผœ์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.[33]

๋””์ž์ธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ ์–ด๋А ์ •๋„ ๋™์‚ฌํ˜• ์‚ฌ๊ณ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธด ํ•˜๋‹ค. ๋””์ž์ธ ํŒจํ„ด์—์„œ ํ•ต์‹ฌ์  ์ง€์œ„๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ๋†ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ๋‹นํžˆ ๋™์‚ฌ์ ์ธ ๊ด€์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. Java์˜ ๋ฆฌํ”Œ๋ ‰์…˜ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ณ . ํ•˜์ง€๋งŒ ์• ์ดˆ์— ์–ธ์–ด๊ฐ€ ์ƒ๊ฒจ๋จน์€ ๊ฒƒ ์ž์ฒด๊ฐ€ ๋ช…์‚ฌ ๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐํ•˜๊ฒŒ ๋””์ž์ธ๋œ ๊ฑด ์‚ฌ์‹ค์ด๋‹ค. Java์˜ ๊ทผ๊ฐ„์„ ์ด๋ฃจ๋Š” ํ‘œ์ค€ java.lang ํด๋ž˜์Šค์™€ java.util ํด๋ž˜์Šค๋ฅผ ๋™์‚ฌํ˜• ์‚ฌ๊ณ ๋ฐฉ์‹์œผ๋กœ ์žฌ์ž‘์„ฑํ•˜๊ธฐ ์ „์—๋Š” ํž˜๋“ค๋‹ค. ์ด ์žฌ์ž‘์„ฑ ์‚ฝ์งˆ์€ ์ด๋ฏธ Scala์—์„œ ํ•ด ๋†จ์œผ๋ฏ€๋กœ Java์˜ ์ด๋Ÿฌํ•œ ํŠน์ง•์ด ์‹ซ๋‹ค๋ฉด Scala๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค.
7.2.4.2. ํด๋กœ์ € ๋ฏธ์ง€์›[ํŽธ์ง‘]
๋ช…์‚ฌํ˜• ์ƒ๊ฐ์„ ๊ฐ•์ œํ•œ๋‹ค๋Š” ๊ฒƒ์˜ ์—ฐ์žฅ์„ . ๋ฒ„์ „ 7 ์ดํ•˜์˜ Java๋Š” ํ•จ์ˆ˜๋ฅผ ์ผ๊ธ‰ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์–ด๋–ค '๋™์ž‘'์„ ๋„˜๊ฒจ์•ผ ํ•  ๋•Œ๋Š” ๊ทธ ๋™์ž‘์„ ์ถ”์ƒํ™”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ๊ฒƒ์„ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•œ ๋’ค, ๊ฐ์ฒด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์•ผ ํ•œ๋‹ค. ๋ฐ˜๋ฉด์— ํด๋กœ์ €๋ฅผ ์ง€์›ํ•˜๋Š” ์–ธ์–ด๋Š” ๊ทธ๋ƒฅ ํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๋ฉด ๋œ๋‹ค.

Java์˜ ์ˆ˜๋งŽ์€ ๋””์ž์ธ ํŒจํ„ด๋“ค์€ ์ด ํด๋กœ์ € ๋ฏธ์ง€์› ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๋งŒ๋“ค์–ด์กŒ๋‹ค. ์œ ๋ช…ํ•œ GoF์˜ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ์ „๋žต ํŒจํ„ด์ด๋‚˜ ์˜ต์ €๋ฒ„ ํŒจํ„ด์˜ ์šฉ๋„๋งŒ ์ƒ๊ฐํ•ด๋ด๋„, ์ด๋“ค์€ ์• ์ดˆ๋ถ€ํ„ฐ ํด๋กœ์ €๊ฐ€ ์ง€์›๋˜์—ˆ๋‹ค๋ฉด ํŒจํ„ด์ด๋ผ๋Š” ๊ฑฐ์ฐฝํ•œ ์ด๋ฆ„์„ ๋ถ™์ผ ๊ฐ€์น˜์กฐ์ฐจ ์—†๋Š” ๋ช‡ ์ค„์˜ ์˜ˆ์ œ ์ฝ”๋“œ์— ์ง€๋‚˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ด๋‹ค.

Java๋ผ๋Š” ์–ธ์–ด๊ฐ€ ์„ค๊ณ„๋  ๋‹น์‹œ์—๋Š” ํด๋กœ์ €๋ผ๋Š” ๊ฐœ๋… ์ž์ฒด๊ฐ€ LISP, Haskell, ML ๋“ฑ์˜ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ž์ฒด๋ฅผ ์—ฐ๊ตฌํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋งŒ ์•„๋Š” ๋ชน์‹œ ๋งˆ์ด๋„ˆํ•œ ๊ฐœ๋…์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ๊ธฐ์— ๋งŒ๋“ค์–ด์ง„ ๋‹ค๋ฅธ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค๋„ ํด๋กœ์ €๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์ง€๋Š” ์•Š์•˜๋‹ค. ๋”ฐ๋ผ์„œ ์„ค๊ณ„ ๊ฒฐํ•จ์ด๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜๋Š” ์—†๊ณ  ํ˜„๋Œ€์— ๋“ค์–ด์„œ ๋‹จ์ ์œผ๋กœ ๋ถ€๊ฐ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋Š” ํŽธ์ด ๋” ์ ์ ˆํ•˜๋‹ค.

Java 8์—์„œ๋Š” ๋žŒ๋‹ค ํ‘œํ˜„์‹์„ ์ง€์›ํ•จ๊ณผ ๋”๋ถˆ์–ด ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ๋ผ๋Š” ๋ฐฉ์‹(this::add)์„ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” Functional Interface๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๋Š”๋ฐ, Functional Interface๋Š” ์ˆ˜์‹ญ์—ฌ ์ข…์ด ์žˆ์œผ๋ฉฐ ์ธ์ž๊ฐ€ ๋ณต์ˆ˜๊ฐœ์ธ ๊ฒƒ๋„ ๋‹น์—ฐํžˆ ์žˆ๊ณ , ํ•˜๋‚˜์˜ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ์จ๋„ ๋œ๋‹ค. ๋‹ค๋งŒ ์ž๋ฐ”์˜ ๋žŒ๋‹ค์‹์€ ๋ฐ”๊นฅ์— ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด ๊ทธ ๋ณ€์ˆ˜๊ฐ€ final์ด๊ฑฐ๋‚˜ final์„ ๋ถ™์—ฌ๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๋ณ€์ˆ˜๋“ค ๋ฟ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋žŒ๋‹ค์‹์ด ์ฃผ์œ„์— ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ '์ €์žฅ'ํ•  ์ˆ˜๋Š” ์žˆ์œผ๋‚˜ ๊ทธ๊ฒƒ์˜ ๊ฐ’์„ ๋ฐ”๊ฟ€์ˆ˜๋Š” ์—†๋‹ค.

java.util.function์— ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค (Functional Interface)์™€ ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” ์ถ”์ƒ ๋ฉ”์†Œ๋“œ ๋ช‡๊ฐœ๋ฅผ ๋‚˜์—ดํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
  • Predicate<T> โ‡’ boolean test(T)
  • Consumer<T> โ‡’ void accept(T)
  • Supplier<T> โ‡’ T get()
  • Function<T, U> โ‡’ U apply(T)
  • BiFunction<T, U, R> โ‡’ R apply(T, U)

๋ฌผ๋ก  ์œ„์™€ ๊ฐ™์€ ๋ช‡๋ช‡ ์ƒ์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋“ค์ด ์ง€์›๋˜์–ด๋„ ์–ธ์–ด์˜ ๊ตฌ์กฐ์  ํ•œ๊ณ„[34]๋กœ ์ธํ•ด ์ตœ์‹  ์–ธ์–ด๋“ค์— ๋น„ํ•ด ๊ทธ๋•Œ๊ทธ๋•Œ ํ•„์š”ํ•œ ๊ตฌ์กฐ์˜ ๋žŒ๋‹ค์‹์„ ์„ ์–ธํ•ด ์จ๋จน๊ธฐ๊ฐ€ ๋งค์šฐ ํ”ผ๊ณคํ•˜๋‹ค๋Š” ๋ฌธ์ œ์ ์€ ์—ฌ์ „ํ•˜๋‹ค.

8. ๊ฐœ๋ฐœํ™˜๊ฒฝ, JVM ์–ธ์–ด[ํŽธ์ง‘]

8.1. ๊ฐœ๋ฐœํ™˜๊ฒฝ[ํŽธ์ง‘]

Java์— ํŠน์ •ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€๋ฏธํ•ด์„œ ์›น์—์„œ ๋Œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ํ•œ ๊ฒƒ์ด Java Applet์ด๋‹ค. ์• ํ”Œ๋ฆฟ ํŠน์œ ์˜ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ActiveX๋ณด๋‹ค๋Š” ํ›จ์”ฌ ์•ˆ์ „ํ•˜๋‹ค๋Š” ์ด์œ ๋กœ ๋ฌผ ๊ฑด๋„ˆ์—์„œ๋Š” ์ธํ„ฐ๋„ท ๋ฑ…ํ‚น์ด๋‚˜ ๊ฒฐ์ œ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๊ทผ๋ฐ ์ƒ๋Œ€์ ์œผ๋กœ ์•ˆ์ „ํ•˜๋‹ค๋Š” ๊ฒƒ์ผ ๋ฟ, ์• ํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•œ ๊ฒฐ์ œ์‹œ์Šคํ…œ๋„ ํˆญํ•˜๋ฉด ๋šซ๋ ค์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณค ํ•œ๋‹ค(โ€ฆ). ๋”๊ตฐ๋‹ค๋‚˜ iOS์™€ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ํฌ๋กฌ๊ณผ ํŒŒ์ด์–ดํญ์Šค ๋“ฑ์˜ ๋ธŒ๋ผ์šฐ์ €๋“ค์ด NPAPI ์ง€์› ์ค‘๋‹จ ์„ ์–ธ์„ ํ•˜๊ณ , Java 9๋ถ€ํ„ฐ ์• ํ”Œ๋ฆฟ์˜ ๊ฐœ๋ฐœ์ด ์ค‘๋‹จ๋˜๋ฉด์„œ ๊ฒฐ๊ตญ ์ˆ˜๋ช…์ด ๋๋‚˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ ์€ ์ž๋ฐ” ์• ํ”Œ๋ฆฟ๋งŒ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋Œ€๋ถ€๋ถ„์˜ ๋ฆฌ์น˜ ์ธํ„ฐ๋„ท ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์˜ ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ž‘์„ ์œ„ํ•ด Java ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ทœ๊ฒฉ์œผ๋กœ Java ์„œ๋ธ”๋ฆฟ๊ณผ JSP(Java ์„œ๋ฒ„ ํŽ˜์ด์ง€)๊ฐ€ ์žˆ๋‹ค.[35] ์ฃผ๋กœ ๊ธฐ์—…์—์„œ Spring๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐœ์ธ ์›นํ˜ธ์ŠคํŒ…์—์„œ๋Š” ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋งŽ์ง€ ์•Š๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ Java๋ฅผ ์ง€์›ํ•˜๋Š” ์—ฌ๋Ÿฌ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ์„œ๋น„์Šค๊ฐ€ ์‹ผ ๊ฐ€๊ฒฉ์— ๋“ฑ์žฅํ•˜๊ณ  ์žˆ๊ณ , Java ๋ฟ๋งŒ์ด ์•„๋‹Œ JVM ์–ธ์–ด๋ฅผ ์ด๋Ÿฌํ•œ ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™ํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ๋Š˜๊ณ  ์žˆ๋‹ค.

Java Development Kit(Java ๊ฐœ๋ฐœ ๋„๊ตฌ)์„ ์„ค์น˜ํ•˜๋ฉด javac๋ผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ œ๊ณต๋œ๋‹ค. ํ•˜์ง€๋งŒ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ์ œ๊ณตํ•ด ์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ˜๋“œ์‹œ ๋ณ„๋„์˜ ๊ฐœ๋ฐœ์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์จ์•ผ ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ์ดํด๋ฆฝ์Šค, ๋„ท๋นˆ์ฆˆ, IntelliJ IDEA ๋“ฑ์ด ์žˆ๋‹ค. ๋งŒ์•ฝ ์ด๊ฒƒ๋“ค์„ ์•ˆ ์“ฐ๊ฒ ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด, ๋‹น์‹ ์—๊ฒŒ๋Š” ๋ฉ”๋ชจ์žฅ๊ณผ javac.exe๊ฐ€ ์žˆ์„ ๋ฟ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  Java๋Š” IDE ์—†์ด ํƒ€์ดํ•‘๋งŒ์œผ๋กœ ์งœ๊ธฐ์—” ๊ต‰์žฅํžˆ ๋ถˆํŽธํ•œ ์–ธ์–ด๋ผ๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์ž.[36] ์‹ค์ „ Java ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ๋‚˜ ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๋ฌผ ๋ฐฐํฌ ๋“ฑ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ๋กœ๋Š” ์•„ํŒŒ์น˜ ์†Œํ”„ํŠธ์›จ์–ด ์žฌ๋‹จ์—์„œ ๋งŒ๋“  Ant์™€ Maven, ๊ทธ ์ค‘์—์„œ๋„ Maven์ด ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ์ตœ๊ทผ์—๋Š” ์ด ๋‘ ๊ฐ€์ง€์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ Gradle์ด ๊ฐ๊ด‘์„ ๋ฐ›๊ณ  ์žˆ์œผ๋ฉฐ ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ์“ฐ์ธ๋‹ค.

TDD ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” Jenkins๋ฅผ ํ†ตํ•œ CI ๊ด€๋ฆฌ, SonarLint/SonarQube๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ๋ถ„์„, Maven์„ ํ†ตํ•œ ๋นŒ๋“œ ๊ด€๋ฆฌ, JaCoCo๋ฅผ ํ†ตํ•œ Code Coverage ๊ด€๋ฆฌ ๋“ฑ์ด ์žˆ๋‹ค.

8.2. JVM ์–ธ์–ด[ํŽธ์ง‘]

์ด์™ธ์— Java์™€ ๋˜‘๊ฐ™์ด Java ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ ์–ธ์–ด ๊ทœ๊ฒฉ์ด ๋‹ค๋ฅธ Scala์™€ Clojure๋ผ๋Š” ์–ธ์–ด๋“ค๋„ ์žˆ๋‹ค. Scala๋Š” 'Scalable Language'์—์„œ ๋”ฐ์™”๋Š”๋ฐ, Java์™€ ๋น„์Šทํ•œ ๋ถ€๋ถ„์ด ๋งŽ์œผ๋ฉฐ Java API๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค. ๋˜ํ•œ, syntactic sugar๊ฐ€ ๋งŽ๊ณ  ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์š”์†Œ๋“ค์„ ๊ฐ€์ ธ์™€์„œ Java์— ๋น„ํ•ด ์ƒ์‚ฐ์„ฑ๋„ ๋†’๋‹ค. ์ผ๋ก€๋กœ ์ผ์ผ์ด ํƒ€์ž…์„ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  var x === 1.5์™€ ๊ฐ™์ด ๋„ฃ์œผ๋ฉด ์•Œ์•„์„œ float ํ˜•์œผ๋กœ ์ถ”๋ก ํ•ด์ค€๋‹ค.[37] ๋˜, switch-case์˜ ํ™•์žฅํŒ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด ๋งค์นญ์„ ์ง€์›ํ•˜๋ฉฐ ํด๋กœ์ €๋„ ์ง€์›๋œ๋‹ค. ๋‹จ์ ์œผ๋กœ๋Š” ์ด๋Ÿฐ ๊ณ ์ˆ˜์ค€-๊ณ ์ƒ์‚ฐ์„ฑ์˜ ์–ธ์–ด์—์„œ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๊ฐ™์€ Java ์ฝ”๋“œ์— ๋น„ํ•ด ์•ฝ๊ฐ„ ๋А๋ฆฌ๋‹ค. Clojure๋Š” Java ํ”Œ๋žซํผ์—์„œ ๋™์ž‘ํ•˜๋Š” LISP์˜ ๋ฐฉ์–ธ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ Common Lisp์™€ Scheme๊ณผ ํ•จ๊ป˜ ์ฃผ์š” LISP ๋ฐฉ์–ธ ์ค‘ ํ•˜๋‚˜๋กœ ๊ผฝํžŒ๋‹ค. ์ด ์–ธ์–ด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Java API๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.

Java 6๋ถ€ํ„ฐ Scripting API๋ผ๋Š” ๊ฒƒ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. JVM ์–ธ์–ด ๊ตฌํ˜„์ฒด์—์„œ javax.scripting ๊ด€๋ จ API๋ฅผ ์ œ๊ณตํ•˜๋ฉด Java ์ฝ”๋“œ์—์„œ ๋™์ ์œผ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์—ฐ๋™ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ‘œ์ค€ API์ด๋‹ค.

8.2.1. ์œ ๋ช…ํ•œ JVM ์–ธ์–ด ๋ชฉ๋ก[ํŽธ์ง‘]

์•„๋ž˜์— ๋‚˜์—ด๋œ ์–ธ์–ด๋“ค์ด ์œ ๋ช…ํ•˜๋ฉฐ, Common LISP, Scheme, Pascal ๋“ฑ ์—ฌ๋Ÿฌ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋“ค์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.
  • Groovy: Java์— Python, Ruby, SmallTalk ๋“ฑ์˜ ํŠน์ง•์„ ๋ฒ„๋ฌด๋ฆฐ ๋™์  ํƒ€์ž… ์–ธ์–ด. 2003๋…„์— ๋“ฑ์žฅํ–ˆ๋‹ค.
  • JRuby: Ruby์˜ ๋Œ€๋ถ€๋ถ„์„ Java๋กœ ๊ตฌํ˜„ํ•œ ์–ธ์–ด ๊ตฌํ˜„์ฒด. ์—ญ์‹œ Java์™€ ํ˜ธํ™˜๋œ๋‹ค.
  • Jython: ํŒŒ์ด์ฌ์˜ Java ๊ตฌํ˜„์ฒด. JVM ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ๋”ฐ๋ผ์„œ Python ๋ชจ๋“ˆ๊ณผ ํ•จ๊ป˜ Java ํด๋ž˜์Šค, JAR ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฐธ๊ณ ๋กœ ๋กœ๊ณ ๋Š” Java์˜ ์ปคํ”ผ ์ปจ์…‰๊ณผ Python์˜ ๋ฑ€ ์ปจ์…‰์„ ์„ž์–ด์„œ ์ปคํ”ผ์ž”์—์„œ ๋ฑ€์ด ์—ฐ๊ธฐ์ฒ˜๋Ÿผ ํ”ผ์–ด๋‚˜์˜ค๋Š” ๋กœ๊ณ ๋‹ค(...)
  • Kotlin : IntelliJ IDEA๋ฅผ ๋งŒ๋“  JetBrains์—์„œ ๊ฐœ๋ฐœํ•œ JVM ์–ธ์–ด. Google I/O 2017์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ณต์‹ ์–ธ์–ด๋กœ ์ง€์ •๋˜์—ˆ๋‹ค.[38]
  • Rhino: JVM์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” JavaScript ์—”์ง„์œผ๋กœ, ๋ชจ์งˆ๋ผ ์žฌ๋‹จ์ด 100% Java๋กœ ๊ฐœ๋ฐœํ–ˆ๋‹ค. JavaScript์™€ Java์˜ API๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. Java 7 ์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.
  • Nashorn: ๋˜ ๋‹ค๋ฅธ JVM ์œ„์—์„œ ๋Œ์•„๊ฐ€๋Š” JavaScript ์—”์ง„์ด๋‹ค. Java 8๊ณผ ํ•จ๊ป˜ ๋“ฑ์žฅํ–ˆ๋‹ค. ์ฐธ๊ณ ๋กœ Nashorn ์€ Rhino(์ฝ”๋ฟ”์†Œ)์˜ ๋…์ผ์–ด๋‹ค.

9. ํ˜ผ๋™ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ๋“ค[ํŽธ์ง‘]

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript)
    JavaScript๋Š” Java์™€๋Š” ์•„๋ฌด ์ƒ๊ด€๋„ ์—†๋‹ค. ๋„ท์Šค์ผ€์ดํ”„์‚ฌ์—์„œ Mocha, LiveScript๋กœ ๊ฐœ๋ฐœํ•˜๋˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ 1996๋…„ ์ „ํ›„ ์—ดํ’์ด๋˜ Java์˜ ์œ ๋ช…์„ธ์— ๋ฌป์–ด๊ฐ€๊ธฐ์œ„ํ•ด Sun์—์„œ ์ƒํ‘œ๊ถŒ์„ ๋ผ์ด์„ ์Šคํ•ด JavaScript๋ผ๊ณ  ์ด๋ฆ„๋ถ™์˜€์„ ๋ฟ์ด๋‹ค. ์ด๋ฆ„ ํ•˜๋‚˜ ์ƒ๊ฐ์—†์ด ์ž˜๋ชป ๋ถ™์—ฌ์„œ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์„ ์ง€๊ธˆ๋„ ํ—ท๊ฐˆ๋ฆฌ๊ฒŒ ๋งŒ๋“œ๋Š” ๋Œ€ํ‘œ์ ์ธ ์ผ€์ด์Šค.
    ์ด๋ฆ„์„ ์ œ์™ธํ•œ ์—ฐ๊ด€์„ฑ์€ ํฌ๋ฐ•ํ•œ ํŽธ์ด์—ฌ์„œ ๊ณตํ†ต์ ์ด ์•„๋‹Œ ์ฐจ์ด์ ์„ ๋‚˜์—ดํ•˜๋Š”๊ฒŒ ํ›จ์”ฌ ๋น ๋ฅผ ์ •๋„๋‹ค. ๊ฐ™์€ C-์กฑ ์–ธ์–ด์ด๊ธด ํ•˜์ง€๋งŒ ๋ฌธ๋ฒ•์กฐ์ฐจ ๋ณ„๋กœ ๋น„์Šทํ•˜์ง€๋„ ์•Š์œผ๋ฉฐ[39], ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๊ฐœ๋… ๋˜ํ•œ ๋งŽ์ด ๋‹ค๋ฅด๋‹ค. ๊ธฐ์ดˆ ํŒจ๋Ÿฌ๋‹ค์ž„์ƒ ๋‹น์—ฐํ•œ ์š”์†Œ๋“ค์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋ฉด ๋‘˜์˜ ์œ ์‚ฌ์ ์€ ์˜ค์ง ๊ฐ์ฒด์ง€ํ–ฅ ๋ฟ์ธ๋ฐ ๊ทธ ๋งˆ์ €๋„ JavaScript๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋ฒ ์ด์Šค๋ผ ํด๋ž˜์Šค๋ฅผ ์“ฐ๋Š” Java์™€ ๋งŽ์ด ๋‹ค๋ฅด๋‹ค [ES6]. ๋˜ํ•œ Java๋Š” ์ •์  ํƒ€์ž… ์–ธ์–ด์ธ๋ฐ ๋ฐ˜ํ•ด JavaScript๋Š” ๋™์  ํƒ€์ž… ์–ธ์–ด๋‹ค. ์›น ์„œ๋ฒ„์šฉ ํŒŒ์ƒ ๊ทœ๊ฒฉ ์—ญ์‹œ JSP์™€ Node.js๋กœ ๋‹ค๋ฅด๋‹ค.
    ๋– ๋„๋Š” ๋ง๋กœ 'Java์™€ JavaScript์˜ ์ฐจ์ด๋Š” ์ธ๋„์™€ ์ธ๋„๋„ค์‹œ์•„์˜ ์ฐจ์ด์™€ ๊ฐ™๋‹ค'๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ธ๋„์™€ ์ธ๋„๋„ค์‹œ์•„๊ฐ€ ์ด๋ฆ„๋งŒ ๋น„์Šทํ•˜๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ๊ตญ๊ฐ€์ด๋“ฏ์ด[41] Java์™€ JavaScript๋„ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • Visual J++/Visual J#
    Visual J++์€ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ Java๋ฅผ ๋ณ€ํ˜•ํ•˜์—ฌ ์œˆ๋„์šฐ ์ „์šฉ์œผ๋กœ ๋งŒ๋“  ์–ธ์–ด. ์œ„์˜ JavaScript๋Š” ์ด๋ฆ„๋งŒ ๋ฐ”๊ฟจ์ง€๋งŒ ์ด๊ฑด Java ์ž์ฒด๋ฅผ ์œˆ๋„์šฐ์— ๋งž๋„๋ก ๋ณ€ํ˜•ํ•œ ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ๋ฌธ์— Java ๊ฐ€์ƒ๋จธ์‹  ์—†์ด ์œˆ๋„์šฐ์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๋Œ์•„๊ฐ€์ง€๋งŒ, ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ๋Š” ์ „ํ˜€ ๋Œ์•„๊ฐ€์ง€ ์•Š๋Š”๋‹ค. ๊ฑฐ๊ธฐ๋‹ค ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ์˜ ํ—ˆ๋ฝ์—†์ด ๋งˆ๊ตฌ ๋ณ€ํ˜•ํ•ด์„œ ์ผ๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์†กํฌ๋ฆฌ๋ฅผ ๋จน๊ณ  ๊ฐœ๋ฐœ์ด ์ค‘๋‹จ๋˜์—ˆ๋‹ค.
    ์ดํ›„ ์œˆ๋„์šฐ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ท๋„ท์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฉด์„œ ๋‹ท๋„ท ๊ธฐ๋ฐ˜์˜ Visual J#๋„ ๋งŒ๋“ค์—ˆ๋‹ค. Visual Studio 2005์— ํฌํ•จ๋˜์—ˆ์ง€๋งŒ ์ด๊ฒƒ๋„ ๊ฐœ๋ฐœ์ด ์ค‘๋‹จ๋˜์—ˆ๋‹ค. ์ด๋•Œ๋Š” ์ฌ์ด ์†Œ์†กํ•˜์ง€๋„ ์•Š์•˜๋Š”๋ฐ ์ค‘๋‹จ๋œ ๊ฒƒ์„ ๋ณด๋ฉด ์‹œ์žฅ์„ฑ์ด ์—†์—ˆ๋˜ ๋“ฏ ํ•˜๋‹ค. ์ด๋ฏธ ์ด ๋•Œ๋Š” C#์ด ์–ด๋А ์ •๋„ ์ž๋ฆฌ๋ฅผ ์žก์•˜๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜๋„ ์žˆ๊ณ .

10. ๊ตฌ๊ธ€ vs. ์˜ค๋ผํด: Java ์ €์ž‘๊ถŒ ๋ถ„์Ÿ[ํŽธ์ง‘]

Java๋ฅผ ์ฒ˜์Œ ๊ฐœ๋ฐœํ•œ ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ๋Š” ์˜ค๋ผํด์—๊ฒŒ ์ธ์ˆ˜๋˜์—ˆ๊ณ , 2010๋…„์— ์˜ค๋ผํด์€ ๊ตฌ๊ธ€์ด ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ Java API 37๊ฐœ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฌด๋‹จ ๋ณต์ œํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ์ด์œ ๋กœ ์†Œ์†ก์„ ์ œ๊ธฐํ–ˆ๋‹ค. ์˜ค๋ผํด์€ ๊ตฌ๊ธ€์ด Java๋ฅผ ์ด์šฉํ•ด OS๋ฅผ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ์ƒ์—…์  ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์œผ๋ฏ€๋กœ ์‚ฌ์ „์— ํ—ˆ๊ฐ€๋ฅผ ๋ฐ›์•˜์–ด์•ผ ํ–ˆ๋‹ค๋Š” ์ฃผ์žฅ์ด๊ณ , ๊ตฌ๊ธ€์€ Java API๊ฐ€ ์ €์ž‘๊ถŒ์ž์˜ ํ—ˆ๋ฝ ์—†์ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์ • ์ด์šฉ(Fair Use)์˜ ๋Œ€์ƒ์ด๋ผ๋ฉฐ ๋งž์„ฐ๋‹ค. ๊ทธ๋ฆฌ๊ณ  2018๋…„, ์žฅ์‹œ๊ฐ„์— ๊ฑธ์นœ ์†Œ์†ก์ „์€ ์˜ค๋ผํด์˜ ์Šน๋ฆฌ๋กœ ๊ฒฐ๋ก ๋‚ฌ๋‹ค. #

์žฌํŒ์˜ ํ๋ฆ„์„ ์ •๋ฆฌํ•˜์ž๋ฉด ์ด๋ ‡๋‹ค. 2012๋…„์— ์ด๋ฃจ์–ด์ง„ '์ €์ž‘๊ถŒ ์นจํ•ด'์— ๊ด€ํ•œ ์žฌํŒ 1์‹ฌ์—์„œ๋Š” ๊ตฌ๊ธ€์ด ์Šน์†Œํ•˜์˜€๊ณ , 2014๋…„ ํ•ญ์†Œ์‹ฌ์—์„œ๋Š” ์˜ค๋ผํด์ด ์Šน์†Œํ•˜์˜€์œผ๋ฉฐ 2015๋…„์—๋Š” ๊ตฌ๊ธ€์˜ ์ƒ๊ณ ๊ฐ€ ๊ธฐ๊ฐ๋˜์—ˆ๋‹ค. ์ดํ›„ 2016๋…„ '๊ณต์ • ์ด์šฉ'์— ๊ด€ํ•œ ์žฌํŒ 1์‹ฌ์—์„œ๋Š” ๊ตฌ๊ธ€ ์ธก์˜ ์ฃผ์žฅ์ด ๋ฐ›์•„๋“ค์—ฌ์ง€๋ฉฐ ๊ตฌ๊ธ€์ด ์Šน์†Œํ–ˆ์ง€๋งŒ, ๊ฒฐ๊ตญ 2018๋…„ ํ•ญ์†Œ์‹ฌ์—์„œ ๋‹ค์‹œ ์˜ค๋ผํด์ด ์Šน์†Œํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. #

ํ•ญ์†Œ์‹ฌ ์žฌํŒ๋ถ€์˜ ๊ฒฐ๋ก ์€ Java API ์—ญ์‹œ ์ €์ž‘๊ถŒ์ด ์กด์žฌํ•˜๋Š” ์—„์—ฐํ•œ ์ €์ž‘๋ฌผ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ์žฌํŒ๋ถ€๋Š” ๊ตฌ๊ธ€์ด Java API๋ฅผ ์ˆ˜์ • ์—†์ด ๊ทธ๋Œ€๋กœ ๊ธ์–ด๋‹ค๊ฐ€ ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋ชจ๋ฐ”์ผ OS ์‹œ์žฅ์„ ์ ๋ นํ•˜์˜€์œผ๋ฉฐ, ๋‹จ์ˆœํžˆ ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•œ ๊ฒŒ ์•„๋‹Œ ๋ณ„๋„์˜ ์šด์˜์ฒด์ œ์™€ ํ”Œ๋žซํผ์„ ๋ฌด๊ธฐ๋กœ ํ–ฅํ›„ ์˜ค๋ผํด์ด Java๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ์‹œ์žฅ์— ์ง„์ถœํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๊บพ์–ด๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์— Java์˜ ๋ฌด๋‹จ ์ด์šฉ์€ ๋ถˆ๊ณต์ •ํ•œ ํ–‰์œ„๋ผ๊ณ  ํŒ๊ฒฐํ–ˆ๋‹ค. ํ˜„์žฌ ๊ตฌ๊ธ€์ด ์˜ค๋ผํด์—๊ฒŒ ๋ฐฐ์ƒํ•ด์•ผ ํ•  ๊ธˆ์•ก์€ ์•ฝ 90์–ต ๋‹ฌ๋Ÿฌ์— ๋‹ฌํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๊ณ  ์žˆ๋‹ค.

์ด ํŒ๊ฒฐ์ด ๊ฐ€์ ธ๋‹ค ์ค„ ์—ฌํŒŒ์— ๋Œ€ํ•ด ์•ˆ๋“œ๋กœ์ด๋“œ ์ƒํƒœ๊ณ„๊ฐ€ ํฐ ์œ„๊ธฐ๋ฅผ ๋งž์ดํ–ˆ๋‹ค๋Š” ์‹œ๊ฐ์ด ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค ์†Œ์†ก๊ธฐ๊ฐ„ ๋™์•ˆ ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ์ด๋ฏธ ๋ชจ๋ฐ”์ผ OS ์‹œ์žฅ์„ iOS์™€ ํ•จ๊ป˜ 5:5๋กœ ์–‘๋ถ„ํ•˜๊ณ  ์žˆ์„ ๋งŒํผ ๊ฑฐ๋Œ€ํ•˜๊ฒŒ ์„ฑ์žฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ ์ผ๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ๊ฐ€ ํœ˜์ฒญ๊ฑฐ๋ฆด ์ผ์€ ๋‹จ์—ฐ์ฝ” ์—†๋‹ค. 90์–ต ๋‹ฌ๋Ÿฌ๊ฐ€ ์ž‘์€ ๋ˆ์€ ์•„๋‹ˆ์ง€๋งŒ, ๊ตฌ๊ธ€์€ ํ•œ์ฐฝ ์„ฑ์žฅํ•˜๋˜ ์‹œ์ ˆ์ธ 2006๋…„์— ์ด๋ฏธ ์œ ํŠœ๋ธŒ ์ธ์ˆ˜๊ธˆ์•ก์œผ๋กœ 16์–ต 5,000๋งŒ ๋‹ฌ๋Ÿฌ๋ฅผ ํ•œ๋ฒˆ์— ์ง€๋ถˆํ•ด๋‚ผ ์ •๋„์˜€๊ณ , 2007๋…„์—๋Š” ๊ด‘๊ณ  ํšŒ์‚ฌ์ธ ๋”๋ธ”ํด๋ฆญ์„ 31์–ต ๋‹ฌ๋Ÿฌ์— ์ƒ€์„ ์ •๋„๋กœ ํ˜„๊ธˆ ์ฐฝ์ถœ๋ ฅ์ด ์ƒ๋‹นํ•œ ๊ธฐ์—…์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ์ง์ ‘์ ์ธ ๋กœ์—ดํ‹ฐ ์ˆ˜์ž…์€ ์—†์ง€๋งŒ ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰๊ณผ ๊ด‘๊ณ , ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด์™€ ์œ ํŠœ๋ธŒ ๊ฐ™์€ ๊ตฌ๊ธ€ ์•ฑ์—์„œ ๋‚˜์˜ค๋Š” ์ˆ˜์ต๋งŒ ํ•ด๋„ ๋งค๋…„ ์ˆ˜๋ฐฑ์–ต ๋‹ฌ๋Ÿฌ์— ๋‹ฌํ•œ๋‹ค๋Š” ํ‰๊ฐ€๋ฅผ ๋ฐ›๊ณ  ์žˆ๋Š”๋ฐ, ๋ชจ๋ฐ”์ผ OS ์‹œ์žฅ ์–‘๋ถ„ ๋Œ“๊ฐ€๋กœ 90์–ต ๋‹ฌ๋Ÿฌ๋ฅผ ๋‚ธ๋‹ค๋ฉด ๊ตฌ๊ธ€ ์ž…์žฅ์—์„  ๊ฑฐ์ € ๋จน๋Š” ๊ฒƒ์ด๋‚˜ ๋‹ค๋ฆ„์—†๋‹ค.

์ผ๋‹จ ๊ตฌ๊ธ€์€ ์—ฐ๋ฐฉ๋Œ€๋ฒ•์›์— ์ƒ๊ณ ํ•  ๊ฒƒ์ด๋ผ๋Š” ์˜์‚ฌ๋ฅผ ๋ฐํ˜”๋‹ค. # ๋‹ค๋งŒ ์‹ค์ œ๋กœ ์ƒ๊ณ ๋ฅผ ์‹ ์ฒญํ• ์ง€, ์‹ ์ฒญํ•˜๋”๋ผ๋„ ๋Œ€๋ฒ•์›์—์„œ ๊ทธ๊ฑธ ๋ฐ›์•„๋“ค์ผ์ง€๋Š” ๋‚˜์ค‘ ๋ฌธ์ œ์ด๋‹ค.

๊ตฌ๊ธ€์ด ๋Œ€๋ฒ•์›์— ์˜ค๋ผํด์˜ ์Šน์†Œ์— ๋Œ€ํ•ด ๋‹ค์‹œ ๊ฒ€ํ† ํ•ด์ค„ ๊ฒƒ์„ ์š”์ฒญํ–ˆ๊ณ  ์ด์™€ ๊ด€๋ จํ•œ ์ฒซ๋ฒˆ์งธ ์‹ฌ๋ฆฌ๊ฐ€ ์˜ค๋Š” 2020๋…„ 3์›” ์—ด๋ฆด ์˜ˆ์ •์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ตœ์ข… ํŒ๊ฒฐ์€ ์ด๋ฅด๋ฉด 6์›”๊ป˜ ๋‚˜์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค. #

ํ•˜์ง€๋งŒ 2020๋…„์„ ๊ฐ•ํƒ€ํ•œ COVID-19์˜ ์—ฌํŒŒ๋กœ 2020๋…„๋„์— ์˜ˆ์ •๋œ ์žฌํŒ๋“ค์ด ์ค„์ค„์ด 2021๋…„๋„๋กœ ์—ฐ๊ธฐ๋˜๋ฉด์„œ ์ฒซ ๋ณ€๋ก ๋„ 3์›”์—์„œ 9์›”๋กœ ๋ฐ€๋ ธ๋‹ค.##

11. ์ ์œ ์œจ[ํŽธ์ง‘]

์„ธ๊ณ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ค‘์—์„œ ์ ์œ ์œจ 1์œ„๋ฅผ 2000๋…„๋ถ€ํ„ฐ ๋ฌด๋ ค 19๋…„ ์งธ 1์œ„๋ฅผ ์งˆ์ฃผ์ค‘์ธ ๋…์žฌ์ž(...)์ด๋‹ค. 2007๋…„๊นŒ์ง€๋งŒ ํ•ด๋„ ์ „ ์„ธ๊ณ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ ์œ ์œจ ์ค‘์— Java ์ ์œ ์œจ์ด 35%๊นŒ์ง€๋„ ์ฐจ์ง€ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 2010๋…„๋Œ€ ๋“ค์–ด์„œ Python, C++ ๋“ฑ์˜ ์ ์œ ์œจ์ด ๊ธ‰์ƒ์Šนํ•˜๋ฉด์„œ Java์˜ ์ ์œ ์œจ์€ ์ ์ฐจ ํ•˜๋ฝํ•˜๋Š” ์ถ”์„ธ์ด๋‹ค. 1์œ„๋Š” ์ˆ˜์„ฑํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ ์œ ์œจ์€ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๋–จ์–ด์ง€๊ณ  ์žˆ๋‹ค. 2019๋…„๊นŒ์ง€๋Š” C์–ธ์–ด๋ณด๋‹ค ์•ฝ๊ฐ„ ๋” ๋งŽ์€ ์ˆ˜์ค€์œผ๋กœ 17~18% ์ •๋„๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค. Java ์ ์œ ์œจ์ด ํ•˜๋ฝํ•œ ๋งŒํผ Python ๋น„์œจ์ด ํฌ๊ฒŒ ์˜ฌ๋ž๋‹ค. ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ 2020๋…„์— C์–ธ์–ด์™€ Python์— ์ค„์ค„์ด ์‚ฌ์šฉ๋Ÿ‰ ์ˆœ์œ„์—์„œ ์ถ”์›”๋‹นํ–ˆ๋‹ค.

12. ๋ถˆํˆฌ๋ช…ํ•œ ๋ฏธ๋ž˜?[ํŽธ์ง‘]

์ด๋Ÿฌํ•œ ๋ถ„์Ÿ๊ณผ๋Š” ๋ณ„๋„๋กœ, ์˜ค๋ผํด์ด Java๋ฅผ ํฌ๊ธฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋Š” ์ฃผ์žฅ์ด ์žˆ๋‹ค. "Oracle Mysteriously Fires Almost All of Its Top Java Evangelists"(Softpedia News) ์ž๋ฐ” ์—๋ฐ˜์ ค๋ฆฌ์ŠคํŠธ, ์˜ค๋ผํด ํ‡ด์‚ฌ์˜ ๋ณ€ "์ž๋ฐ” ๊ตฌํ•˜๋ ค"(ZDNet Korea)

์ž๋ฐ” ์—๋ฐ˜์ ค๋ฆฌ์ŠคํŠธ๋Š” Java์˜ ์ „์ฒด์ ์ธ ์—…๊ณ„ ๋‚ด์—์„œ์˜ ๋ถ„์œ„๊ธฐ๋ฅผ ๊ฒฐ์ •์ง€์„ ์ˆ˜ ์žˆ๋Š”, ๋น„๊ตํ•˜์ž๋ฉด ๋ฆฌ๋ˆ…์Šค๊ณ„์˜ ๋ฆฌ๋ˆ„์Šค ํ† ๋ฅด๋ฐœ์Šค ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์ธ๋ฐ, ์˜ค๋ผํด์ด ์ด ์‚ฌ๋žŒ๋“ค์„ ๊พธ์ค€ํžˆ ํ•ด๊ณ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์žฅ์‚ฌ๋ฅผ ๋…ํ•˜๊ฒŒ ํ•˜๊ธฐ๋กœ ์œ ๋ช…ํ•œ ์˜ค๋ผํด์ธ์ง€๋ผ, Java ์ž์ฒด๊ฐ€ ์ง€๊ธˆ์€ ๋ฌผ๋ก ์ด๊ณ  ๋ฏธ๋ž˜์—๋„ ๊ทธ๋‹ค์ง€ ์ˆ˜์ต์„ฑ์ด ์ข‹๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†๊ธฐ์— ๋ง์„ค์ž„ ์—†์ด ํฌ๊ธฐํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ƒ๋ผ๋Š” ๊ด€์ธก์ด ์žˆ๋‹ค. ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง๋„ ํ•œ๋งˆ๋”” ํ–ˆ๋‹ค.

๋‹ค๋งŒ ์ด ๋ถ€๋ถ„์€ ์‚ฌ๋žŒ์— ๋”ฐ๋ผ ๊ทน๋‹จ์ ์œผ๋กœ ๋ฐ˜์‘ํ•  ์ˆ˜๋„ ์žˆ๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ[42] ์—…๊ณ„ ๋ถ„์œ„๊ธฐ์— ๋Œ€ํ•œ ํŒ๋‹จ์€ ์Šค์Šค๋กœ ํ•˜๋„๋ก ํ•˜์ž. ์œ„์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ Oracle JDK๋ฅผ ์œ ๋ฃŒ๋กœ ์ „ํ™˜ํ•œ ๊ฑธ ๋ณด๋ฉด ํฌ๊ธฐํ•  ์ƒ๊ฐ์€ ์—†๋Š” ๋“ฏํ•˜๋‹ค.

2017๋…„ 8์›” 17์ผ, ์˜ค๋ผํด์ด Java EE๋ฅผ ํฌ๊ธฐํ•œ๋‹ค๊ณ  ๋ฐœํ‘œํ–ˆ๋‹ค. ์˜คํ”ˆ์˜คํ”ผ์Šค, ๋„ท๋นˆ์ฆˆ ๋•Œ์™€ ๊ฐ™์ด ์˜คํ”ˆ ์†Œ์Šค ์ƒํƒœ๊ณ„๋กœ ๋ณด๋‚ด๋ ค ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์•„ํŒŒ์น˜ ์†Œํ”„ํŠธ์›จ์–ด ์žฌ๋‹จ๊ณผ ์ดํด๋ฆฝ์Šค ์žฌ๋‹จ์ด Java EE๋ฅผ ๋„˜๊ฒจ๋ฐ›์„ ์œ ๋ ฅํ•œ ํ›„๋ณด๋กœ ์•Œ๋ ค์ ธ ์žˆ๋‹ค. Opening Up Java EE ๊ฒฐ๊ตญ ์ดํด๋ฆฝ์Šค ์žฌ๋‹จ์ด ๋งก๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ •๋˜์—ˆ์œผ๋ฉฐ, Java EE์˜ ์˜คํ”ˆ ์†Œ์Šคํ™”๋ฅผ ์œ„ํ•œ 9๊ฐœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”์ง„ํ•œ๋‹ค๊ณ  ๋ฐํ˜”๋‹ค. ## ๋‹ค๋งŒ ์˜ค๋ผํด์ด Java EE๋ผ๋Š” ์ƒํ‘œ๊ถŒ๊นŒ์ง€ ๋„˜๊ธด ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ƒˆ๋กœ์šด ์ด๋ฆ„์„ ๊ณต๋ชจํ•˜์˜€๊ณ  ์ดํ›„ ์ž์นด๋ฅดํƒ€ EE(Jakarta EE)๋ผ๋Š” ์ƒˆ ๋ช…์นญ์ด ๊ฒฐ์ •๋˜์—ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ž๋ฐ”์˜ ์ƒˆ ์ด๋ฆ„ โ€˜์ž์นด๋ฅดํƒ€ EE'[43]

13. ๋„์„œ[ํŽธ์ง‘]

์„œ์ ์— ๊ฐ€๋ฉด Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฑ…์ด ๋ฌด๊ถ๋ฌด์ง„ํ•˜๊ฒŒ ๋งŽ๋‹ค. Python, Java, C, SQL 4๊ฐœ๋Š” ์„œ์ ์— ๊ฐ€๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ถ„์•ผ์— ๋ณ„๋„์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.

14. ์—ฌ๋‹ด[ํŽธ์ง‘]

  • Java์˜ ์ฐฝ์‹œ์ž์ธ ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง ์˜น์€ ์ง„์„ฑ ์•ฑ๋“ฑ์ด๋‹ค.[44] ์ง‘์—์„œ ์“ฐ๋Š” IT ๊ธฐ๊ธฐ์— ๋Œ€ํ•ด ๋ฌป๋Š” ์งˆ๋ฌธ์— ํฐ, ํƒœ๋ธ”๋ฆฟ, ๋ฐ์Šคํฌํƒ‘, ๋žฉํƒ‘ ๋“ฑ ๊ฑฐ์˜ ๋ชจ๋“  IT ๊ธฐ๊ธฐ๋ฅผ ์• ํ”Œ์‚ฌ ์ œํ’ˆ์œผ๋กœ ๋„๋ฐฐํ•ด๋†จ์Œ์ด ๋ฐํ˜€์กŒ๋‹ค. ๊ฐ€์กฑ๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€. ์ •์ž‘ ์• ํ”Œ์€ OS X ๋ ˆ์˜คํŒŒ๋“œ ์—…๋ฐ์ดํŠธ ๋•Œ Java๋ฅผ ์ฐฌ๋ฐฅ ์ทจ๊ธ‰ํ–ˆ์ง€๋งŒ...[45]
  • ์กฐ์—˜์˜จ ๋ธ”๋กœ๊ทธ๋กœ ์œ ๋ช…ํ•œ ์กฐ์—˜์ด ์—„์ฒญ๋‚˜๊ฒŒ ์‹ซ์–ดํ•˜๋Š” ์–ธ์–ด. ์กฐ์—˜ ์Šคํด์Šคํ‚ค๊ฐ€ Java๋ฅผ ์‹ซ์–ดํ•˜๋Š” ์ด์œ ๋กœ๋Š” ์„ฑ๋Šฅ์ƒ์˜ ๋ฌธ์ œ๋‚˜ ์ €์ˆ˜์ค€์„ ๋‹ค๋ฃจ์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์ด๋‹ค. ...)[47][48]๋Š” ์ด์œ ๋„ ์žˆ์ง€๋งŒ, Java ์ž์ฒด๊ฐ€ "์œ„์›ํšŒ ๊ธฐ์ˆ "์ด๋ผ๋Š” ์ด์œ ๋„ ํฐ ๋ชซ์„ ์ฐจ์ง€ํ•œ๋‹ค.[49] ์‚ฌ์‹ค ์ด๋Š” Java๊ฐ€ ๊ฐ€์ง„ ํƒœ์ƒ์  ๋ฌธ์ œ์ธ๋ฐ Java๋ผ๋Š” ์–ธ์–ด๊ฐ€ C#์ฒ˜๋Ÿผ ์–ด๋А ํŠน์ • ๋‹จ์ฒด๋‚˜ ํšŒ์‚ฌ๊ฐ€ ์ฃผ๋„์ ์œผ๋กœ ๋Œ๊ณ ๊ฐ€๋Š” ๋ฌผ๊ฑด์ด ์•„๋‹ˆ๋‹ค ๋ณด๋‹ˆ ์œ„์›ํšŒ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ๊ธฐ์—…๋“ค์˜ ํŒŒ์›Œ๊ฒŒ์ž„์— ๋”ฐ๋ผ ์ค‘์š”ํ•œ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ๋ฐฉ์•ˆ์ด ๋นจ๋ฆฌ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ๋ฐฐ๊ฐ€ ์‚ฐ์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.
  • Java๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ๋•Œ CLASSPATH์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณดํ†ต %JAVA_HOME%\lib๋กœ ์„ค์ •ํ•˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŒŒ์ผ ์‹คํ–‰ ์‹œ JVM์ด ๋ฌด์กฐ๊ฑด \lib ๊ฒฝ๋กœ์—์„œ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํŒŒ์ผ์„ ์ฐพ๊ฑฐ๋‚˜ ๋กœ๋“œํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฟœ๊ฒŒ ๋œ๋‹ค. ๋งค๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค -classpath . ์˜ต์…˜์„ ์ฃผ๊ฑฐ๋‚˜ CLASSPATH ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ๋””๋ ‰ํ† ๋ฆฌ ๋์— ;.์„ ๋ถ™์ด๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.[50] ๋ฌผ๋ก  ๋Œ€๋ถ€๋ถ„์˜ IDE๋Š” ํด๋ž˜์Šค ํŒจ์Šค ์„ค์ •์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์ฃผ์ง€๋งŒ, ์—ญ์œผ๋กœ ๊ทธ๋ ‡๊ธฐ์— ํด๋ž˜์Šค ํŒจ์Šค์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ€ ๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
  • Java์—์„œ UI๋ฅผ ๋งŒ๋“ค ๋•Œ๋„ ๊ณ ๋ ค๋ฅผ ํ•ด์•ผํ•  ๊ฒŒ, Java๋Š” UI๋ฅผ ๋งŒ๋“ค ๋•Œ AWT๋‚˜ Swing ๋‘˜ ์ค‘ ํ•˜๋‚˜ ํ˜น์€ ๋‘˜ ๋‹ค ์„ ํƒํ•˜์—ฌ UI๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ์กฐ์‹ฌํ•ด์•ผ ํ•  ์ ์€, AWT๋กœ ์ƒ์„ฑํ•œ UI๋Š” Swing UI์— ๊ฐ€๋ ค์ ธ๋ฒ„๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฉ€์ฉกํžˆ ์ž˜ ๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ์ธ๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฐฐ๊ฒฝ์ด ์ปจํŠธ๋กค(์ฝค๋ณด๋ฐ•์Šค๋ผ๊ฑฐ๋‚˜)์„ ๊ฐ€๋ ค๋ฒ„๋ฆฌ๋Š” ์ผ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์–ด์ฐจํ”ผ ์š”์ฆ˜์€ ๋‘˜ ๋‹ค ์•ˆ ์“ด๋‹ค ์ฐธ๊ณ ๋กœ JetBrains์˜ IDE ์ œํ’ˆ๋“ค์€ ์ด Swing UI๋ฅผ ๊ฑฐ์˜ ๋งˆ๊ฐœ์กฐ์— ๊ฐ€๊น๊ฒŒ ๋œฏ์–ด๊ณ ์ณ์„œ ์“ฐ๊ณ  ์žˆ๋‹ค.
  • Java ํด๋ž˜์Šค ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋งค์ง๋„˜๋ฒ„๊ฐ€ #xca 0xFE 0xBA 0xBE๋‹ค. ์ด๊ฒƒ์„ ๋ถ™์ด๋ฉด CAFEBABE๋‹ค. CAFEBABE์ธ ์ด์œ ๋Š”, ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง๊ณผ ๋‹ค๋ฅธ ์—ฐ๊ตฌ์›๋“ค์ด St. Michael's Alley๋ผ๋Š” ๊ณณ์— ์ ์‹ฌ์„ ๋จน์œผ๋Ÿฌ ๊ฐ€๊ณค ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ ์ง€๋ฐฉ ์ „์„ค์— ์˜ํ•˜๋ฉด ๊ทธ๊ณณ์—์„œ ๋” ๊ทธ๋ ˆ์ดํŠธํ’€ ๋ฐ๋“œ๋ผ๋Š” ๋ฐด๋“œ๊ฐ€ ํฌ๊ฒŒ ์„ฑ์žฅํ•˜๊ธฐ ์ „์— ์—ฐ์ฃผํ•˜๋˜ ๊ณณ์ด๋ผ๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง๊ณผ ์—ฐ๊ตฌ์›๋“ค์€ ๊ทธ๊ณณ์„ Cafe Dead๋ผ๊ณ  ๋ถˆ๋ €๋‹ค. ๊ทธ๋Ÿฌ๋‹ค CAFE DEAD๊ฐ€ ํ—ฅ์Šค ๋„˜๋ฒ„์ธ ๊ฒƒ์„ ์•Œ์•„๋ƒˆ๋‹ค๊ณ  ํ•œ๋‹ค.[51] ๊ทธ ๋•Œ ๋งˆ์นจ ๊ทธ๋Š” ํŒŒ์ผ ํฌ๋งท ์†Œ์Šค์™€ ๋งค์ง๋„˜๋ฒ„๋ฅผ ๊ฐœํŽธํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.[52] ๊ฒฐ๊ตญ Object ํŒŒ์ผ์˜ ๋งค์ง ๋„˜๋ฒ„๋Š” CAFEDEAD๊ฐ€ ๋˜์—ˆ๋‹ค. ๋‚˜๋จธ์ง€ ํ•˜๋‚˜, ํด๋ž˜์Šค ํŒŒ์ผ์˜ ๋งค์ง๋„˜๋ฒ„๋Š” CAFE ๋‹ค์Œ์— ๋งž์„ ๋งŒํ•œ ๋ฒˆํ˜ธ๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ๊ทธ ๋•Œ ์ ์€ ๊ฒƒ์ด BABE๋‹ค.
  • 2012๋…„ ๋ง์—๋Š” Java์— ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋˜์–ด ์˜ค๋ผํด์—์„œ ๊ธด๊ธ‰ ๋ณด์•ˆ ํŒจ์น˜๋ฅผ ๋ฐœํ‘œํ–ˆ์ง€๋งŒ ๋˜ ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋ผ๋ฒ„๋ฆฌ๋Š” ๋ฐ”๋žŒ์— Java๋ฅผ ๊ณ„์† ์จ์•ผ ํ•˜๋‚˜ ๋ง์•„์•ผ ํ•˜๋Š” ๋…ผ์Ÿ์ด ๋ฒŒ์–ด์ง€๊ธฐ๋„ ํ–ˆ๋‹ค. ์ง€๊ธˆ์€ ์ž ์ž ํ•ด์ง„ ์ƒํƒœ.
  • ๊ธฐ์กด์˜ 32bit์šฉ์€ 64bit ์›น ๋ธŒ๋ผ์šฐ์ €์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ์— 64bit์šฉ Java๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 32bit ์›น ๋ธŒ๋ผ์šฐ์ €์™€ 64bit ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ฐ๊ฐ ๋Œ์•„๊ฐ€๋ฉฐ ์‚ฌ์šฉํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋‘˜ ๋‹ค ์„ค์น˜ํ•ด์•ผ ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๊ฑฐ๋กœ์šด ํŽธ์ด๋‹ค.
  • 2018๋…„ ์ดˆ๋ถ€ํ„ฐ ์ž๋ฐ” ์„ค์น˜ํŒŒ์ผ๋กœ ์œ„์žฅํ•œ ๋žœ์„ฌ์›จ์–ด๊ฐ€ ๊ธฐ์Šน์„ ๋ถ€๋ฆฌ๊ณ  ์žˆ๋‹ค. ์–ด๋А๋‚  ๊ฐ‘์ž๊ธฐ ์ง์ ‘ ์„ค์น˜ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›๊ฑฐ๋‚˜ ํ•˜์ง€๋„ ์•Š์•˜๋Š”๋ฐ ์„ค์น˜ํŒŒ์ผ์ด ์ €์ ˆ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์—ผ์ž๋“ค์€ ์ด๋ฅผ ์ž๋™ ์—…๋ฐ์ดํŠธ๋กœ ์ธ์ง€ํ•˜๊ณ  ๊ทธ๋Œ€๋กœ ์—…๋ฐ์ดํŠธ ํ•ด๋ฒ„๋ ค์„œ ๊ฐ์—ผ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ์‹ฌ์ง€์–ด ์‚ฌ์šฉํ•˜๋Š” ์šด์˜์ฒด์ œ์˜ ์–ธ์–ด๋ฅผ ์ธ์ง€ํ•˜์—ฌ ํ•ด๋‹น ์–ธ์–ด์˜ ์ž๋ฐ” ์„ค์น˜ํŒŒ์ผ์— ์žˆ๋Š” ๋ฌธ์žฅ๊ณผ ์ด๋ฏธ์ง€๊นŒ์ง€ ์ฒ ์ €ํ•˜๊ฒŒ ์žฌํ˜„๋˜์–ด์„œ ์˜์‹ฌํ•  ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

15. ๊ด€๋ จ ๋ฌธ์„œ[ํŽธ์ง‘]

[1] ๋‹น์žฅ ์ €๊ธฐ์„œ package๋ฌธ์„ using๋ฌธ์œผ๋กœ System.out.println๋ฅผ Console.WriteLine์œผ๋กœ ๋ฐ”๊พธ๊ธฐ๋งŒ ํ•ด๋„ ์™„๋ฒฝํ•œ C# ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค.(...)
[2] ๊ทธ๋„ ๊ทธ๋Ÿด ๊ฒƒ์ด, ์›๋ž˜ C#์ด MS์—์„œ Java์˜ ๊ธฐ๋ณธ์ ์ธ ์„ฑ์งˆ์€ ๊ฐ€์ ธ๊ฐ€์ง€๋งŒ, ๊ฐ์ข… ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•œ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
[3] ์ผ๋ฐ˜๋ช…์‚ฌ๋‚˜ ์ด๋ฏธ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ํ‘œํ˜„ ๋“ฑ์€ ์ƒํ‘œ๋กœ ๋“ฑ๋ก ๋ชปํ•œ๋‹ค. ๋ฌผ๋ก  ์ƒํ‘œ ๋“ฑ๋ก์„ ๋ชปํ•ด๋„ ์ œํ’ˆ์ด๋‚˜ ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ๋ชป ์“ฐ๋Š” ๊ฑด ์•„๋‹ˆ์ง€๋งŒ ํ•ด๋‹น ์ด๋ฆ„์— ๋Œ€ํ•ด ๋ฐฐํƒ€์ ยท๋…์ ์  ๊ถŒ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜์ง€ ๋ชปํ•œ ์ƒํƒœ๊ฐ€ ๋ผ์„œ, ๋‚จ๋“ค์ด ๋”ฐ๋ผ ํ•ด๋„ ๊ฑฐ๊ธฐ์— ๋ฒ•์ ์œผ๋กœ ํƒœํด์„ ๊ฑธ ์ˆ˜๊ฐ€ ์—†๋‹ค.
[4] Premier Support. ์˜ค๋ผํด์— ๋น„์šฉ์„ ๋‚ด๊ณ  ๊ธฐ์ˆ  ์ง€์›์„ ๋ฐ›๋Š” ์„œ๋น„์Šค์ด๋‹ค.
[5] Extended Support. ์ผ๋ฐ˜ ์ง€์›์ด ์ข…๋ฃŒ๋œ ํ›„ ์ถ”๊ฐ€์ ์ธ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜์—ฌ ๊ธฐ์ˆ  ์ง€์›์„ ๋” ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ฐ„์ด๋‹ค.
[6] GCC ๊ณ„์—ด Java ์ปดํŒŒ์ผ๋Ÿฌ์ธ GCJ์—์„œ๋Š” ์ด๋ฏธ ์ง€์›ํ•˜๊ณ  ์žˆ๋˜ ๊ธฐ๋Šฅ์ด๋‹ค.(ํ˜„์žฌ๋Š” ์ถœ์‹œ ์ค‘๋‹จ)
[7] C#๊ณผ Kotlin์˜ var์™€ ๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์ด๋‹ค.
[8] ๋”ฐ๋ผ์„œ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜์ด ์•ˆ ๋  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ๊ทธ๋ƒฅ ๋‚ด๋ถ€ ๋ฉ”์†Œ๋“œ ์“ฐ๋“ฏ์ด JavaFX๋ฅผ ๊ฐ–๋‹ค ์ผ๋‹ค๋ฉด, ์ด์ œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ์ธํด๋ฃจ๋“œํ•ด์„œ ๋ฐฐํฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ.
[9] '@Nonnull var x, @Nullable var y'๋ฅผ 'x.process(y)'๋กœ ๊ฐ„๋žตํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
[10] ๋ฆฌ๋ˆ…์Šค ์ปค๋„, ํ•˜๋“œ์›จ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ
[11] 3D ๊ฒŒ์ž„, ๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
[12] ํŠนํžˆ ์›น ๊ฐœ๋ฐœ ๋ถ„์•ผ์—์„œ ํ•ด์™ธ์˜ ๊ฒฝ์šฐ Java๋Š” ๋„ํƒœ๋˜๋Š” ์ถ”์„ธ๊ณ , Node.js ๋•๋ถ„์— ์„œ๋ฒ„์™€ ํ”„๋ก ํŠธ์—”๋“œ ์–‘ ์ชฝ์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” JavaScript์™€ Django๋ฅผ ํ†ตํ•˜์—ฌ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๋ฐฑ์—”๋“œ ๊ตฌ์ถ•์ด ๊ฐ€๋Šฅํ•œ Python์˜ ์‚ฌ์šฉ๋ฅ ์ด ๋Š˜์–ด๋‚˜๊ณ  ์žˆ๋‹ค.
[13] JVM ์œ„์—์„œ ๊ตฌ๋™ ๊ฐ€๋Šฅํ•œ ์–ธ์–ด์— ๋Œ€ํ•ด์„œ๋Š” ์˜๋ฌธ ์œ„ํ‚คํ”ผ๋””์•„์˜ List of JVM languages ์ฐธ๊ณ .
[14] ์ •๋ง๋กœ ํฌ์ธํ„ฐ๋ฅผ ์จ์•ผ ํ•  ๊ฒฝ์šฐ Unsafe ํด๋ž˜์Šค๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค. ๋‹ค๋งŒ ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ง‰ํ˜€์žˆ์–ด ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
[15] ์–ด์ฐจํ”ผ Java์—์„œ๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ํฌ๊ธฐํ•จ์œผ๋กœ์จ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋ฅผ interface๋ฅผ ๋‹ค์ค‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์–ด๋А ์ •๋„ ํ•ด๊ฒฐํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.
[16] ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ๋ฐฐ์—ด 1000๊ฐœ๋ฅผ ํ• ๋‹น๋ฐ›๊ธฐ ์œ„ํ•ด ์šด์˜์ฒด์ œ์— 1๋ฒˆ ํ˜ธ์ถœํ•˜์—ฌ ํ•œ๊บผ๋ฒˆ์— ํ• ๋‹น๋ฐ›์ง€ ์•Š๊ณ , 1000๋ฒˆ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ๊ฐ ํ• ๋‹น๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ, ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์€ ์šด์˜์ฒด์ œ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค. ์–ด๋–ค ์–ธ์–ด์—์„œ๋ผ๋„, ์šด์˜์ฒด์ œ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์— ๋„์›€์ด ๋œ๋‹ค.
[17] ํ•˜์ง€๋งŒ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์€ ๋ถ„๋ช… ์ œ๋„ค๋ฆญ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋„์›€์„ ์ค€๋‹ค. ๊ฐ€๋ น ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค ๋‚ด์—์„œ ์ฃผ์–ด์ง„ ํƒ€์ž…์˜ ๋ณ€์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ๋”ํ•˜๋Š” ์—ฐ์‚ฐ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? ๋”ํ•˜๋Š” ์—ฐ์‚ฐ ๋“ฑ ์—ฌ๋Ÿฌ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…๋“ค์€ Java์˜ primitive ํƒ€์ž…์—๋งŒ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ํ–‰๋ ฌ ๋“ฑ์ด ๊ทธ๋Ÿฐ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธก๋ฉด์—์„œ ๋ณธ๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ž‘์—…์— ์žˆ์–ด์„œ์˜ ์ผ๊ด€์„ฑ์€ ํ›ผ์†๋๋‹ค๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค.
[18] ๋‹ค๋งŒ ์ œ๋„ค๋ฆญ์€ Type Erasure๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋…์ ์œผ๋กœ C++์˜ ํ…œํ”Œ๋ฆฟ๊ณผ ๋‹ค๋ฅด๋ฉฐ, ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋„ ๊ฑฐ์˜ ์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž์ฒด๋กœ๋งŒ ํ•œ์ •๋ผ ์žˆ๋‹ค.
[19] ๊ธฐ์กด์— ์•ž ๋ฌธ๋‹จ ์„œ์ˆ ์— ์‚ฌ์šฉ๋˜์—ˆ๋˜ ์šฉ์–ด์ธ "ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์€ ๊ฐœ๋…์„ ์˜คํ•ดํ•˜์—ฌ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋ฏ€๋กœ "์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์œผ๋กœ ๋Œ€์ฒดํ•˜์˜€๋‹ค. ์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Generic Programming)์€ Java๋‚˜ C#์—๋„ "์ œ๋„ค๋ฆญ"์ด๋ผ๋Š” ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Template Meta-Programming)์€ Java๋‚˜ C#์—์„œ ์ „ํ˜€ ๊ตฌํ˜„๋˜์ง€ ์•Š๋Š” ๋ณ„๋„์˜ ๊ฐœ๋…์ด๋‹ค. ์•„๋งˆ๋„ C++์—์„œ ์“ฐ๋Š” "ํ…œํ”Œ๋ฆฟ"์ด๋ผ๋Š” ์šฉ์–ด์™€ Java์˜ "์ œ๋„ค๋ฆญ"์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ๊ฐ™์€ ๊ฒƒ์„ ์ง€์นญํ•œ๋‹ค๊ณ  ์ฐฉ๊ฐํ•ด์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋กœ ์ถ”์ •๋œ๋‹ค. C++ ํ…œํ”Œ๋ฆฟ ํ”„๋กœ๊ทธ๋ž˜๋ฐ = "์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ + ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ", Java/C# ์ œ๋„ค๋ฆญ = "์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ์‰ฝ๋‹ค. "ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์€ C++, D ๋“ฑ ๊ทน์†Œ์ˆ˜์˜ ์–ธ์–ด๋งŒ ์ง€์›ํ•œ๋‹ค.
[20] ์ด ๋ถ€๋ถ„์€ ์ฃผ๊ด€์ ์ธ ๊ฒƒ์œผ๋กœ C/C++๊ฐ€ Java๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋™์˜ํ•˜์ง€ ์•Š๋Š” ์‹œ๊ฐ๋„ ๋งŽ๋‹ค๋Š” ์ ์„ ์•Œ๋ ค๋‘”๋‹ค.
[21] JIT ์ปดํŒŒ์ผ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. C#์ด๋‚˜ PHP 8์™€ ๊ฐ™์€ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋„ ํ•ด๋‹น์‚ฌํ•ญ์ด๋‹ค.
[22] ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ›‘์œผ๋ฉด์„œ ์ˆœ๊ฐ„์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์–ผ์–ด๋ถ™์–ด ๋ฉˆ์ถ”๋Š” ํ˜„์ƒ.
[23] ์ด๋ฅผ gotta catch 'em all ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค.
[24] ๋ฌผ๋ก  ์ด๋ ‡๊ฒŒ ์งœ๋ฉด ์•ˆ๋˜์ง€๋งŒ ๊ตฌ์กฐ์ ์œผ๋กœ ๊ฐ•์š”๋ฐ›๋Š” ํ˜•ํŽธ.
[25] ์ด์ชฝ์€ RuntimeException ๊ณ„์—ด์˜ ์˜ˆ์™ธ๋กœ, ์ด๊ฒƒ์„ ๋˜์ง€๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ throws์— ๋ช…์‹œ์ ์œผ๋กœ ๋˜์ง„๋‹ค๊ณ  ์„ ์–ธํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
[26] ๋Œ€ํ•œ๋ฏผ๊ตญ์— ๊ตญํ•œ๋˜๋Š” ๊ฒฝํ–ฅ์ด ๊ฐ•ํ•˜๊ธด ํ•˜์ง€๋งŒ ํ˜„์žฌ ํ•œ๊ตญ์—์„œ ์ด๋Ÿฌํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ฝ”๋”ฉํ•˜๋Š” ์ˆœ๊ฐ„์— ์ธ์ง€ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ๋“œ๋ฌผ๋‹ค. ๊ตญ๋น„์ง€์› ํ•™์›์„ ๋ง‰ ์กธ์—…ํ•œ ์‹ ์ž…๋“ค์€ ๋ง ํ•  ๊ฒƒ๋„ ์—†์œผ๋ฉฐ ํ˜„์—… ๋ช‡๋…„ ํ•œ ์ดˆ์ค‘๊ธ‰ ๊ฒฝ๋ ฅ์ž๋“ค ์—ญ์‹œ ์ด๋ฅผ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ—ˆ๋‹คํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์–ด์ฐŒ๋ณด๋ฉด ๋Œ€ํ•œ๋ฏผ๊ตญ IT๊ณ„์˜ ๋ฒ„๊ทธ์ฒ˜๋ฆฌ์™€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ์— ์žˆ์–ด์„œ๋งŒํผ์€ ์žฅ์ ์œผ๋กœ ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค.
[27] ์‚ฌ์‹ค C(C++์ด ์•„๋‹ˆ๋‹ค)๋Š” C99๊ธฐ์ค€ stdio.h๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์•„๋„ puts, printf ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. C, C++ ๊ณตํ†ต์œผ๋กœ๋Š”(C++11๊ธฐ์ค€) main์— int๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„๋„ ์ฝคํŒŒ์ผ์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋” ์งง๊ฒŒ ์“ด๋‹ค๋ฉด
main() {
ใ€€ใ€€puts("Hello");
}
์ด ๋œ๋‹ค.
[28] ๊ทธ ๋งˆ์„ธ๋ผํ‹ฐ๊ฐ€ ๋งž๋‹ค. ์ž์‹ ์ด ํƒˆ์ˆ˜๋‚˜ ์žˆ์„์ง€๋„ ๋ชจ๋ฅด๋Š” ๋งˆ์„ธ๋ผํ‹ฐ๋ฅผ ํƒ€๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๋ ๊นŒ... ๋ผ๋Š” ์“ธ๋ฐ์—†๋Š” ๊ณ ๋ฏผ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋น„์œ ํ•˜๋Š” ๋ฌธ์ œ๋กœ, ๋‹น์žฅ์— ์“ธ๋ฐ์—†๋Š” ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ๊ณผ๋„ํ•˜๊ฒŒ ํˆฌ์žํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
[29] ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ณด์กฐ๋ฌธ๋ฒ•. C์—์„œ ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ๋ฅผ ์“ธ ๋•Œ (*ptr).num์€ ptr->num์œผ๋กœ๋„ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ->๋Š” ๋ฌธ๋ฒ•์  ์„คํƒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
[30] ์ปฌ๋ ‰์…˜(Collection)์˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ํ™•์žฅํ•ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์œผ๋กœ, ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ์›์†Œ๋ฅผ ํ•„ํ„ฐ๋งํ•ด์„œ ์›ํ•˜๋Š” ์›์†Œ๋งŒ ๋ฝ‘๊ฑฐ๋‚˜, ์›์†Œ๊ฐฏ์ˆ˜๋ฅผ ์ค„์—ฌ๋ฒ„๋ฆฌ๊ณ , ์ด๋ ‡๊ฒŒ ๋‹ค์‹œ ๋ฝ‘ํ˜€์ง„ ์›์†Œ๋“ค๋กœ ๊ฐ–๊ฐ€์ง€ ์ฒ˜๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋“ฑ 'ํ•จ์ˆ˜์ ์ธ(functional)' ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
[31] ์ •์ž‘ ๋žŒ๋‹ค ํ‘œํ˜„์‹์˜ ์ถ”๊ฐ€๋Š” Java ์ง„์˜ ๋‚ด์—์„œ ๋…ผ๋ž€์ด ์žˆ๋‹ค. ๋žŒ๋‹ค ์‹์ด ๋’ค๋Šฆ๊ฒŒ ์ถ”๊ฐ€๋œ ๊ฒƒ๋„ ์ฝ”๋“œ ๋ฆฌ๋”ฉ์ด ์–ด๋ ค์›Œ์ง„๋‹ค๊ณ  ์‹ซ์–ดํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŽ์•„์„œ์˜€๋‹ค.
[32] ๋ฉ€๋ฆฌ ๊ฐˆ ๊ฒƒ ์—†์ด, C์–ธ์–ด์˜ stdio.h์™€ ์ž๋ฐ”์˜ System.out์„ ๋น„๊ตํ•ด๋ณด์ž. Java๋Š” ์ง๊ด€์ ์œผ๋กœ '์‹œ์Šคํ…œ'์—์„œ ๋ญ”๊ฐ€๊ฐ€ '๋‚˜์˜จ๋‹ค'๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, stdio.h๋ฅผ ๋ดค์„ ๋•Œ ์ง๊ด€์ ์œผ๋กœ ๋ญ˜ ๋– ์˜ฌ๋ฆด๊นŒ? ์ €๊ฑธ ์ฒ˜์Œ ๋ณด๊ณ  STanDard Input and Output์„ ๋– ์˜ฌ๋ฆด ์‚ฌ๋žŒ์ด ์–ผ๋งˆ๋‚˜ ์žˆ์„๊นŒ? ๋ฌผ๋ก  C๋ฅผ ํ•˜๋‹ค ๋ณด๋ฉด ์–ธ์–ด ๊ธฐ๋Šฅ ์ž์ฒด๊ฐ€ ์ ์–ด ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์‰ฌ์šด ๊ฑด ํ•จ์ •์ด๋‹ค
[33] ์‹ค์ œ๋กœ Java์—์„œ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋Š” ์ •๋ ฌ ๊ธฐ๋Šฅ์€ Collections ํด๋ž˜์Šค์˜ ์ •์  ๋ฉ”์†Œ๋“œ์ธ sort(array)๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค.
[34] 2010๋…„๋Œ€๋ถ€ํ„ฐ ๊ฐœ๋‚˜ ์†Œ๋‚˜ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ณ€์ˆ˜ ํƒ€์ž…์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ์ถ”๋ก ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ๋“ฑ๋“ฑ.
[35] JSP์˜ ๋ชฉ์ ์ด HTML ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. JSP ์†Œ์Šค๋Š” Java ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜์–ด ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๊ณ , ์„œ๋ฒ„๋Š” ์ด HTML ๊ฒฐ๊ณผ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ๋ณด์—ฌ์ค€๋‹ค. JSP ํŽ˜์ด์ง€๋Š” HTML ํŽ˜์ด์ง€์— Java ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์‹์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ , ์ด ์ ์€ PHP, ASP.NET ๋“ฑ๊ณผ ๋น„์Šทํ•œ ํŽธ์ด๋‹ค. ๋ฐ˜๋ฉด Java ์„œ๋ธ”๋ฆฟ์€ ์„œ๋ฒ„ ์ชฝ์—์„œ ํ•˜๋Š” ์ผ์— ๊ด€์‹ฌ์ด ๋งŽ์ง€๋งŒ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์€ ์ ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €์— ์ถœ๋ ฅ์„ ์ „ํ˜€ ์•ˆ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ตœ๊ทผ์—๋Š” Server side script language๋กœ HTML ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ์‹์œผ๋กœ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. JSP, PHP์™€ ๊ฐ™์€ Server side script language๋กœ๋Š” ์„œ๋ฒ„์— ์žˆ๋Š” ์ž์›์˜ ์ ‘๊ทผ์„ ์ฃผ๋กœ ํ•˜๊ณ (DB ์—ฐ์‚ฐ, File ์—ฐ์‚ฐ ๋“ฑ๋“ฑ) ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” UI๋Š” HTML/CSS/JavaScript๋กœ๋งŒ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Client side์™€ Server side ๊ฐ„์— ํ†ต์‹ ์ด ํ•„์š”ํ•œ๋ฐ ์ด๋Š” XHR(XML HTTP Request)๋ฅผ ์ด์šฉํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œํ˜„์„ AJAX๋ผ๊ณ  ํ•œ๋‹ค.
[36] Java๋Š” ํ˜„์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ค‘์—์„œ๋Š” ๊ฐ€์žฅ Verbose(์žฅํ™ฉํ•œ) ์–ธ์–ด๋กœ ๊ผฝํžŒ๋‹ค. ์ฆ‰, ๊ฐ™์€ ์˜๋ฏธ์ธ๋ฐ ๋งŽ์€ ํƒ€์ดํ•‘์ด ํ•„์š”ํ•˜๋‹ค.
[37] Java๋Š” ๋ฒ„์ „ 10์—์„œ ์™€์„œ์•ผ ์ด์™€ ๊ฐ™์€ ํƒ€์ž… ์ถ”๋ก  ๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.
[38] ์•ˆ๋“œ๋กœ์ด๋“œ์˜ Java ๋ผ์ด์„ ์Šค ๋ฌด๋‹จ ์‚ฌ์šฉ์œผ๋กœ ๊ตฌ๊ธ€์ด ์˜ค๋ผํด๊ณผ ๋ฒ•์ • ์‹ธ์›€์„ ํ•œ ์—ฌํŒŒ๋กœ ๋ณด์ธ๋‹ค.
[39] ๊ธฐ์ดˆ์ ์ธ C-๋ฌธ๋ฒ•์˜ ์ผ๋ถ€์ธ if๋ฌธ, while๋ฌธ ๋“ฑ์„ ์ œ์™ธํ•˜๋ฉด ๊ณตํ†ต์ ์ด ๋งŽ์ง€ ์•Š๋‹ค.
[ES6] ECMAScript 6์—์„œ Class๊ฐ€ ์ƒ๊ฒผ๋‹ค! ๊ทธ๋ž˜๋„ ์—ฌ์ „ํžˆ Java์˜ ํด๋ž˜์Šค์™€๋Š” ๊ฒ‰๋ณด๊ธฐ์—๋งŒ ๋น„์Šทํ•  ๋ฟ ์—ด์–ด๋ณด๋ฉด ๋‹ค๋ฅด๋‹ค. ES6์—์„œ ๋‚˜์˜จ ํด๋ž˜์Šค๋Š” ๊ธฐ์กด์— ์žˆ๋˜ prototype ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฌธ๋ฒ•์  ์„คํƒ•์ด๋‹ค.
[41] ๋‹ค๋งŒ ์ธ๋„๋„ค์‹œ์•„์˜ ์–ด์›์€ ์ธ๋„์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค. ์ธ๋„๋„ค์‹œ์•„๋ผ๋Š” ์ด๋ฆ„์€ '์ธ๋„์–‘์˜ ์„ฌ'๋“ค์ด๋ผ๋Š” ๊ทธ๋ฆฌ์Šค์–ดยท๋ผํ‹ด์–ด์‹ ํ‘œํ˜„์ด๊ธฐ ๋•Œ๋ฌธ. ์ด๋Ÿฐ ์ธ๋„๋„ค์‹œ์•„์™€ ์ธ๋„์˜ ๊ด€๊ณ„๋Š”, JavaScript๊ฐ€ Java์™€ ๋ณ„ ๊ด€๋ จ์€ ์—†์–ด๋„ ๊ทธ ์ด๋ฆ„์„ ๋นŒ๋ ค ์™”๋‹ค๋Š” ์ ์—์„œ ์™ ์ง€ ํก์‚ฌํ•˜๋‹ค.
[42] ๊ฐ ์–ธ์–ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์˜ ์ž์‹ ์˜ ์–ธ์–ด์— ๋Œ€ํ•œ ์ž๋ถ€์‹ฌ์€ ๊ฐ€ํžˆ ์ข…๊ต์˜ ์‹ ์•™๊ณผ ๋น„๊ฒฌํ•  ๋งŒํ•œ ๊ฒƒ์ด๋‹ค.
[43] ์›๋ž˜ ์•„ํŒŒ์น˜ ์†Œํ”„ํŠธ์›จ์–ด ์žฌ๋‹จ์ด '์ž์นด๋ฅดํƒ€'๋ผ๋Š” ์ด๋ฆ„์˜ Java ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ(ํ˜„์žฌ๋Š” ์ข…๋ฃŒ)๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ์—ˆ์œผ๋‚˜, ํ•ด๋‹น ๋ช…์นญ์„ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค๊ณ  ํ—ˆ๊ฐ€ํ•˜์˜€๋‹ค.
[44] Java๊ฐ€ ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ์–ธ์–ด๋ผ๋Š” ์ ์„ ์ƒ๊ฐํ•˜๋ฉด ์•„์ด๋Ÿฌ๋‹ˆ...
[45] ์‚ฌ์‹ค ์• ํ”Œ์€ ๋…์ž์ ์ธ JDK๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€๋ผ Java ๊ฐœ๋ฐœ์ž๋“ค์„ ๋งค์šฐ ํ”ผ๊ณคํ•˜๊ฒŒ ํ•˜๋Š” ํšŒ์‚ฌ์ด๊ธฐ๋„ ํ•˜๋‹ค.
[46] ๋‹จ์ง€ ์ง•์—ญ์„ ์‚ด์ง€๋Š” ์•Š๊ณ  FBI์—์„œ 1๋…„ ๊ทผ๋ฌดํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ‰์ณค๋‹ค.
[47] https://www.reddit.com/r/learnprogramming/comments/3uhdtr/i_just_read_joel_spolskys_the_perils_of_java/
[48] ์ด ๋ถ€๋ถ„์€ ๋Œ€ํ•™์˜ ๊ต์œก์šฉ ์–ธ์–ด๋กœ์„œ์˜ ์ด์•ผ๊ธฐ๋‹ค. ์‚ฐ์—…์šฉ์œผ๋กœ์„œ๋Š” ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด๋Š” ์‰ฌ์šฐ๋ฉด ์‰ฌ์šธ์ˆ˜๋ก ์ข‹์€ ๊ฒƒ์ด ๋‹น์—ฐํ•˜๋‹ค. ๋ฌผ๋ก  ์„ฑ๋Šฅ๊ณผ ์ƒ์‚ฐ์„ฑ ์‚ฌ์ด์—์„œ ์ ์ ˆํ•œ ๊ท ํ˜•์„ ์žก์•„์•ผ ํ•˜๊ฒ ์ง€๋งŒ.
[49] Java ์ƒ์ž„ ์œ„์›ํšŒ์—๋Š” ์ธํ…”, ์˜ค๋ผํด, JetBrains, ๋ ˆ๋“œํ–‡, ARM Holdings ๋“ฑ์ด ์†ํ•ด ์žˆ๋‹ค. ๋ชจ๋‘ ๊ฐ์ž์˜ ๋ถ„์•ผ์—์„œ ๋‚ด๋กœ๋ผํ•˜๋Š” ๊ธฐ์—…๋“ค์ด๋‹ค.
[50] '.'์€ Java ํด๋ž˜์Šค ํŒŒ์ผ์ด ์œ„์น˜ํ•œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
[51] CAFEDEAD๋ฅผ 0xCA 0xFE 0xDE 0xAD๋กœ ๋ฐ”๊ฟจ์„ ๋•Œ์˜ ์–˜๊ธฐ์ธ ๋“ฏํ•˜๋‹ค.
[52] ๊ทธ๋•Œ ํ•„์š”ํ•œ ๋งค์ง๋„˜๋ฒ„๋Š” 2๊ฐœ์˜€๋‹ค. ํ•˜๋‚˜๋Š” ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์ด๊ณ , ๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํด๋ž˜์Šค ํŒŒ์ผ ๋งค์ง๋„˜๋ฒ„์˜€๋‹ค.