DEVELOPMENT/JAVA

β˜• μžλ°” ν”„λ‘œμ νŠΈ 생성뢀터 'Hello World' λͺ…λ Ή ν”„λ‘¬ν”„νŠΈλ‘œ 좜λ ₯ν•˜κΈ°

Junesker 2025. 5. 20. 17:19
λ°˜μ‘ν˜•

 

μžλ°” ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜κ³ . java ν™•μž₯자λ₯Ό κ°€μ§€κ³  μžˆλŠ” νŒŒμΌμ„ λ§Œλ“  ν›„, 좜λ ₯ν•˜κ³ μž ν•˜λŠ” 'Hello World!'λ₯Ό μ½˜μ†”μ— 좜λ ₯ν•΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€. Eclipse IDE νˆ΄μ„ μ΄μš©ν•΄ μ½˜μ†”μ— 좜λ ₯ν•΄ λ³΄μ•˜λ‹€λ©΄. java νŒŒμΌμ„ λͺ…λ Ή ν”„λ‘¬ν”„νŠΈλ₯Ό ν™œμš©ν•΄μ„œ 좜λ ₯ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

 

 

 

 

μžλ°” ν”„λ‘œμ νŠΈ μƒμ„±ν•˜κΈ°

 

https://junesker.tistory.com/130

 

β˜• μžλ°” ν”„λ‘œμ νŠΈ 생성뢀터 'Hello World' μ½˜μ†”μ— 좜λ ₯ν•˜κΈ°

이클립슀 개발 ν™˜κ²½ ꡬ좕을 μ™„λ£Œν–ˆλ‹€λ©΄, μžλ°” κ°œλ°œμ„ μœ„ν•œ μžλ°” ν”„λ‘œμ νŠΈ 생성이 ν•„μš”ν•©λ‹ˆλ‹€. μƒμ„±λœ ν”„λ‘œμ νŠΈ νŒŒμΌμ„ μ΄μš©ν•΄μ„œ μ›ν•˜λŠ” 클래슀λ₯Ό λ§Œλ“€κ³  λ§Œλ“  ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ main()

junesker.tistory.com

 

μžλ°” ν”„λ‘œμ νŠΈ 생성은 이전 κΈ€λ‘œ λŒ€μ‹ ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. μžλ°” ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜κ³  μ›ν•˜λŠ” νŒ¨ν‚€μ§€λͺ…μ˜ νŒ¨ν‚€μ§€λ₯Ό λ§Œλ“  ν›„, μžλ°” νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.

 

 

 

 

 

λͺ…λ Ή ν”„λ‘¬ν”„νŠΈλ‘œ 좜λ ₯ν•˜κΈ°

 

Eclipse IDE둜 .java νŒŒμΌμ„ νŽΈλ¦¬ν•˜κ²Œ μ»΄νŒŒμΌν•˜κ³  Run을 톡해 μ½˜μ†”μ— 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄ν΄λ¦½μŠ€λŠ” λ³΅μž‘ν•œ λͺ…λ Ήμ–΄λ₯Ό λͺ°λΌλ„ μ‰½κ²Œ μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. ν•˜μ§€λ§Œ, Eclipse IDEλ₯Ό 톡해 μ‹€ν–‰ν•˜λŠ” 게 μ•„λ‹ˆλΌ λͺ…λ Ή ν”„λ‘¬ν”„νŠΈ λ˜λŠ” 터미널과 같은 λͺ…λ Ή λΌμΈμ—μ„œ javac와 java λͺ…λ Ήμ–΄λ‘œ μ†ŒμŠ€ νŒŒμΌμ„ 직접 μ»΄νŒŒμΌν•˜κ³  μ‹€ν–‰ν•΄μ•Ό ν•  λ•Œλ„ μžˆμŠ΅λ‹ˆλ‹€. 

 

1.  탐색기λ₯Ό μ—΄κ³  μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ— μ €μž₯된 λ‚΄ ν”„λ‘œμ νŠΈμ˜ μœ„μΉ˜λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

 

 

μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ— μ €μž₯된 λ‚΄ ν”„λ‘œμ νŠΈμ˜ μœ„μΉ˜λ‘œ μ΄λ™ν•˜λ©΄ 'src', 'bin' 폴더가 μ‘΄μž¬ν•©λ‹ˆλ‹€. 'src' ν΄λ”μ—λŠ” μžλ°” μ†ŒμŠ€ 파일(.java)이 μ €μž₯λ˜μ–΄ 있고, 'bin' ν΄λ”μ—λŠ” λ°”μ΄νŠΈ μ½”λ“œ 파일(.class)이 μ €μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 

 

 

 

 

 

2.  탐색기 경둜 μž…λ ₯창에 'cmd'라고 μž…λ ₯ν•˜κ³  λͺ…λ Ήν”„λ‘¬ν”„νŠΈλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

 

 

 

 

 

 

 

3.  νƒμƒ‰κΈ°μ—μ„œ μœ„μΉ˜ν•΄ 있던 디렉터리 경둜둜 λͺ…λ Ή ν”„λ‘¬ν”„νŠΈμ°½μ΄ μ—΄λ¦½λ‹ˆλ‹€.

 

 

 

 

 

 

4.  javac λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•΄ μ»΄νŒŒμΌμ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

 

 

컴파일 λͺ…λ Ήμ–΄

