Study 7. ํŒจํ‚ค์ง€ ๐Ÿ™‚

์ •์ง€์€ยท2023๋…„ 1์›” 30์ผ
0

JAVA๋ฅผ ์žก์•„~

๋ชฉ๋ก ๋ณด๊ธฐ
7/15
post-thumbnail

Today's Study


  1. package ํ‚ค์›Œ๋“œ
  2. import ํ‚ค์›Œ๋“œ
  3. ์ ‘๊ทผ์ œ์–ด์ž
  4. ํด๋ž˜์ŠคํŒจ์Šค
  5. CLASSPATH ํ™˜๊ฒฝ๋ณ€์ˆ˜
  6. -classpath

1. package ํ‚ค์›Œ๋“œ


package ํ‚ค์›Œ๋“œ๋ž€ ํด๋ž˜์Šค๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋กœ ํด๋ž˜์Šค๋“ค์„ ๊ตฌ๋ถ„์ง“๋Š” ํด๋”์ด๋‹ค. ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ๋™์ผํ•ด๋„ ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋˜๊ณ  ํŒจํ‚ค์ง€ ๋‚ด๋ถ€์— ํŒจํ‚ค์ง€๋ฅผ ๋‘๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

package study7.package;

public class className {

}

๊ฐ€์žฅ ์ฒซ์ค„ package study7.package; ๊ฐ€ ํŒจํ‚ค์ง€ ์„ ์–ธ๋ถ€์ด๊ณ  ํ•ด๋‹น์ด๋ฆ„๊ณผ ํŒจํ‚ค์ง€๊ฐ€ ์œ„์น˜ํ•œ ํด๋”์˜ ์ด๋ฆ„์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

ํŒจํ‚ค์ง€ ์ด๋ฆ„ ๊ทœ์น™

  1. ์ˆซ์ž, -, $๋ฅผ ์ œ์™ธํ•œ ํŠน์ˆ˜ ๋ฌธ์ž ์‚ฌ์šฉ ๊ธˆ์ง€
  2. java๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒจํ‚ค์ง€ ๊ธˆ์ง€
  3. int, static ๋“ฑ ์ž๋ฐ” ์˜ˆ์•ฝ์–ด ์‚ฌ์šฉ ๊ธˆ์ง€
  4. ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑํ•˜๋Š”๊ฒƒ์ด ๊ด€๋ก€์ด๋‹ค.

FQCK (Full Qualified Class Name)

FQCK๋Š” object, ํ•จ์ˆ˜, ๋ณ€์ˆ˜์˜ ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•˜๊ณ  Java์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์†ํ•œ ํŒจํ‚ค์ง€๋ช…์„ ๋ชจ๋‘ ํฌํ•จํ•œ ์ด๋ฆ„์„ ๋งํ•œ๋‹ค.

String s = new String();

// FQCN
java.lang.String s = new java.lang.String();


2. import ๋ฌธ


import๋ฌธ์€ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ํด๋ž˜์Šค์˜ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ž˜์Šค ์ด๋ฆ„ ์•ž์— ํŒจํ‚ค์ง€์˜ ๊ฒฝ๋กœ๊นŒ์ง€ ํฌํ•จํ•œ ํ’€ ๋„ค์ž„, ์ฆ‰ FQCK๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํ•ญ์ƒ ๋ช…์‹œ๋ฅผ ํ•˜๊ธฐ์—” ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๋ฏ€๋กœ import๋ฅผ ์‚ฌ์šฉํ•ด ์“ธ ํด๋ž˜์Šค์˜ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

import packageA.classA;

import packageA.classB;

import packageA.*;

import๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธํ•œ๋‹ค. packageA์˜ ํŠน์ • ํด๋ž˜์Šค๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ packageA.์‚ฌ์šฉํ• ํด๋ž˜์Šค์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๊ณ  packageA์˜ ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด package.*๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

import java.packageA.*;
import java.packageB.*;

import java.*; // xxx

ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒจํ‚ค์ง€๋“ค์„ .*๋กœ ํ•œ๋ฒˆ์— importํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

