λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

🎁 νŒ¨ν‚€μ§€

νŒ¨ν‚€μ§€(package)λž€, 클래슀 λ¬ΆμŒμ΄λ‹€.
νŒ¨ν‚€μ§€μ—λŠ” 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν¬ν•¨μ‹œν‚¬ 수 있으며, μ„œλ‘œ κ΄€λ ¨λœ ν΄λž˜μŠ€λ“€λΌλ¦¬ κ·Έλ£Ή λ‹¨μœ„λ‘œ λ¬Άμ–΄ λ†“μŒμœΌλ‘œμ¨ 클래슀λ₯Ό 효율적으둜 관리할 수 μžˆλ‹€.
같은 μ΄λ¦„μ˜ 클래슀일 지라도 μ„œλ‘œ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ‘΄μž¬ν•˜λŠ” 것이 κ°€λŠ₯ν•΄μ„œ,
λ‹€λ₯Έ κ°œλ°œμžκ°€ κ°œλ°œν•œ 클래슀 라이브러리의 클래슀 이름과 μΆ©λŒν•˜λŠ” 것을 ν”Όν•  수 μžˆλ‹€.

 

ν΄λž˜μŠ€κ°€ 물리적으둜 ν•˜λ‚˜μ˜ 클래슀파일(*.class)인 것과 같이 νŒ¨ν‚€μ§€λŠ” 물리적으둜 ν•˜λ‚˜μ˜ 디렉토리이닀.

 

예λ₯Ό λ“€μ–΄, java.lang.String ν΄λž˜μŠ€λŠ” 디렉토리 java의 μ„œλΈŒ 디렉토리인 lang에 μ†ν•œ String.class νŒŒμΌμ΄λ‹€.

 

🧑 ν•˜λ‚˜μ˜ μ†ŒμŠ€νŒŒμΌμ—λŠ” 첫 번째 λ¬Έμž₯으둜 단 ν•œλ²ˆμ˜ νŒ¨ν‚€μ§€ μ„ μ–Έλ§Œμ„ ν—ˆμš©ν•œλ‹€.
🧑 λͺ¨λ“  ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€μ— μ†ν•΄μ•Όν•œλ‹€.
🧑 νŒ¨ν‚€μ§€λŠ” 점(.)을 κ΅¬λΆ„μžλ‘œ ν•˜μ—¬ κ³„μΈ΅κ΅¬μ‘°λ‘œ ꡬ성할 수 μžˆλ‹€.
🧑 νŒ¨ν‚€μ§€λŠ” 물리적으둜 클래슀 파일(.class)을 ν¬ν•¨ν•˜λŠ” ν•˜λ‚˜μ˜ 디렉토리이닀.

νŒ¨ν‚€μ§€μ˜ μ„ μ–Έ

ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ˜ μ†ŒμŠ€νŒŒμΌ(.java)의 맨 μœ„μ— λ‹€μŒκ³Ό 같이 ν•œ μ€„λ§Œ 적어주면 λœλ‹€.

package νŒ¨ν‚€μ§€λͺ…;

클래슀λͺ…κ³Ό μ‰½κ²Œ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄μ„œ μ†Œλ¬Έμžλ‘œ ν•˜λŠ” 것을 μ›μΉ™μœΌλ‘œ ν•˜κ³  μžˆλ‹€.

λͺ¨λ“  ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€μ— ν¬ν•¨λ˜μ–΄μ•Όν•œλ‹€.
μ†ŒμŠ€νŒŒμΌμ— μžμ‹ μ΄ 속할 νŒ¨ν‚€μ§€λ₯Ό μ§€μ •ν•˜μ§€ μ•ŠλŠ” λͺ¨λ“  ν΄λž˜μŠ€λŠ” μžλ™μ μœΌλ‘œ 이름 μ—†λŠ” νŒ¨ν‚€μ§€μ— μ†ν•˜κ²Œ λœλ‹€.

🎁 import 문

import문은 μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ†ŒμŠ€νŒŒμΌμ— μ‚¬μš©λœ 클래슀의 νŒ¨ν‚€μ§€μ— λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•œλ‹€.

import 문의 μ„ μ–Έ

λͺ¨λ“  μ†ŒμŠ€νŒŒμΌ(*.java)μ—μ„œ import 문은 package λ¬Έ λ‹€μŒμ—, 그리고 클래슀 μ„ μ–Έλ¬Έ 이전에 μœ„μΉ˜ν•΄μ•Όν•œλ‹€.
import문은 package λ¬Έκ³Ό 달리 ν•œ μ†ŒμŠ€νŒŒμΌμ— μ—¬λŸ¬ 번 μ„ μ–Έν•  수 μžˆλ‹€.

import νŒ¨ν‚€μ§€λͺ….클래슀λͺ…;
or
import νŒ¨ν‚€μ§€λͺ….*; // μ§€μ •λœ νŒ¨ν‚€μ§€μ— μ†ν•˜λŠ” λͺ¨λ“  클래슀λ₯Ό νŒ¨ν‚€μ§€λͺ… 없이 μ‚¬μš©ν•  수 μžˆλ‹€.

static import λ¬Έ

import 문을 μ‚¬μš©ν•˜λ©΄ 클래슀의 νŒ¨ν‚€μ§€λͺ…을 μƒλž΅ν•  수 μž‡λŠ” 것과 같이 static import 문을 μ‚¬μš©ν•˜λ©΄ static 멀버λ₯Ό ν˜ΈμΆœν•  λ–„ 클래슀 이름을 μƒλž΅ν•  수 μžˆλ‹€.