// JDK 1.8 이전 버전
// javac -d [λ°”μ΄νŠΈ μ½”λ“œ 파일 μ €μž₯ μœ„μΉ˜][μ†ŒμŠ€ 경둜/*.java]
javac -d bin src/kr/or/junesker/*.java

// JDK 11 이후 버전
// javac -d [λ°”μ΄νŠΈ μ½”λ“œ 파일 μ €μž₯ μœ„μΉ˜][μ†ŒμŠ€ 경둜/module-info.java][μ†ŒμŠ€ 경둜/*.java]
javac -d bin src/module-info.java src/kr/or/junesker/*.java

 

src 폴더 λ‚΄, .java νŒŒμΌμ„ javac λͺ…λ Ήμ–΄λ‘œ μ»΄νŒŒμΌμ„ μ§„ν–‰ν•©λ‹ˆλ‹€. 그럼 .java 파일이 .class 파일인 λ°”μ΄νŠΈ μ½”λ“œ 파일둜 λ³€ν™˜λ˜λŠ”λ° bin 폴더 λ‚΄ μƒμ„±λ©λ‹ˆλ‹€. 그리고 JDK 버전에 따라 컴파일 λͺ…λ Ήμ–΄κ°€ μ‘°κΈˆμ”© 차이가 μžˆμŠ΅λ‹ˆλ‹€. 

 

JDK 8 이전 버전은 λͺ¨λ“ˆμ— ν•΄λ‹Ήν•˜λŠ” 'module-info.java' 파일이 μ—†μ–΄ λͺ¨λ“ˆ κΈ°μˆ μžμ— λŒ€μƒμ„ μ‹ κ²½ μ“°μ§€ μ•Šμ•„λ„ λμ§€λ§Œ, JDK 11 이후 λ²„μ „λΆ€ν„°λŠ” λͺ¨λ“ˆ 기술자(module-info.java)도 컴파일 λŒ€μƒμ— λ°˜λ“œμ‹œ ν¬ν•¨μ‹œμΌœ μ»΄νŒŒμΌμ„ μ§„ν–‰ν•΄μ•Ό ν•˜λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” λͺ¨λ“ˆ λ‚΄, requires ν‚€μ›Œλ“œλ‘œ μ˜μ‘΄μ„± λͺ¨λ“ˆμ΄ κΈ°μˆ λ˜μ–΄ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 

 

λ¬Όλ‘ , JDK 11 이후 λ²„μ „μ—μ„œλ„ JDK 8 이전 λ²„μ „μ˜ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λŠ”λ° λ¬Έμ œλŠ” μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ, λͺ¨λ“ˆμ„ μ΄μš©ν•œ 컴파일이 μ•„λ‹ˆλ―€λ‘œ λͺ¨λ“ˆμ— 기술된 μ˜μ‘΄μ„± λͺ¨λ“ˆμ΄ μ μš©λ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

컴파일 ν›„, μƒμ„±λœ .class 파일

 

 

 

 

 

5.  'tree /f /a' λͺ…λ Ήμ–΄λ‘œ 전체적인 .java 파일이 μ»΄νŒŒμΌλ˜μ—ˆλŠ”μ§€ 트리 ν˜•νƒœλ‘œ ν™•μΈν•©λ‹ˆλ‹€.

 

 

javac λͺ…λ Ήμ–΄λ‘œ μ»΄νŒŒμΌν•œ ν›„ 'tree /f /a' λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ ν˜„μž¬ μœ„μΉ˜ν•΄ μžˆλŠ” 폴더 및 파일이 μ–΄λ–€ ν˜•νƒœμ˜ μœ„μΉ˜λ‘œ μ‘΄μž¬ν•˜λŠ”μ§€λ₯Ό νŠΈλ¦¬ν˜•νƒœλ‘œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 bin 폴더에 'src' 폴더 μ•ˆμ— μžˆλŠ” .java νŒŒμΌμ„ μ΄μš©ν•΄ 컴파일된 κ²°κ³Όκ°€ λ§Œλ“€μ–΄μ Έ μžˆλŠ” 것도 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

 

 

6.  java λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•΄ μ‹€ν–‰ν•©λ‹ˆλ‹€.

 

 

컴파일 λͺ…λ Ήμ–΄λ₯Ό 톡해 싀행해보면 .class 파일이 μ‹€ν–‰λ˜κ³  κ²°κ³Όκ°€ λͺ…λ Ή ν”„λ‘¬ν”„νŠΈμ°½μ— μ‹€ν–‰λ˜λŠ” κ±Έ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

컴파일 λͺ…λ Ήμ–΄

// JDK 1.8 이전 버전
// java -cp [λ°”μ΄νŠΈ μ½”λ“œ 파일 μ €μž₯ μœ„μΉ˜][νŒ¨ν‚€μ§€μ΄λ¦„ ... ν΄λž˜μŠ€μ΄λ¦„]
java -cp bin kr.or.junesker.HelloWorldClass

// JDK 11 이후 버전
// java -p [λ°”μ΄νŠΈ μ½”λ“œ 파일 μ €μž₯ μœ„μΉ˜] -m [λͺ¨λ“ˆ/νŒ¨ν‚€μ§€μ΄λ¦„ ... ν΄λž˜μŠ€μ΄λ¦„]
java -p bin -m HelloWorld/kr.or.junesker.HelloWorldClass

 

λ°”μ΄νŠΈ μ½”λ“œ 싀행도 λ§ˆμ°¬κ°€μ§€λ‘œ JDK 8 이전 버전과 JDK 11 이후 λ²„μ „μ˜ μ‹€ν–‰ λͺ…λ Ήμ–΄κ°€ λ‹€λ¦…λ‹ˆλ‹€. JDK 11 이후 λ²„μ „μ—μ„œ λͺ…λ Ήμ–΄κ°€ 달라진 μ΄μœ λŠ” 컴파일 λ‹¨κ³„μ—μ„œ μ„€λͺ…ν–ˆλ“―이 λͺ¨λ“ˆ 기술자λ₯Ό 읽기 μœ„ν•¨μž…λ‹ˆλ‹€. ν•΄λ‹Ή λͺ…λ Ήμ–΄λ₯Ό 뢄석해 보면 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • java
    - Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•œ Java Launcher λͺ…λ Ήμ–΄
  • -p bin
    - '--module-path bin' λͺ…령어와 κ°™μŠ΅λ‹ˆλ‹€.
    - λͺ¨λ“ˆ 경둜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
    - λͺ¨λ“ˆ κ²½λ‘œλŠ” Java 가상 λ¨Έμ‹ (JVM)이 λͺ¨λ“ˆμ„ μ°Ύμ•„μ•Ό ν•˜λŠ” μœ„μΉ˜μž…λ‹ˆλ‹€.
  • -m HelloWorld/kr.or.junesker.HelloWorldClass
    - '--module HelloWorld/kr.or.junesker.HelloWorldClass' λͺ…령어와 κ°™μŠ΅λ‹ˆλ‹€.
    - μ‹€ν–‰ν•  메인 λͺ¨λ“ˆκ³Ό 메인 클래슀λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

 

 

 

 

 

@Junesker


 

 

λ°˜μ‘ν˜•