(์ธํ…”๋ฆฌ์ œ์ด(์œˆ๋„์šฐ)์—์„œ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด ๋นจ๊ฐ„์ค„์ด ๋–ด์„ ๋•Œ Alt+Enter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ํ•ด๋‹น import๋ฌธ์„ ์ž‘์„ฑํ•ด์ค€๋‹ค.)

๐Ÿ’ก java.lang
์•ž์„œ FQCK๋ฅผ ์„ค๋ช…ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์˜€๋˜ java.lang.String๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ํ‰์†Œ ์‚ฌ์šฉํ• ๋•Œ ์›๋ž˜ import๋ฅผ ๋”ฐ๋กœ ํ•˜์ง€ ์•Š์•˜์—ˆ์„ ๊ฒƒ์ด๋‹ค. java.lang ํŒจํ‚ค์ง€๋Š” import๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.



3. ์ ‘๊ทผ ์ œ์–ด์ž


์ ‘๊ทผ์ œ์–ด์ž๋Š” ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ, ์ธ์Šคํ„ด์Šค ๋ฐ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ ์ •๋ณด ์€๋‹‰์ด๋ž€ ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ ํ•„์š” ์—†๋Š” ์ •๋ณด๋ฅผ ์ˆจ๊ฒจ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ •๋ณด ์€๋‹‰์„ ์œ„ํ•ด ์ ‘๊ทผ์ œ์–ด์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ž๋ฐ”์—์„œ๋Š” 4๊ฐ€์ง€์˜ ์ ‘๊ทผ ์ œ์–ด์ž, private, public, default, protected๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

1) private

private๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ ์–ธ๋œ ํด๋ž˜์Šค ๋ฉค๋ฒ„๋Š” ์™ธ๋ถ€์— ๊ณต๊ฐœ๋˜ ์ง€์•Š๊ณ  ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ์˜ค๋กœ์ง€ ํ•ด๋‹น ๊ฐ์ฒด์˜ public ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ณดํ†ต private๋Š” public ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ์„ธ๋ถ€์ ์ธ ๋™์ž‘์„ ๊ตฌํ˜„ํ•œ๋‹ค.

2) public

public์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ•œ ํด๋ž˜์Šค ๋ฉค๋ฒ„๋Š” ์™ธ๋ถ€๋กœ ๊ณต๊ฐœ๋˜๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด ์–ด๋””์—์„œ๋“  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ private์—์„œ ๋งํ–ˆ๋‹ค์‹œํ”ผ public๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ•ด๋‹น ๊ฐ์ฒด์˜ private ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

3) default (package-private)

default๋ฅผ ์œ„ํ•œ ์ ‘๊ทผ ์ œ์–ด์ž๋Š” ๋”ฐ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
(๊ถŒ์žฅํ•˜์ง„์•Š์ง€๋งŒ ํ•œ ์†Œ์Šค ํŒŒ์ผ์— 2๊ฐœ ์ด์ƒ์˜ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ์— ํŒŒ์ผ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ์ œ์™ธํ•œ ํด๋ž˜์Šค๋Š” package-private๋กœ ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด์— ์žˆ๋Š” ํด๋ž˜์Šค๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.)

default ์ ‘๊ทผ์ œ์–ด๋ฅผ ๊ฐ€์ง€๋Š” ๋ฉค๋ฒ„๋Š” ๊ฐ™์€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„์™€ ๊ฐ™์€ ํŒจํ‚ค์ง€์— ์†ํ•˜๋Š” ๋ฉค๋ฒ„์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

4) protected

์ž๋ฐ” ํด๋ž˜์Šค๋Š” private ๋ฉค๋ฒ„๋กœ ์ •๋ณด๋ฅผ ์€๋‹‰ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ƒ์†์„ ํ• ๋•Œ ๋ถ€๋ชจ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋Š” public๋ฉค๋ฒ„์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋˜๊ณ  ์™ธ๋ถ€์—์„œ๋Š” private๋ฉค๋ฒ„๋กœ ์ทจ๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด protected๋Š” ์‚ฌ์šฉ๋œ๋‹ค.