import static java.lang.Integer.*;
import static java.lang.Math.random;
import static java.lang.System.out;
out.println(random());
// System.out.println(Math.random());

🎁 CLASSPATH

ν΄λž˜μŠ€νŒ¨μŠ€λŠ” 컴파일러(javac.exe)λ‚˜ JVM등이 클래슀 μœ„μΉ˜λ₯Ό μ°ΎλŠ” 데 μ‚¬μš©λ˜λŠ” κ²½λ‘œμ΄λ‹€.

 

πŸ“’ J2JDK 버전 λΆ€ν„°λŠ” /jre/lib/ext 폴더에 ν•„μš”ν•œ 클래슀 λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ λ³΅μ‚¬ν•΄λ†“μœΌλ©΄ μ‚¬μš© κ°€λŠ₯ν•˜μ—¬ νŠΉλ³„ν•œ κ²½μš°κ°€ μ•„λ‹ˆλ©΄ μ„€μ •ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

JAVA μŠ€ν„°λ”” 1μ£Όμ°¨μ—μ„œ κ³΅λΆ€ν–ˆλ˜ JVM λ™μž‘κ³Όμ •μ„ λ‹€μ‹œ μƒκΈ°μ‹œμΌœλ³΄μž.
javac둜 .java νŒŒμΌμ„ .class 파일둜 컴파일 μ‹œμΌœμ€¬κ³ ,
java둜 ν•΄λ‹Ή 클래슀 νŒŒμΌμ„ μ‹€ν–‰μ‹œμΌœ 쀬닀.
이 λ•Œ, μžλ°”λŠ” 이 클래슀 νŒŒμΌμ„ 찾을 수 μžˆμ–΄μ•Ό ν•˜λŠ”λ°, μ΄λ•Œ classpath λ₯Ό μ‚¬μš©ν•œλ‹€.

클래슀 패슀λ₯Ό μ§€μ •ν•˜λŠ” 방법

  • CLASSPATH ν™˜κ²½ λ³€μˆ˜ μ‚¬μš©
  • java runtime에 -classpath μ˜΅μ…˜ μ‚¬μš©

CLASSPATH ν™˜κ²½ λ³€μˆ˜ μ‚¬μš©

μœˆλ„μš°μ—μ„ 
μ œμ–΄νŒ - μ‹œμŠ€ν…œ - κ³ κΈ‰ μ‹œμŠ€ν…œ μ„€μ • - ν™˜κ²½λ³€μˆ˜ - μƒˆλ‘œλ§Œλ“€κΈ°μ—μ„œ
CLASSPATH라고 λ³€μˆ˜ 이름을 μ§€μ •ν•˜κ³ 
λ³€μˆ˜ 값을 JAVA_HOME μ•„λž˜μ˜ lib ν΄λ”λ‘œ 지정해주면 λœλ‹€.

classpathκ°€ λ°”λ₯΄κ²Œ μ„€μ •λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄, μ½”λ©˜λ“œ μ°½μ—μ„œ
echo %classpath% 라고 쳐보면 λœλ‹€.

java runtime에 -classpath μ˜΅μ…˜ μ‚¬μš©

-classpathλŠ” μ»΄νŒŒμΌλŸ¬κ°€ 컴파일 ν•˜κΈ° μœ„ν•΄μ„œ ν•„μš”λ‘œ ν•˜λŠ” μ°Έμ‘°ν•  클래슀 νŒŒμΌλ“€μ„ μ°ΎκΈ° μœ„ν•΄μ„œ 컴파일 μ‹œ 파일 경둜λ₯Ό μ§€μ •ν•΄μ£ΌλŠ” μ˜΅μ…˜μ΄λ‹€. -cp라고 μ¨μ€˜λ„ λœλ‹€.

 

예λ₯Ό λ“€μ–΄,
Hello.java 파일이 C:\Java 디렉토리에 μ‘΄μž¬ν•˜κ³ ,
ν•„μš”ν•œ 클래슀 νŒŒμΌλ“€μ΄ C:\Java\Engclasses에 μœ„μΉ˜ν•œλ‹€λ©΄
javac -classpath CL\Java\EngClasses C:\Java\Hello.java둜 ν•΄μ£Όλ©΄ λœλ‹€.

λ§Œμ•½ μ°Έμ‘°ν•  클래슀 νŒŒμΌλ“€μ΄ κ·Έ μ™Έμ˜ λ‹€λ₯Έ 디렉터리, 그리고 ν˜„ 디렉토리에도 μ‘΄μž¬ν•œλ‹€λ©΄,
javac -classpath .;C:\Java\Engclasses;C;\Java\Korclasses C:\Java\Hello.java 둜 ν•΄μ£Όλ©΄ λœλ‹€.
μœ„μ™€ 같이 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ ꡬ뢄해쀄 수 μžˆλ‹€.
(.운 ν˜„ 디렉토리, ..은 ν˜„ λ””λ ‰ν† λ¦¬μ—μ„œ μƒμœ„ 디렉토리λ₯Ό μ˜λ―Έν•œλ‹€.)

 

더보기

https://kils-log-of-develop.tistory.com/430#%ED%81%B4%EB%9E%98%EC%8A%A4%ED%8C%A8%EC%8A%A4

μžλ°”μ˜ 정석 (λ„μš°μΆœνŒ, 남ꢁ μ„± μ €)

 

Seize the day!

Spring MVC | Spring Boot | Spring Security | Mysql | Oracle | PostgreSQL | Vue.js | Nuxt.js | React.js | TypeScript | JSP | Frontend | Backend | Full Stack | μžκΈ°κ³„λ°œ | 미라클 λͺ¨λ‹ | 일상