-
Live Study - Java PackageHello, World ๐ป/Java โ๏ธ 2020. 12. 30. 22:49
package
- ๊ด๋ จ๋ ํด๋์ค, ์ธํฐํ์ด์ค, Enum, Annotation ๋ค์ ๋ฌถ์, ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ๋์ ๋๋ ํ ๋ฆฌ์ด๋ค.
- ์ ๊ทผ ์ ์ด, namespace ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ์ค์ ํด๋์ค์ ์ด๋ฆ์ ํจํค์ง ๋ช ์ ํฌํจํ ๊ฒ์ด๋ค. me.ohhhmycode ํจํค์ง์ Study ํด๋์ค๊ฐ ์๋ค๋ฉด ์ค์ ํด๋์ค ์ด๋ฆ์ me.ohhhmycode.Study ์ด๋ค. ํจํค์ง + ํด๋์ค๋ช ์ ๋ถ์ธ ๊ฒ์ Fully Qualified Name ์ด๋ผ๊ณ ํ๋ค.
- ๋๋ ํ ๋ฆฌ๊ฐ ๋๋ ํ ๋ฆฌ๋ฅผ ํฌํจํ ์ ์๋ ๊ฒ ์ฒ๋ผ, ํจํค์ง๋ ๋ค๋ฅธ ํจํค์ง๋ฅผ ํฌํจํ ์ ์๋ค. '.' ์ ์ผ๋ก ๊ตฌ๋ถํ๋ค.
package ์ ์ธ
- ํจํค์ง ์ ์ธ์ ์ฃผ์๊ณผ ๊ณต๋ฐฑ์ ์ ์ธํ๊ณ ์ฒซ๋ฒ์งธ๋ก ์์ผํ๋ค. ๋จ ํ๋ฒ๋ง ํ์ฉ๋๋ค.
- ํด๋์ค๋ ์ ์ธํ ํจํค์ง ์ด๋ฆ๊ณผ ๋๊ฐ์ ๋๋ ํ ๋ฆฌ์ ์์นํด์ผํ๋ค.
- ํจํค์ง๋ฅผ ๋ฐ๋ก ์ ์ธํ์ง ์์๋ค๋ฉด, '์ด๋ฆ์๋ ํจํค์ง'์ ๋ค์ด๊ฐ๋ค. ์๋ฐ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ค.
package naming
- ํจํค์ง๋ช ์ ํด๋์ค๋ช ๊ณผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์๋ฌธ์๋ก ํ๋ ๊ฒ์ ์์น์ผ๋ก ํ๋ค. ๋ค๋ง, ๋์๋ฌธ์๋ ํ์ฉ๋๋ค.
- ๊ฐ๋ฐํ๋ ๊ทธ๋ฃน์ ์ธํฐ๋ท ๋๋ฉ์ธ ๋ช ์ ํจํค์ง๋ช ์ผ๋ก ์ฌ์ฉํ๋ค. ์) com.example.mypackage
- ๊ฐ ๊ทธ๋ฃน์ฌ์์ ์ปจ๋ฒค์ ์ ๋ง๋ค์ด ํด๋์ค ๋ช ์ถฉ๋์ ๋ฐฉ์งํ๋ฉด ๋๋ค.
- java ์์ ์ ๊ณตํ๋ ํจํค์ง๋ java, javax ๋ก ์์ํ๋ค.
- ํ์ดํ(-)์ด๋ ๋ค๋ฅธ ํน์๋ฌธ์๋ก ์์ํ๊ฑฐ๋, ํฌํจํ ์ ์๋ค. ์ซ์ ์์ ์ธ๋๋ฐ(_)๋ฅผ ๋ถ์ด๊ณ ์์ํ ์๋ ์๋ค.
- java ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ํ์ํ ๊ฒฝ์ฐ, ์์ด๋ ๋ค์ ์ธ๋๋ฐ(_)๋ฅผ ๋ถ์ธ๋ค.import
- ํจํค์ง์ ์๋ ํด๋์ค๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํด๋น ๋ฉค๋ฒ๋ฅผ ํจํค์ง๋ช .ํด๋์ค๋ช ์ ์ฌ์ฉํด ์ฐธ์กฐํ๊ฑฐ๋, ํด๋น ํด๋์ค๋ฅผ import ํ๊ฑฐ๋, ์ ์ฒด ํจํค์ง๋ฅผ import ํ๊ฑฐ๋ ํด์ผํ๋ค.
- ํจํค์ง๋ช .ํด๋์ค๋ช ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ Fully Qualified Name ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ธ๋ฐ,com.example.mypackage.MyClass myClass = new com.example.mypackage.MyClass()
์ด๋ ๊ฒ ํจํค์ง๋ช .ํด๋์ค๋ช ์ ๋ถ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
- package ์ ์ธ ์ดํ import ๋ฌธ์ ์์ฑํด ๋ค๋ฅธ ํจํค์ง์ ํด๋์ค๋ฅผ import ํ ์ ์๋ค. ํจํค์ง ์ ์ธ๊ณผ ๋ค๋ฅด๊ฒ import ๋ฌธ์ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ ์ ์๋ค.import com.example.mypackage.MyClass; // .. MyClass myClass = new MyClass();
- *(asterisk) ๋ฅผ ์ฌ์ฉํด์ ์ ์ฒด ํจํค์ง๋ฅผ import ํ ์ ์๋ค. mypackage ํจํค์ง์ MyClass ์ธ์ YourClass ๋ ํจ๊ป ์ ์๋์ด ์๋ ๊ฒฝ์ฐ * ๋ฅผ ์ฌ์ฉํด import ๋ฌธ์ ํ๋ฒ๋ง ์ฌ์ฉํ๋ฉด ๋๋ค.import com.example.mypackage.*; // .. MyClass myClass = new MyClass(); YourClass yourClass = new YourClass();
- ์ด๋ค ํด๋์ค์ public ๋ด๋ถ ํด๋์ค๋ค์ด ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด import ํ ์ ์๋ค.package com.example.mypackage; public class MyClass { public static class NestedClass1 { } public static class NestedClass2 { } }
import com.example.mypackage.MyClass; import com.example.mypackage.MyClass.*; public class Sample { public static void main(String[] args) { MyClass myClass = new MyClass(); NestedClass1 nestedClass1 = new NestedClass1(); NestedClass2 nestedClass2 = new NestedClass2(); } }
์ฃผ์ํ ๊ฒ์ com.example.mypackage.MyClass.*; ๋ฅผ ํ๋ค๊ณ ํด์ MyClass ํด๋์ค๊ฐ import ๋๋ ๊ฒ์ ์๋๋ค.
- * ๋ก ์ ์ฒด ํจํค์ง๋ฅผ ํฌํจํ ์ ์์ง๋ง, ํ์ ํจํค์ง์ ์์๊น์ง ํฌํจํ๋ ๊ฒ์ ์๋๋ค.com.example.mypackage sub - SubClass - SubClass2 - MyClass - MyClass2
์์ ๊ฐ์ ๊ตฌ์กฐ์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด import ๋ฅผ ํด์ผํ๋ค.
import com.example.mypackage.*; import com.example.mypackage.sub.*;
java.lang ํจํค์ง์, ํ์ฌ ์ํ ํจํค์ง๋ ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก import ๋ฌธ์ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก import ํ์ง ์์๋ ๋๋ค.
static import
- ์ ์ ๋ณ์, ๋ฉ์๋๋ฅผ import ํ ๋ static import ๋ฅผ ์ฌ์ฉํด ์ข ๋ ํธํ๊ฒ ์ธ ์ ์๋ค.
package com.example.mypackage; public class MyClass { public static final int NUMBER = 10; }
* static import ๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐimport com.example.mypackage.MyClass; public class Sample { public static void main(String[] args) { int x = MyClass.NUMBER; } }
* static import ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐimport static com.example.mypackage.MyClass.NUMBER; public class Sample { public static void main(String[] args) { int x = NUMBER; } }
์ ๊ทผ์ง์์- ์ ๊ทผ ์ ์ด์๋ ํด๋์ค, ๋ณ์, ๋ฉ์๋์ ์ ์ฉํด์ ์ธ๋ถ์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ ํํ๋ ์ญํ ์ ํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด์, ๋ถํ์ํ ๋ถ๋ถ์ ๊ฐ์ถ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ๊ฐ์ฒด์งํฅ๊ฐ๋ ์ ์บก์ํ (Encapsulation)์ ํด๋นํ๋ค.
- ํด๋์ค์๋ public, default ์ ์ด์๊ฐ ํ์ฉ๋๊ณ ,
- ๋ณ์์ ๋ฉ์๋์๋ public, protected, default, private ์ ์ด์๊ฐ ํ์ฉ๋๋ค.
์ ๊ทผ ์ ์ด์๋ฅผ ๋ฐ๋ก ์ ์ํ์ง ์๋ ๊ฒฝ์ฐ, default ์ ์ด์๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ์ฉ๋๋ค.public ์ ๊ทผ ์ ํ์ด ์๋ค. protected ๊ฐ์ ํจํค์ง ๋ด์์, ๋ค๋ฅธ ํจํค์ง์ธ ๊ฒฝ์ฐ ์์ ํด๋์ค์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. default ๊ฐ์ ํจํค์ง ๋ด์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. private ๊ฐ์ ํด๋์ค ๋ด์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. package access.example; public class MyClass { public int publicValue = 18; private int privateValue = 20; public void publicMethod() { } private void privateMethod() { } protected void protectedMethod() { } void defaultMethod() { } }
package access.main; // ๋ค๋ฅธ ํจํค์ง import access.example.MyClass; public class Main { public static void main(String[] args) { MyClass myClass = new MyClass(); myClass.publicValue = 20; // Ok myClass.publicMethod(); // Ok // myClass.privateValue = 40; Access Error // myClass.privateMethod(); Access Error // myClass.defaultMethod(); Access Error // myClass.protectedMethod(); Access Error } }
classpath
- ํด๋์คํจ์ค๋ JVM ์ด Java ํ๋ก๊ทธ๋จ์ ์คํํ ๋, ํด๋์ค๋ฅผ ์ฐพ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฒฝ๋ก์ด๋ค.
- .java ํ์ผ๋ค๊ณผ .class ํ์ผ๋ค์ด ์ ์ฅ๋๋ ๊ฒฝ๋ก๊ฐ ๋ค๋ฅธ๋ฐ, ํด๋์คํจ์ค์๋ .class ๊ฐ ์์ฑ๋๋ ๋๋ ํ ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํด์ผํ๋ค.
- ํด๋์คํจ์ค๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์๋๋ฐ, OS ํ๊ฒฝ๋ณ์์ ํด๋์คํจ์ค๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ๊ณผ, ์๋ฐ ์คํ์ -classpath ์ต์ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
- ํ์ฌ ํด๋์คํจ์ค๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
Window OS:
C:\> set CLASSPATH
Unix ๊ธฐ๋ฐ OS:
% echo $CLASSPATHclasspath ํ๊ฒฝ๋ณ์
- ํ๊ฒฝ๋ณ์๋ OS ์ ์ง์ ํ๋ ๋ณ์๋ก, JVM ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ ํ๊ฒฝ๋ณ์์ ๊ฐ์ ์ฐธ๊ณ ํด์ ๋์ํ๋ค.
- ์๋ฐ๋ ํด๋์คํจ์ค๋ก ํ๊ฒฝ๋ณ์ CLASSPATH ๋ฅผ ์ฌ์ฉํ๋ค. ํด๋์ค๋ก๋(Class loader)๋ ํด๋์คํจ์ค๋ฅผ ์ฐธ์กฐํด์ ํด๋์ค๋ฅผ ๋ก๋ํ๋ค.
- ํด๋์คํจ์ค๋ฅผ ๋ฑ๋กํ๋ฉด ์คํํ ๋๋ง๋ค -classpath ์ต์ ์ ์ฌ์ฉํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํ์ง๋ง, OS ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ํด๋์คํจ์ค๊ฐ ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ด์์ฑ์์ ๋ถ๋ฆฌํ ์ ์๋ค.https://opentutorials.org/module/516/5245 ์ ํ๊ฒฝ๋ณ์๋ฅผ ๋ฑ๋กํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ธํ ๋์์๋ค.
-classpath ์ต์
- ์ต์ -classpath ๋ JVM ์๊ฒ ํด๋์ค ํ์ผ์ ์์น๋ฅผ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
- ํด๋์ค๊ฐ ์ฌ๋ฌ ๊ฒฝ๋ก์ ๋ถ์ฐ๋์ด ์์ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
์์ ) ClasspathSample.javaclass Item { public void print() { System.out.println("Hello, Java"); } } class ClasspathSample { public static void main(String[] args) { Item item = new Item(); item.print(); } }
ํฐ๋ฏธ๋์์ ์ ํ์ผ์ ์์ฑํ๊ณ , ์ปดํ์ผ์ ํ๋ฉด ํด๋น ๋๋ ํ ๋ฆฌ์ 3๊ฐ ํ์ผ์ด ์๊ธฐ๊ณ , ์คํํ๋ฉด Hello, Java ๊ฐ ์ ์ถ๋ ฅ๋๋ค.๋ง์ฝ ํ์ฌ ๋๋ ํ ๋ฆฌ์์ lib ํด๋๋ฅผ ๋ง๋ค๊ณ Item.class ํ์ผ์ lib ํ์๋ก ์ฎ๊ธฐ๊ณ , ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด NoClassDefFoundError ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
-classpath ".:lib" ์ต์ ์ ์ฃผ๊ณ ์คํํ๋ฉด ๋ค์ ์ ์ถ๋ ฅ๋๋ค. -classpath, -cp ์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ค.
".:lib" ์์ . ๋ ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. lib ๋ ํ์ฌ ๋๋ ํ ๋ฆฌ์ ํด๋์ค ํ์ผ์ด ์๋ค๋ฉด ํ์ ๋๋ ํ ๋ฆฌ ์ค lib ์์ ํด๋์ค ํ์ผ์ ์ฐพ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
unix ๊ธฐ๋ฐ์ os ์์๋ ํจ์ค๋ฅผ ๊ตฌ๋ถํ ๋ ์ฝ๋ก (:) ์ ์ฌ์ฉํ๊ณ , window ๊ธฐ๋ฐ์ธ ๊ฒฝ์ฐ ์ธ๋ฏธ์ฝ๋ก (;) ์ผ๋ก ์ฐ๊ฒฐํ๋ค. window ํ๊ฒฝ์ด์์ผ๋ฉด ".;lib" ๋ผ๊ณ ํด์ผํ๋ค.
. ์ ์ ์ธํ๋ฉด ํ์ฌ ๋๋ ํ ๋ฆฌ์์๋ ์ฐพ์ง ์๊ฒ ๋๊ธฐ ๋๋ฌธ์ java.lang.ClassNotFoundException ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.References
https://docs.oracle.com/javase/tutorial/java/package/packages.html
https://opentutorials.org/module/516/5245
์๋ฐ์ ์ ์ (www.yes24.com/Product/Goods/24259565)'Hello, World ๐ป > Java โ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Live Study - Java Exception (0) 2021.01.23 Live Study - Java Interface (0) 2021.01.07 Live Study - Java ์์ (Inheritance) (0) 2020.12.23 Live Study - Java ์ Class (0) 2020.12.14 Live Study - Java ์ ํ๋ฌธ, ๋ฐ๋ณต๋ฌธ (0) 2020.12.06