์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ?
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ์ ํ์ฉํ ์ ์๋ ํด๋์ค์ ์ธํฐํ์ด์ค๋ค์ ๋ชจ์๋์ ๊ฒ์ ๋งํ๋ค. ์ผ๋ฐ์ ์ผ๋ก JAR ์์ถ ํ์ผ ํํ๋ก ์กด์ฌํ๋ค. JAR ํ์ผ์๋ ํด๋์ค์ ์ธํฐํ์ด์ค์ ๋ฐ์ดํธ์ฝ๋ ํ์ผ์ด ์์ถ๋์ด ์๋ค. ํน์ ํด๋์ค์ ์ธํฐํ์ด์ค๊ฐ ์ฌ๋ฌ ์์ฉํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ๋ ๊ณตํต์ผ๋ก ์์ฃผ ์ฌ์ฉ๋๋ค๋ฉด JAR ํ์ผ๋ก ์์ถํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ JAR ํ์ผ์ ClassPath์ ์ถ๊ฐํด์ผ ํ๋ค. ClassPath๋ ๋ง ๊ทธ๋๋ก ํด๋์ค๋ฅผ ์ฐพ๊ธฐ ์ํ ๊ฒฝ๋ก์ด๋ค.
my_lib ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋ก์ ํธ ์์ฑ
Eclipse ๊ธฐ์ค์ผ๋ก [File] - [New] - [Java Project] ๋ฅผ ์ ํํ๋ค.
Project name ์ my_lib์ผ๋ก ์ ๊ณ Create module-info.java file ์ ํ์ ํด์ ํด์ค๋ค. (์ด ๋ ๋ฐ๋์ ํด์ ํด์ค์ผํ๋ค)
my_lib์ src ํด๋ ์ฐํด๋ฆญ ํ [New] - [Package] ๋ก ๋ค์ ํ์ผ์ ๋ง๋ค์ด ์ค๋ค.
๊ทธ๋ฆฌ๊ณ my_lib ํ๋ก์ ํธ ์ฐํด๋ฆญ ํ [New] - [Folder] ๋ฅผ ์ ํํด dist ์ธ ํด๋๋ฅผ ์์ฑํ๋ค.
my_lib ํ๋ก์ ํธ๋ฅผ ์ ํํ๊ณ ๋ง์ฐ์ค ์ฐํด๋ฆญ ํ [Export]๋ฅผ ์ ํํ๋ค. Export์ Java - Jar file์ ์ ํ ํ srcํด๋๋ง ์ฒดํฌํด์ค๋ค. ๊ฒฝ๋ก๋ dist ์๋์ my_lib.jar ๋ก ์ง์ ํด์ค๋ค.
finish ๋ฒํผ์ ๋๋ฅด๊ณ ํ์ธํด๋ณด๋ฉด my_lib.jar ํ์ผ์ด ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ A์ Bํด๋์ค๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
package pack1;
public class A {
public void method() {
System.out.println("A-method ์คํ");
}
}
package pack2;
public class B {
public void method() {
System.out.println("B-method ์คํ");
}
}
my_application_1 ํ๋ก์ ํธ ์์ฑ
ํ๋ก์ ํธ ์์ฑ ๋ฐฉ๋ฒ์ ์์ ๋ด์ฉ๊ณผ ๋์ผํ๋ค.
์ฌ๊ธฐ์ ์ถ๊ฐํด์ผ ํ ๋ถ๋ถ์ [Build Path]์ [Configure Build Path]์ด๋ค. ํ๋ก์ ํธ๋ฅผ ์ฐํด๋ฆญ ํ [Build Path] - [Configure Build Path]๋ฅผ ์ ํํ๋ฉด [Libraries] ํญ์์ ClassPath ํญ๋ชฉ์ ์ ํํ๊ณ [Add External JARs] ๋ฅผ ํด๋ฆญํ๋ค. my_lib ํ๋ก์ ํธ์ dist ํด๋์ ์๋ my_lib.jar ํ์ผ์ ์ ํํ์ฌ Apply ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ค๋ฅธ์ชฝ ์ฌ์ง์ Project์ ClassPath ์ถ๊ฐํด์ฃผ๋ฉด my_lib ํ๋ก์ ํธ๋ฅผ ์์ ํ๋ ์ฆ์ my_application_1์์ ์์ ๋ ๋ด์ฉ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ํด๋ ์ฐํด๋ฆญ - [Refresh] ๋ฅผ ํด์ค์ผํ๋ค.
my_application_1 ์ Main ํด๋์ค๋ฅผ ์์ฑํด๋ณด์
package app;
import pack1.A;
import pack2.B;
public class Main {
public static void main(String[] args) {
A a = new A();
a.method();
B b = new B();
b.method();
}
}
- Module
๋ชจ๋์ ํจํค์ง ๊ด๋ฆฌ ๊ธฐ๋ฅ๊น์ง ํฌํจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์ผ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ด๋ถ์ ํฌํจ๋ ๋ชจ๋ ํจํค์ง์ ์ธ๋ถ ํ๋ก๊ทธ๋จ์์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง ๋ชจ๋์ ๋ค์๊ณผ ๊ฐ์ด ์ผ๋ถ ํจํค์ง๋ฅผ ์๋ํ์ฌ ์ ๊ทผํ ์ ์๊ฒ๋ ํ ์ ์๋ค.
๋ ๋ค๋ฅธ ์ฐจ์ด์ ์ ๋ชจ๋์ ์์ ์ด ์คํํ ๋ ํ์๋ก ํ๋ ์์กด ๋ชจ๋์ ๋ชจ๋ ๊ธฐ์ ์(module-info.java)์ ๊ธฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก my_module_a ์ my_module_b๋ฅผ ๋ง๋ค์ด์ค๋ค. ๊ทธ๋ฆฌ๊ณ my_application_2 ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
ํ๋ก์ ํธ ์์ฑ ์ Module์ ๋ฐ๋์ create ํด์ค๋ค. module-info.java ๋ผ๋ ํ์ผ์ด ์๊ธธ ๊ฒ์ด๋ค.
my_module_a ์ my_module_b ์ module-info.java ์ ์์ฑํ๋ค.
// module a
module my_module_a {
exports pack1;
exports pack2;
}
// module b
module my_module_b {
exports pack3;
exports pack4;
}
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ a์ b๋ฅผ require ํด์ค์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ my_application_2์ module-info.java ์๋ ์๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
module my_application_2 {
requires my_module_a;
requires my_module_b;
}
Main Class
package app;
import pack1.A;
import pack2.B;
import pack3.C;
public class Main {
public static void main(String[] args) {
A a = new A();
a.method();
B b = new B();
b.method();
C c = new C();
c.method();
}
}
๋ค ์์ฑ ํ ๋ชจ๋์ ๊ฒฝ๋ก๊ฐ ์ด๋์๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ [ํ๋ก์ ํธ ์ฐํด๋ฆญ] - [Build Path] - [Configure Build Path] ํด๋ฆญ ํ [Projects] ํญ์ ์ ํํ๋ค. ๊ทธ๋ฆฌ๊ณ ModulePath ์์ ํญ๋ชฉ์ ์ ํํ๊ณ ๋ง์น๋ฉด๋๋ค.
'๐ป BackEnd > ๐จ Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐จ [Java] [ํด๋์ค] ์๋ฐ ํด๋์ค (0) | 2023.04.25 |
---|---|
๐จ [Java] Exception(์์ธ ์ฒ๋ฆฌ) (0) | 2023.04.19 |
๐จ [Java] ๋ฌผํ ์ฌ๊ณ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ (0) | 2023.04.09 |
๐จ [Java] (static)์ ์ ๋ณ์, ๋ฉ์๋ (0) | 2023.04.07 |
๐จ [Java] ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object Oriented Programming) (0) | 2023.04.05 |