์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
TIOBE ์ ์ ์ฌํด์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด | ||||
2004๋
PHP | โ | 2005๋
Java | โ | 2006๋
Ruby |
2014๋
JavaScript | โ | 2015๋
Java | โ | 2016๋
Go |
์๋ฐ Java | |
์ด์ ๋ฐ ๊ฐ๋ฐ | |
์ฒ์๋ฒ์ |
|
์ต์ ๋ฒ์ | |
์น์ฌ์ดํธ | |
์ต์ด ๊ฐ๋ฐ์ | |
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. ์ฅ์
8. ๊ฐ๋ฐํ๊ฒฝ, JVM ์ธ์ด9. ํผ๋ํ๊ธฐ ์ฌ์ด ๊ฒ๋ค10. ๊ตฌ๊ธ vs. ์ค๋ผํด: Java ์ ์๊ถ ๋ถ์11. ์ ์ ์จ12. ๋ถํฌ๋ช
ํ ๋ฏธ๋?13. ๋์14. ์ฌ๋ด15. ๊ด๋ จ ๋ฌธ์7.1.1. ์๋ง์ ๊ฐ๋ฐ์์ ๋ ํผ๋ฐ์ค7.1.2. ๋น๊ต์ ๋์ ์์ฐ์ฑ7.1.3. ๊ธฐ๊ธฐ ํธํ์ฑ7.1.4. ์์ ์ฑ7.1.5. ์์ค ์ฝ๋ ๊ฐ๋
์ฑ
7.2. ๋จ์ 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๋ ์์ ๋ผ์ด์ ์ค๋ก
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 ํํ๋ก ์ปดํ์ผํด์ ๋ฐฐํฌํด์ผ ํ๋ค.
32๋นํธ๋ฅผ ์ง์ํ๋ ๋ง์ง๋ง ๊ณต์ Java ๋ฒ์ ์ผ๋ก, ์ดํ ๋ฒ์ ์ 32๋นํธ ์ง์์ ์ค์ง ์๋ํํฐ๋ฅผ ํตํด์๋ง ์ง์๋๋ค.
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๋นํธ ๋ฒ์ ์ ๋ ์ด์ ๊ณต์์ ์ผ๋ก ๋์ค์ง ์๋๋ค.
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 ์ธ์ฆ์ ๋ฐ์ง ์์๊ธฐ์ ์ฃผ์๊ฐ ํ์ํ๋ค.
๊ฐ์ฅ ์ปค๋ค๋ ๋ณํ๋ ๋ฐ๋ก ๋ผ์ด์ ์ค ๋ถ๋ถ. 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 ํจํด ๋งค์นญ
record ํ์ ์ง์
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++๋ก ๊ฐ๋ฐํ๊ธฐ๋ ํ๋ค. ์ ์ํ๊ณ ์ ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฐ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ์ ํ ๊ณ ๋ คํ์ฌ ์ ํํ๋ ๊ฒ์ด ํ๋ช ํ๋ค.
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 ์ฌ์ฉ'์ด๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋์จ๋ค.
์๋ฅผ ๋ค์ด 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 ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๋ค.#
ํ์ง๋ง ๊ฒ์ฆ๋์๋ค๋ ๊ฑด ๋ฐ๋๋ก ๋งํ์๋ฉด ์ค๋๋์๋ค๋ ๋ป์ด๊ธฐ๋ ํ๋ค. ์ต๊ทผ์๋ 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์ ์์ฐ์ฑ์ ์๋์ ์ผ๋ก ๋ฎ์ ํธ์ด๋ค.
๊ทธ๋ฐ๋ฐ, ๊ทธ ์์ค์ ๋ํ๋ ๊ฒ ๋ฐ๋ก 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 ๋ ๋๋ง์ด ํ์ํ ์ฑ์ ๊ฒฝ์ฐ ๊ฒ์ ์์ง์ ์ด์ฉํ๋ค.
๊ทธ๋ฌ๋ ๋ค๋ฅธ ํฌ๋ก์ค ํ๋ซํผ ์ธ์ด๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ ํ๋ซํผ๋ง๋ค ๋ฏธ๋ฌํ๊ฒ ๊ธฐ๋ฅ์ด๋ ์๋์ ์ฐจ์ด๊ฐ ์๋ ๋ถ๋ถ์ด ๊ฒฐ๊ตญ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์, ์ด๋ฌํ ๋ถ๋ถ์ ๊ณ ๋ คํ์ง ์๊ณ ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ๊ทธ๋๋ก ๋ค๋ฅธ ๋ฐ์์ ๋๋ฆด ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค. 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์ด๋ผ๋
์์ฆ์ ํ๋์จ์ด์ ๋ฐ์ ํ๊ฒ ์ฐ๋๋์ด์ผ ํ๋ ํ๋ก๊ทธ๋จ์ด ์๋๋ผ๋ฉด, ๋๋ ๋ฉ์ธ ๋ก์ง์ ์๋ฒ์์ ๋์๊ฐ๊ณ ํด๋ผ์ด์ธํธ์์๋ ์ธํฐํ์ด์ค๋ง ์ ๊ณตํด์ฃผ๋ฉด ๋๋ ๊ฒฝ์ฐ๋ผ๋ฉด 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 ๋ฑ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์๋ฅผ ์ง์ ๊ตฌํํ์ฌ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ฉ๋์ผ๋ก ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์์ ์๋์ ์ผ๋ก 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++๋ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์์ ๋๋ฅผ ๋ถ์ฌํ ๋์ ์ ๋ฌธ ์ฅ๋ฒฝ์ ๋์ฌ๋ฒ๋ฆฐ ์ธ์ด๋ผ๊ณ ํ ์ ์๋ค.
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๊ฐ ๋ค์ดํฐ๋ธ ์ฝ๋๋ณด๋ค ๋๋ฆฌ์ง๋ง ๋๋ถ๋ถ์ ์ํฉ์์๋ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
๋ํ ์๋ ๊ด๋ จ ๋ฌธ์ ๋ ํ๋์จ์ด์ ์ฑ๋ฅ์ด ์ ์ ์ข์์ง๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง๋ฉด์ ํฌ์๋๊ณ ์๋ค. ์ฒ์ Java๊ฐ ๋์์ ๋์ธ 1995๋ ๋ง ํ๋๋ผ๋, ๋๋ฆฐ ์ฑ๋ฅ ๋๋ฌธ์ ๊ทธ๋ค์ง ๋ง์ด ์ฐ์ด์ง๋ ์์ ๊ฒ์ด๋ผ๊ณ ์์ํ์ง๋ง ํ์ฌ Java๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๊ณณ ์ค ํ๋๋ ์์ ์ฑ๊ณผ ์ผ์ ์์ค ์ด์์ ์ฑ๋ฅ์ด ์๊ตฌ๋๋ ์๋ฒ๋ค. Java๊ฐ ๋ค์ดํฐ๋ธ ์ฝ๋๋ณด๋ค ๋๋ฆฌ์ง๋ง ๋๋ถ๋ถ์ ์ํฉ์์๋ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
7.2.1.1. JVM ๋ก๋ฉ ์๋ ๋ฌธ์ [ํธ์ง]
Java์ ์ฌ๊ฐํ ๋จ์ ์ค ํ๋๋, ์คํํ๋ ๊ณผ์ ์์ Java Virtual Machine์ด ๋ฐ๋์ ์๋ฒฝํ๊ฒ ๋ก๋ฉ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ์ด๊ธฐ ์์ ์๊ฐ์ด ์์ ํ ์ด์ง ์ฝ๋๋ก ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๊ฒ์ ๋นํด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒ์ด๋ค. ๋จ์ ์ธ ์๋ก, ์๋ฌด๊ฒ๋ ์ํ๊ณ ์ฝ์ ํ๋ฉด์ ๋ฌ๋ "Hello, World!" ๋ผ๊ณ ์ฐ๊ธฐ๋ง ํ๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋ฐ์๋ thread๊ฐ 10๊ฐ ์ฏค ๋ฌ๋ค. ํนํ ๊ทธ ํ๋ก๊ทธ๋จ์ AWT, Swing, SQL ๊ฐ์ด ๋ถํ์ํ ๊ธฐ๋ฅ์ ๋์ด๋ค์ด๋ ๊ฒ์ ๋งค์ฐ ์ฌ๊ฐํ ๋ฌธ์ ์ด๋ค. ์ด ๋ฌธ์ ๋ ๋ฐํ์ ์์ฒด๊ฐ ์์ง ๋ชจ๋ํ๋์ง ์์๋ค๋ ์ ์์ ๊ธฐ์ธํ๋ค.
ํ์ง๋ง ์์ฆ ๊ฐ์ ๊ณ ์ฌ์ ์ปดํจํฐ์์๋ ์์ฃผ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ด์ค๋ ๊ฒ์ด ์๋๋ผ๋ฉด ์ฒด๊ฐ์ ์ฐจ์ด๋ ํฌ๊ฒ ๋์ง ์๋๋ค. ๋ํ Java 9๋ถํฐ๋ ๋๋์ด ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชจ๋ํํ๊ณ ์์ผ๋ฏ๋ก, ํ์ํ ๋ชจ๋๋ง ๋์ด์ ํ๋ก๊ทธ๋จ์ ์งค ์ ์๋ค.
ํ์ง๋ง ์์ฆ ๊ฐ์ ๊ณ ์ฌ์ ์ปดํจํฐ์์๋ ์์ฃผ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ด์ค๋ ๊ฒ์ด ์๋๋ผ๋ฉด ์ฒด๊ฐ์ ์ฐจ์ด๋ ํฌ๊ฒ ๋์ง ์๋๋ค. ๋ํ 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 ์ปดํ์ผ๋ก ์คํ๊ณผ ๋์์ ์ปดํ์ผ์ ํ๋ ๊ฒ ์๋๋ผ ๊ธฐ์กด์ ์ ์ ์ปดํ์ผ์ฒ๋ผ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ฉด, ์ปดํ์ผ ์๋๋ ๋ค์ ๋๋ ค์ง์ง๋ง ์คํ ์๋๋ ๋นจ๋ผ์ง๊ฒ ๋๋ค. ๋ฌผ๋ก ์ปดํ์ผ ํ ๋ฒ์ผ๋ก ์ฌ๋ฌ ํ๋ซํผ์์ ๋์ผํ๊ฒ ์คํ์ํค๋ ๊ฑด ๋ถ๊ฐ๋ฅํด์ง๋ค.
์ด ๋ฌธ์ ๋ Java 9์์ '์ ํ ์ปดํ์ผ'์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ ๋ ์์ ์ด๋ค. JIT ์ปดํ์ผ๋ก ์คํ๊ณผ ๋์์ ์ปดํ์ผ์ ํ๋ ๊ฒ ์๋๋ผ ๊ธฐ์กด์ ์ ์ ์ปดํ์ผ์ฒ๋ผ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ฉด, ์ปดํ์ผ ์๋๋ ๋ค์ ๋๋ ค์ง์ง๋ง ์คํ ์๋๋ ๋นจ๋ผ์ง๊ฒ ๋๋ค. ๋ฌผ๋ก ์ปดํ์ผ ํ ๋ฒ์ผ๋ก ์ฌ๋ฌ ํ๋ซํผ์์ ๋์ผํ๊ฒ ์คํ์ํค๋ ๊ฑด ๋ถ๊ฐ๋ฅํด์ง๋ค.
7.2.1.3. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํ ์คํ ์ง์ฐ ๋ฌธ์ [ํธ์ง]
๊ฐ๋น์ง ์ปฌ๋ ์
์ ์ํ ๋ฉ๋ชจ๋ฆฌ ํ๋ฆฌ์ง ํ์[22]์ด ์ด๋ฐ๋ถํฐ ์ง์์ ์ผ๋ก Java๋ฅผ ๊ดด๋กญํ๋ค. ๋ฉ์ฉกํ๊ฒ ๋์ํด์ผ ํ ํ๋ก๊ทธ๋จ์ด ์๊ฐ์ ์ผ๋ก ๋ ๋ ๋๊ธฐ๋ ๋ฏํ ํ์์ด ๋ฐ์ํ๋ ๊ฒ. ์ค๋๋ Java์ ๋ฌธ์ ๋ ๋ฐ์ดํธ์ฝ๋ ๋ณํ์ผ๋ก ์ธํ ์๋ ์ ํ๋ณด๋ค ์ด ๊ฐ๋น์ง ์ปฌ๋ ์
์ ์ํฅ์ด ๋ ํฌ๋ค๊ณ ํ ์ ์๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ์ ๊ฐ๋น์ง ์ปฌ๋ ์
์ ์ง์ํ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค๋ ๋ง์ฐฌ๊ฐ์ง์ด๊ธด ํ์ง๋ง ์คํ์๋์ ํจ๊ป Java ์ด๊ธฐ๋ถํฐ ๊พธ์คํ ๋ฌธ์ ๋ก ๊ผฝํ์จ ๊ฒ์ผ๋ก, ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ ๋๋ง๋ค ๋ค์ํ๊ฒ ๊ฐ์ ๋์ด ์๋ค.
Java 8๋ถํฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ผ์ผํค๋ ๋ฉ์๋ ์์ญ์ PermGen Area๋ฅผ ์ ๊ฑฐํ์ฌ static ์ธ์คํด์ค์ ๋ฆฌํฐ๋ด ๋ฌธ์์ด๋ GC์ ๋์์ด ๋๋๋ก ๋ฐ๋์์ผ๋ฉฐ, ํด๋์ค, ๋ฉ์๋, ๋ฐฐ์ด์ ๋ฉํ ์ ๋ณด๋ ๋์ ๋ฆฌ์ฌ์ด์ง์ด ๊ฐ๋ฅํ Metaspace๋ก ์ด๋์์ผ ์์คํ ํ ์์ญ์ ์ ์ฅ๋๋ค. ๋๋ถ์ JVM ํ ์์ญ์ ๊ณต๊ฐ์ด ๋์ด๋๊ณ PermGen Area๋ฅผ ์ค์บ/์ญ์ ํ ํ์๊ฐ ์์ด์ ธ GC์ ์ฑ๋ฅ์ด ๋ํญ ํฅ์๋์๋ค.
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]
๋๋ถ๋ถ์ ๋ค๋ฅธ ์ธ์ด์์๋ ์ํ๋ ์๋ฌ๋ง try-catch๋ฌธ์ผ๋ก ๋ฝ์๋ด๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฅ ์๋ฌด ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์๋ ๋๋ค. ์ด๋ฌํ ์ธ์ด๋ฅผ ์ ํ๋ ์ฌ๋์ด Java๋ฅผ ์ ํ๋ฉด ๊ทธ ํน์ ์ ๊ฒฝ์ง๋ ์์ธ์ฒ๋ฆฌ์ ๋ถํธํดํ๊ธฐ๋ ํ๋ค. ์คํ๋ ค ๋ช ์์ ์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ๋๋ฐ, ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ๋ ์ธํฐํ์ด์ค์ ์ ์ธ๋ ์์ธ๊ฐ ์๋๋ฉด ๊ตฌํ ํด๋์ค์์ ๊ทธ ์์ธ๋ฅผ ๋์ง ์ ์๋ค! ํนํ, Java์์ ์ ๊ณตํ๋ Iterator ์ธํฐํ์ด์ค์๋ throws ์ ์ธ ๋ฐ์๋ ์๊ธฐ ๋๋ฌธ์ Iterator๋ฅผ ๊ตฌํ๋ฐ์์ ๋ ๋ช ์์ ์ผ๋ก ์์ธ๋ฅผ ๋์ง ์ ์๋ค. ์ด ์ํฉ์ ํด๊ฒฐํ๋ ค๋ฉด RuntimeException ๊ณ์ด์ ์ธ ์๋ฐ์ ์๋ ์ํฉ์ด ํผ์ณ์ง๋ค.
๋ค๋ง, ์๊ธฐ์ ๋ด์ฉ์ ์ค๋ฌด์ ์ ๊ทผ์ ์ํ ๋ด์ฉ์ด๊ณ , ์ค์ ๋ก๋ ์ด๋ ์ฅ์ ์ผ๋ก๋ ์ทจ๊ธ๋๊ธฐ๋ ํ๋ค. Assert๋ฌธ์ ์์ ์์ฌ๋ก ์ฐ๋ฉด์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๊ฑฐ๋ ์ฝ๋ฉ๊ณผ ๋์์ ๋ฐ์ํ ์ ์๋ ๊ฐ์ข ์์ธ๋ค์ ์ธ์งํ๊ณ ์ฒ๋ฆฌํด์ฃผ๋ ๊ฑธ ์์ด๋จน๋ ๊ฒฝ์ฐ์ ๋ํ ๋์ฒ๊ฐ ๊ฐ๋ฅํ๋ค.[26]
7.2.3. ์์ค ์ฝ๋ ๊ธธ์ด[ํธ์ง]
Java๋ ์์ค ์ฝ๋์ ๊ธธ์ด๊ฐ ๋ค๋ฅธ ์ธ์ด์ ๋นํด ์๋นํ ๊ธด ํธ์ด๋ค. ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ์ฝ๋๋ฅผ ์ง ๋ค๊ณ ํ์ ๋ ๋ค๋ฅธ ์ธ์ด์ ๋นํด ์
๋ ฅํด์ผ ํ ์์ด ๋ง๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด ์ผ๋ช
Boilerplate๋ผ๊ณ ๋ถ๋ฅด๋, ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ง๊ธฐ ์ํด์ ๋ฌด์กฐ๊ฑด ์๋ฌด์ ์ผ๋ก ์์ฑํด ์ฃผ์ด์ผ๋ง ํ๋ ์์๊ณผ ์ฝ๋์ ๋ถ๋์ด ๋ง๋ค.
์ธํฐํ๋ฆฌํฐ ์ธ์ด์์๋ puts("Hello") ์ ๋๋ก ๋๋ฌ์ ์ผ์ Java์์๋
์ด๋งํผ์ ์จ์ผ ํ๋ค. ๊ฐ์ ์ผ์ ํ๋ C์ธ์ด ์ฝ๋๋
ํ์ด์ฌ์ ๊ฒฝ์ฐ
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์ผ๋ก ๋์ฒดํ๋ ค๋ ์์ง์์ด ์กฐ๊ธ์ฉ ๋ํ๋๋ค๊ฐ, ์ดํ์๋ ์์ ์๋๋ก์ด๋ ์คํ๋์ค์์ ์ฑ ๊ฐ๋ฐ ๊ธฐ๋ณธ ์ธ์ด๋ก ์ง์ ๋๊ธฐ๊น์ง ํ๋ค.
์ธํฐํ๋ฆฌํฐ ์ธ์ด์์๋ 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")์ํค์ฑ ์ ์๋ 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๋ฅผ ์ฐ๋ฉด ๋๋ค.
์ด๋ฐ ๋ช ์ฌ ์ค์ฌ์ ์๊ฐ์ ํ์คํ ๋ง์ ๊ฒฝ์ฐ ํธ๋ฆฌํ๋ ๋์ฌ ์ค์ฌ์ผ๋ก ์๊ฐํด์ผ ํ๋ ์ํฉ๋ ์๊ฐ๋ณด๋ค ํํ๋ค๋ ๊ฒ ๋ฌธ์ . ์๋ฅผ ๋ค์ด์, ํต์ํธ๋ฅผ 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)์ ๊ทธ์ ๋์ํ๋ ์ถ์ ๋ฉ์๋ ๋ช๊ฐ๋ฅผ ๋์ดํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
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 ๊ด๋ฆฌ ๋ฑ์ด ์๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ํด 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์ด๋ค.
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์๋ก ๋ฐ๋ ธ๋ค.##
์ฌํ์ ํ๋ฆ์ ์ ๋ฆฌํ์๋ฉด ์ด๋ ๋ค. 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]
์๋ฐ ์๋ฐ์ ค๋ฆฌ์คํธ๋ 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๋ฅผ ์ฐฝ์ํ ๋ ๊ฐ์ด ์ผํ๋ ํจํธ๋ฆญ ๋ ธํผ์ 1999๋ FBI์ ์๋ํฌ๋ฅด๋ ธ ํจ์ ์์ฌ๋ก ์ธํด ์ฒดํฌ๋์๋ค.[46] ๋ค์ผ๋ก IT ๊ด๊ณ์๋ค์ ๋ ธํผ์ด ๊ธฐ์ ๋ฐฉํ๋ฒฝ์ ํต๊ณผํ ์ ์๋ ํต์ ๋๊ตฌ๋ฅผ ๋ง๋๋ ์ผ์ ๊ด์ฌ์ ๋ณด์ธ ์ด์ ๋ฅผ ์ผ์ฐ๊ฐ์น ์ง์ํ์๋ค๊ณ ...
- ์กฐ์์จ ๋ธ๋ก๊ทธ๋ก ์ ๋ช ํ ์กฐ์์ด ์์ฒญ๋๊ฒ ์ซ์ดํ๋ ์ธ์ด. ์กฐ์ ์คํด์คํค๊ฐ 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๋ ์ด๋ถํฐ ์๋ฐ ์ค์นํ์ผ๋ก ์์ฅํ ๋์ฌ์จ์ด๊ฐ ๊ธฐ์น์ ๋ถ๋ฆฌ๊ณ ์๋ค. ์ด๋๋ ๊ฐ์๊ธฐ ์ง์ ์ค์นํ์ผ์ ๋ค์ด๋ฐ๊ฑฐ๋ ํ์ง๋ ์์๋๋ฐ ์ค์นํ์ผ์ด ์ ์ ๋ก ์คํ๋๋ฉฐ, ๋๋ถ๋ถ์ ๊ฐ์ผ์๋ค์ ์ด๋ฅผ ์๋ ์ ๋ฐ์ดํธ๋ก ์ธ์งํ๊ณ ๊ทธ๋๋ก ์ ๋ฐ์ดํธ ํด๋ฒ๋ ค์ ๊ฐ์ผ๋๋ค๊ณ ํ๋ค. ์ฌ์ง์ด ์ฌ์ฉํ๋ ์ด์์ฒด์ ์ ์ธ์ด๋ฅผ ์ธ์งํ์ฌ ํด๋น ์ธ์ด์ ์๋ฐ ์ค์นํ์ผ์ ์๋ ๋ฌธ์ฅ๊ณผ ์ด๋ฏธ์ง๊น์ง ์ฒ ์ ํ๊ฒ ์ฌํ๋์ด์ ์์ฌํ ์ฌ์ง๊ฐ ์๋ค๊ณ ํ๋ค.
- ๋ง์ธํฌ๋ํํธ๋ ์๋ Java๋ก ๊ฐ๋ฐ๋์๋๋ฐ, ์๋ ๋ฌธ์ ๋๋ฌธ์ธ์ง ๊ฒ์์ ํต์งธ๋ก C++๋ก ๋ค์ ์งฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ์๋๊ฐ 10๋ฐฐ ๊ฐ๊น์ด ๋นจ๋ผ์ก๋ค. ๋ค๋ง ๊ธฐ์กด์ Java ์๋์ ์ผ๋ก ๊ฐ๋ฐ๋ ์ ๋์จ๋ค์ด ์๋ ๋ง๊ณ , ๊ทธ๊ฒ๋ค์ด ๋ฒ ๋๋ฝ ์๋์ ๊ณผ ํธํ์ด ์ ๋ผ์ ์ฌ์ ํ Java ์๋์ ์ ์ฌ์ฉํ๋ ์ ์ ๋ค์ด ๋ง๋ค. ์ค์ ๋ก Java๋ ์๋๋ก์ด๋์ฉ ์ค๋งํธํฐ ๊ฒ์์ ์ ์ธํ๋ฉด ๊ฒ์์์๋ ๊ฑฐ์ ์ฐ์ด์ง ์๋๋ค.
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์์๋ ์ด๋ฏธ ์ง์ํ๊ณ ์๋ ๊ธฐ๋ฅ์ด๋ค.(ํ์ฌ๋ ์ถ์ ์ค๋จ)
[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");
}
์ด ๋๋ค.
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๊ฐ์๋ค. ํ๋๋ ์ค๋ธ์ ํธ ํ์ผ์ด๊ณ , ๋ ๋ค๋ฅธ ํ๋๋ ํด๋์ค ํ์ผ ๋งค์ง๋๋ฒ์๋ค.