protected๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
1. ์ด ๋ฉค๋ฒ„๋ฅผ ์„ ์–ธํ•œ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„
2. ์ด ๋ฉค๋ฒ„๋ฅผ ์„ ์–ธํ•œ ํด๋ž˜์Šค๊ฐ€ ์†ํ•œ ํŒจํ‚ค์ง€์˜ ๋ฉค๋ฒ„
3. ์ด ๋ฉค๋ฒ„๋ฅผ ์„ ์–ธํ•œ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ž์‹ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„

์ ‘๊ทผ์ œ์–ด์ž์˜ ์ ‘๊ทผ๋ฒ”์œ„

public > protected > default > private ์ˆœ์œผ๋กœ ์ ‘๊ทผ๋ฒ”์œ„๊ฐ€ ๋„“๋‹ค.

์ ‘๊ทผ ์ œ์–ด์ž๊ฐ™์€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๊ฐ™์€ ํŒจํ‚ค์ง€์˜ ๋ฉค๋ฒ„์ž์‹ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๊ทธ์™ธ์˜ ์˜์—ญ
publicโ—‹โ—‹โ—‹โ—‹
protectedโ—‹โ—‹โ—‹X
defaultโ—‹โ—‹XX
privateโ—‹XXX


4. ํด๋ž˜์ŠคํŒจ์Šค


์ž๋ฐ”๊ฐ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํƒ์ƒ‰์„ ํ• ๋•Œ ํด๋ž˜์Šค๋‚˜ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์„ ๊ธฐ์ค€์ด ๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๋งํ•œ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ž๋ฐ”์˜ ์†Œ์Šค์ฝ”๋“œ(.java)๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๊ฐ€ ๋œ๋‹ค. ์ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ class Loader๋ฅผ ํ†ตํ•ด JVM์— ๋กœ๋”ฉํ•˜๋Š”๋ฐ ์ด๋•Œ ํด๋ž˜์ŠคํŒจ์Šค(๊ฒฝ๋กœ)๋ฅผ ์ด์šฉํ•ด ํƒ์ƒ‰ํ•˜์—ฌ ๋กœ๋”ฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋•Œ ํด๋ž˜์ŠคํŒจ์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. CLASSPATH ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ -classpath ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

5. CLASSPATH ํ™˜๊ฒฝ๋ณ€์ˆ˜


ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” ์šด์˜์ฒด์ œ์—์„œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋“ค์„ ์ƒ์„ฑํ•  ๋•Œ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜์ด๋‹ค. JVM๊ธฐ๋ฐ˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ์ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋™์ž‘ํ•œ๋‹ค.

์ž๋ฐ”๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ๋Œ๋ฆฌ๊ธฐ ์ „ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •์„ ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์„ค์ •์„ ํ•ด๋‘๋ฉด ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ์ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์˜ ํด๋ž˜์Šค๋“ค์„ JVM์— ๋กœ๋“œํ•˜๊ฒŒ ๋œ๋‹ค.

6. -classpath(-cp)


์ด๋Š” CLASSPATH ํ™˜๊ฒฝ๋ณ€์ˆ˜์™€ ๋‹ฌ๋ฆฌ ์ปดํŒŒ์ผ์„ ํ• ๋•Œ ์ง์ ‘ ํŒŒ์ผ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด์ฃผ๋Š” ์˜ต์…˜์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด HelloWorld.java ํŒŒ์ผ์ด C:\Java ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌํ•˜๊ณ  ์ปดํŒŒ์ผ์— ํ•„์š”ํ•œ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์ด C:\Java\ClassFile ์— ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

javac -classpath C:\Java\ClassFile C:\Java\Hello.java

javac -cp C:\Java\ClassFile C:\Java\Hello.java

์ฐธ์กฐํ•  ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ;๋กœ ๊ตฌ๋ถ„ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

javac -classpath C:\Java\ClassFile;C:\Java\ClassFile2 C:\Java\Hello.java

javac -cp C:\Java\ClassFile;C:\Java\ClassFile2 C:\Java\Hello.java

๐Ÿ“š Reference


๋ณธ ์Šคํ„ฐ๋””๋Š” 2020 ๋ฐฑ๊ธฐ์„ ๋‹˜์˜ ์ž๋ฐ”์Šคํ„ฐ๋””์˜ ์ปค๋ฆฌํ˜๋Ÿผ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€