week 6 jisoo - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
-
์๋ฐ์์ ์ปฌ๋ ์ ํ๋ ์์ํฌ์ด๋, ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ํด๋์ค์ ์งํฉ์ ์๋ฏธํ๋ค. ๋ค์ ๋งํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌ์กฐํํ์ฌ ํด๋์ค๋ก ๊ตฌํํด ๋์ ๊ฒ์ด๋ค.
-
JDK 1.2 ์ด์ ๊น์ง๋ Vector, Hashtable, Properties์ ๊ฐ์ ์ปฌ๋ ์ ํด๋์ค๋ค์ ์๋ก ๊ฐ์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ์ผ๋ JDK 1.2๋ถํฐ ์ปฌ๋ ์ ํ๋ ์์์ด ๋ฑ์ฅํ๋ฉด์ ๋ค์ํ ์ข ๋ฅ์ ์ปฌ๋ ์ ํด๋์ค๊ฐ ์ถ๊ฐ๋๊ณ ๋ชจ๋ ์ปฌ๋ ์ ํด๋์ค๋ฅผ ํ์คํ๋ ๋ฐฉ์์ผ๋ก ๋ค๋ฃฐ ์ ์๋๋ก ์ฒด๊ณํ๋์๋ค.
-
์ด๋ฌํ ์ปฌ๋ ์ ํ๋ ์์ํฌ์ ์๋ฐ์ ์ธํฐํ์ด์ค(interface)๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๋ค.
- ์ปฌ๋ ์ ํ๋ ์์ํฌ์์๋ ํฌ๊ฒ ์ปฌ๋ ์ ์ 3๊ฐ์ง ํ์ ์ผ๋ก ๋๋์ด ํต์ฌ์ด ๋๋ ์ฃผ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ค.
- List ์ธํฐํ์ด์ค
- Set ์ธํฐํ์ด์ค
- Map ์ธํฐํ์ด์ค
- ์ฌ๊ธฐ์ List์ Set ์ธํฐํ์ด์ค์ ๊ณตํต์ ์ ๋ฝ์๋ด์ด ์๋ก์ด ์ธํฐํ์ด์ค์ธ Collection์ ์ถ๊ฐ๋ก ์ ์ํ์๋ค.
- Map ์ธํฐํ์ด์ค๋ ๊ตฌ์กฐ์์ ์ฐจ์ด๋ก ์ธํด ๋ณ๋๋ก ์ ์๋๋ค. ํ์ ์ปฌ๋ ์ ํ๋ ์์ํฌ์ ์ค์ธ ์์ค๋ฅผ ๋ถ์ํด๋ณด๋ฉด ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๋ฅ๋ ฅ์ ํฅ์์ํค๋๋ฐ ๋ง์ ๋์์ด ๋ ๊ฒ์ด๋ค.
์๋ฐ์์ ์ปฌ๋ ์
ํ๋ ์์ํฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ์๋ ์ธํฐํ์ด์ค ๊ฐ์ ์์ ๊ด๊ณ๋ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
- ์์ ๊ทธ๋ฆผ์์ ๋ <K, V>๋ ์ปฌ๋ ์ ํ๋ ์์ํฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋ชจ๋ ํด๋์ค๊ฐ ์ ๋ค๋ฆญ์ผ๋ก ํํ๋์ด ์๋ค๋ ๊ฒ์ ์๋ ค์ค๋ค.
- ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ์ผ๋ก, ๋ฐ์ดํฐ์ ์ค๋ณต์ ํ์ฉํ๋ค.
- ์) ๋๊ธฐ์ ๋ช ๋จ
-
Vector, ArrayList, LinkedList, Stack, Queue
๋ฑ
- ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ์ผ๋ก, ๋ฐ์ดํฐ์ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค.
- ์) ์์ ์ ์์งํฉ, ์์์ ์งํฉ
-
HashSet, TreeSet
๋ฑ
-
ํค(Key)์ ๊ฐ(Value)์ ํ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ์ ์งํฉ์ผ๋ก ์์๊ฐ ์๋ค.
-
ํค๋ ์ค๋ณต์ ํ์ฉํ์ง ์์ง๋ง ๊ฐ์ ์ค๋ณต๋ ์ ์๋ค.
-
์) ์ฐํธ๋ฒํธ, ์ง์ญ๋ฒํธ(์ ํ๋ฒํธ)
HashMap, TreeMap, Hashtable, Properties
-
์ปฌ๋ ์ ํ๋ ์์ํฌ์ ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์ปฌ๋ ์ ํด๋์ค(
Collection Class
)๋ผ๊ณ ํ๋ค. (์ฆ ์์ List, Set, Map 3๊ฐ์ง ์ค์ ํ๋๋ฅผ ๊ตฌํํ๊ณ ์์.) ๊ตฌํํ ์ธํฐํ์ด์ค์ ์ด๋ฆ์ด ํด๋์ค์ ์ด๋ฆ์ ํฌํจ๋์ด ์์ด์ ์ด๋ฆ๋ง์ผ๋ก๋ ํด๋์ค์ ํน์ง์ ์ฝ๊ฒ ์ ์ ์๋๋ก ๋์ด์๋ค.
(Vector, Stack, Hashtable, Properties์ ๊ฐ์ ํด๋์ค๋ค์ ์ปฌ๋ ์ ํ๋ ์์ํฌ๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ ์ ์กด์ฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ปฌ๋ ์ ํ๋ ์์ํฌ์ ๋ช ๋ช ๋ฒ์ ๋ฐ๋ฅด์ง ์์, Vector๋ Hashtable๊ณผ ๊ฐ์ ๊ธฐ์กด์ ์ปฌ๋ ์ ํด๋์ค๋ค์ ํธํ์ ์ํด์ ๋จ๊ฒจ๋์์ง๋ง ๊ฐ๋ฅํ๋ฉด ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค. ๊ทธ ๋์ ์๋ก ์ถ๊ฐ๋ ArrayList์ HashMap์ ์ฌ์ฉํ์)
Call by value
Call by value์ Call by reference์ ์ค๋ช ์ผ๋ก ์์ฃผ ๋ฑ์ฅํ๋ swap ์์ ์ ๋๋ค.
์ผ๋จ ๋จผ์ ์์ ๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
Class CallByValue{
public static void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("swap() ํธ์ถ ์ : a = " + a + ", b = " + b);
swap(a, b);
System.out.println("swap() ํธ์ถ ํ : a = " + a + ", b = " + b);
}
}
๊ฒฐ๊ณผ๋ ์ด๋ป๊ฒ ๋์ฌ๊น์?
swap() ํธ์ถ ์ : a = 10, b = 20
swap() ํธ์ถ ํ : a = 10, b = 20
"์ด? ๋ถ๋ช swap() ๋ฉ์๋์ a, b๋ฅผ ๋๊ฒผ์ผ๋๊น ๊ฐ์ด ๋ฐ๊ปด์ผ ํ๋๊ฑฐ ์๋?"
๋ค, ์๋๋๋ค. ๊ฒฐ๋ก ์ ๋จผ์ ๋ง์๋๋ฆฌ์๋ฉด swap() ๋ฉ์๋ ํธ์ถ ์์ ์ฌ์ฉํ ์ธ์ a, b์ swap() ๋ฉ์๋๋ด์ ๋งค๊ฐ๋ณ์ x, y๋ ์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด์๋ฉด ์ดํด๊ฐ ๋น ๋ฅด๊ฒ ๋์ค๊ฒ๋๋ค.
main()์์ ์ ์ธ ๋ ๋ณ์ a์ b๊ฐ ๊ฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ 0x0001๋ฒ์ง์ 0x0005๋ฒ์ง์ ํ ๋น ๋์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ํ ๋น ๋ ๋ฉ๋ชจ๋ฆฌ ๋ณ์์๋ ๊ฐ๊ฐ 10๊ณผ 20์ ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค. ์ดํ, swap() ๋ฉ์๋ ํธ์ถ ์์ ์ฌ์ฉํ ์ธ์
a์ b
๋ ํ ๋น ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ด๊ฒจ์ ธ ์๋ ๊ฐ๋ง์ด ๋ณต์ฌ
๋์ด swap() ๋ฉ์๋ ๋ด๋ถ์ ๋งค๊ฐ๋ณ์ x์ y์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ด๊ฒจ์ง๊ฒ ๋ฉ๋๋ค. ๋น์ฐํ๊ฒ๋ swap() ๋ฉ์๋๊ฐ ์ํํ๋ ๋์ ์ฌ์ฉ๋๋ ๋ณ์๋ค์ main()์ ์กด์ฌํ๋ a์ b๊ฐ ์๋ swap() ๋ด๋ถ์ ์๋ก ์์ฑ ๋ x์ y์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์๋ ์ํ ํ์๋ ๊ฒฐ๊ณผ ๊ฐ์ ๋ณํ๊ฐ ์์ต๋๋ค.
์ฅํฉํ๊ฒ ์ค๋ช ํ ๊ฒ ๊ฐ์ง๋ง, ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Call by value๋ ๋ฉ์๋ ํธ์ถ ์์ ์ฌ์ฉ๋๋ ์ธ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์๋ ๊ฐ(value)์ ๋ณต์ฌํ์ฌ ๋ณด๋ธ๋ค.
Call by reference
Call by reference๋ ๋ฉ์๋ ํธ์ถ ์์ ์ฌ์ฉ๋๋ ์ธ์๊ฐ, ๊ฐ์ด ์๋ ์ฃผ์(Address)๋ฅผ ๋๊ฒจ์ค์ผ๋ก์จ, ์ฃผ์๋ฅผ ์ฐธ์กฐ(Reference)ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ด๋ฒ์๋ ์์ ๋น์ทํ ์์ ๋ฅผ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Class CallByReference{
int value;
CallByReference(int value) {
this.value = value;
}
public static void swap(CallByReference x, CallByReference y) {
int temp = x.value;
x.value = y.value;
y.value = temp;
}
public static void main(String[] args) {
CallByReference a = new CallByReference(10);
CallByReference b = new CallByReference(20);
System.out.println("swap() ํธ์ถ ์ : a = " + a.value + ", b = " + b.value);
swap(a, b);
System.out.println("swap() ํธ์ถ ์ : a = " + a.value + ", b = " + b.value);
}
}
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
swap() ํธ์ถ ์ : a = 10, b = 20
swap() ํธ์ถ ํ : a = 20, b = 10
์ด๋ฒ์๋ ์ํ๋ ๋๋ก a์ b์ ๊ฐ์ด ๋ฐ๋์ด์ ์ ๋์์ต๋๋ค.
๊ทธ๋ฆผ์ ๋ณด๋ฉฐ ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
main()์์ ์ ์ธ ๋ CallByReference ํ์ ์ ๋ณ์ a์ b๋ ๊ฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ 0x0001๋ฒ์ง์ 0x0005๋ฒ์ง์ ์ ์ฅ๋ 10๊ณผ 20์ ์ฃผ์ ๊ฐ์ ์ ์ฅํ๊ฒ ๋ฉ๋๋ค. ์ดํ, swap() ๋ฉ์๋ ํธ์ถ ์์ ์ธ์ a์ b๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ ๋ ์ฃผ์ ๊ฐ์ ๋ณต์ฌํ์ฌ ๋งค๊ฐ๋ณ์ x์ y์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํฉ๋๋ค. ๊ฒฐ๊ตญ swap() ๋ฉ์๋๋ 10๊ณผ 20์ด ์ ์ฅ ๋ 0x0001๋ฒ์ง์ 0x0005๋ฒ์ง์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ฐ์ฐํ๊ธฐ ๋๋ฌธ์, ์ฐ์ฐ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณํ๊ฒ ๋ฉ๋๋ค. main()์์ ์ ์ธ ๋ ๋ณ์ a์ b๋ ๊ฐ๊ฐ 0x0001๋ฒ์ง์ 0x0005๋ฒ์ง๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ณํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ๋ค์ฌ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ณํ๊ฒ ๋ฉ๋๋ค.
Call by reference๋ ๋ฉ์๋ ํธ์ถ ์ ์ฌ์ฉ๋๋ ์ธ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด์๋ ์ฃผ์(Address)๋ฅผ ๋ณต์ฌํ์ฌ ๋ณด๋ธ๋ค.
-
AspectJ๋ PARC์์ ๊ฐ๋ฐํ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ฉ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (AOP) ํ์ฅ ๊ธฐ๋ฅ์ด๋ค.
-
์ดํด๋ฆฝ์ค ์ฌ๋จ ์คํ ์์ค ํ๋ก์ ํธ์์ ๋ ๋ฆฝํ ๋๋ ์ดํด๋ฆฝ์ค๋ก ํตํฉํ์ฌ ์ด์ฉ ๊ฐ๋ฅํ๋ค.
-
AspectJ๋ ์ต์ข ์ฌ์ฉ์๋ฅผ ์ํ ๋จ์ํจ๊ณผ ์ด์ฉ์ฑ์ ๊ฐ์กฐํจ์ผ๋ก์จ ํญ๋๊ฒ ์ฌ์ฉ๋๋ AOP์ ๋ํ ๋ ํฉํฐ ํ์ค(์ฌ์ค ์ ํ์ค)์ด ๋์๋ค.
-
AspectJ๋ ์์
Spring AOP API
์์ ์ ๊ณตํ์ง ์๋ ํ๋์ ๋ํAdvisor
๋ฅผ ์ง์ํ๊ณ ,CTW, LTW
๊ณผ ๊ฐ์ ๋ค์ํ ์๋น ๋ฐฉ๋ฒ์์ด์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ํ๋ก๊ทธ๋จ์ ํผํฌ๋จผ์ค๋ฅผ ํฅ์ ์ํฌ ์ ์๋๋ก ํด์ค๋ค. -
๋ํ
@Aspect
์ด๋ ธํ ์ด์ ์ ๋ฐํ์ผ๋ก Aspect ๋ก์ง์ ์์ฑ ํ ์ ์์ด ๊ธฐ์กด์ xml๋ฐฉ์๋ณด๋ค๋ ๋ ํธ๋ฆฌํ๋ค. -
ํ์ฌ๋
Spring AOP + AspectJ
๋ ๊ฑฐ์ ํ์ค์ด๋ผ๊ณ ํ ์ ๋๋ก ๋ง์ด ์ฌ์ฉ์ด ๋๊ณ ์๋ ์ถ์ธ๋ค. -
AspectJ๋ ์คํ๋ง ๋ฟ๋ง ์๋๋ผ AOP๋ฅผ ์ง์ํ์ง ์๋ ํ๋ ์ ์ํฌ์์๋ AOP๋ฅผ ์ง์ํ ์ ์๋๋ก ๋์์ ์ฃผ๋ API์ด๋ค.
-
Aspect๋ ๊ฐ์ฒด์งํฅ ์ธ์ด์ ํด๋์ค์ ๋น์ทํ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
-
๊ทธ ์์ฒด๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฉ์ธ ๋ก์ง์ ๋ด์ ํต์ฌ๊ธฐ๋ฅ์ ์๋์ง๋ง, ๋ง์ ์ค๋ธ์ ํธ์ ๊ฑธ์ณ์ ํ์ํ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ถ์ํ ํด๋์ ๊ฒ์ด๋ค.
-
๊ตฌ์กฐ์ ์ผ๋ก ๋ณด์๋ฉด Aspect = PointCut + Advisor์ด๋ค.
- ์๋น(Weaving) ์ด๋? Aspect ํด๋์ค์ ์ ์ ํ Advice ๋ก์ง์ ํ๊น(Target)์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์๋น ๋ฐฉ๋ฒ์ผ๋ก๋ RTW, CTW, LTW 3๊ฐ์ง๊ฐ ์๋ค.
- Spring AOP์์ ์ฌ์ฉํ๋ ์๋น ๋ฐฉ์์ด๋ค.
Proxy
๋ฅผ ์์ฑํ์ฌ ์ค์ ํ๊น(Target) ์ค๋ธ์ ํธ์ ๋ณํ์์ด ์๋น์ ์ํํ๋ค. - ์ค์ ๋ฐํ์ ์, Method ํธ์ถ ์์ ์๋น์ด ์ด๋ฃจ์ด ์ง๋ ๋ฐฉ์์ด๋ค.
- ์์คํ์ผ, ํด๋์ค ํ์ผ์ ๋ํ ๋ณํ์ด ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ํฌ์ธํธ ์ปท์ ๋ํ ์ด๋๋ฐ์ด์ค ์ ์ฉ ๊ฐฏ์๊ฐ ๋์ด ๋ ์๋ก ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค๋ ๋จ์ ์ด ์๋ค.
- ๋ํ ๋ฉ์๋ ํธ์ถ์ ๋ํด์๋ง ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉ ํ ์ ์๋ค.
- AspectJ์๋ AJC (AspectJ Compiler)๋ผ๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋๋ฐ Java Compiler๋ฅผ ํ์ฅํ ํํ์ ์ปดํ์ผ๋ฌ์ด๋ค. (AspectJ์์ ์ฌ์ฉํ๋ ๋ฐฉ์)
- AJC๋ฅผ ํตํด java ํ์ผ์ ์ปดํ์ผ ํ๋ฉฐ,
์ปดํ์ผ ๊ณผ์
์์ ๋ฐ์ดํธ ์ฝ๋ ์กฐ์์ ํตํด Advisor ์ฝ๋๋ฅผ ์ง์ ์ฝ์ ํ์ฌ ์๋น์ ์ํํ๋ค. - ์ฅ์ ์ผ๋ก๋ 3๊ฐ์ง ์๋น ์ค์์๋ ๊ฐ์ฅ ๋น ๋ฅธ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ฌ์ค๋ค. (JVM ์์ ์ฌ๋ผ๊ฐ ๋ ๋ฉ์๋ ๋ด์ ์ด๋ฏธ advise ์ฝ๋๊ฐ ์ฝ์ ๋์ด์๊ธฐ ๋๋ฌธ)
- ํ์ง๋ง ์ปดํ์ผ ๊ณผ์ ์์ lombok๊ณผ ๊ฐ์ด ์ปดํ์ผ ๊ณผ์ ์์ ์ฝ๋๋ฅผ ์กฐ์ํ๋ ํ๋ฌ๊ทธ์ธ๊ณผ ์ถฉ๋์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ฃผ ๋๋ค. (๊ฑฐ์ ๊ฐ์ด ์ฌ์ฉ ๋ถ๊ฐ)
- ์คํ๋ง์ AOP๋ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ๋ค์ ํ์ฉํ ํ๋ก์ ๋ฐฉ์์ AOP์ AspectJ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์๋ฅผ ์ฐ์ง ์๋ AOP ๊ธฐ์ ์ด ์๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํ๋ก์ ์์ด ๋ถ๊ฐ๊ธฐ๋ฅ์ ํ๊น ์ค๋ธ์ ํธ์ ์ ์ฉํด ์ค ์ ์์๊น?
- AspectJ๋ ํ๋ก์์ฒ๋ผ ๊ฐ์ ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋๋ผ, ํ๊น ์ค๋ธ์ ํธ๋ฅผ ๋ฏ์ด๊ณ ์ณ์ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ง์ ๋ฃ์ด์ฃผ๋ ์ง์ ์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.(์ปดํ์ผ ์๋น)
- ์ปดํ์ผ๋ ํ๊น์ ํด๋์ค ํ์ผ ์์ฒด๋ฅผ JVM์ ๋ก๋ฉ๋๋ ์์ ์ ๊ฐ๋ก์ฑ์ ๋ฐ์ดํธ์ฝ๋๋ก ์กฐ์ํ๋ ๋ณต์กํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
- ์ฆ, ํธ๋์ญ์ ์ฝ๋๊ฐ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํจ๊ป ์์์ ๋์ฒ๋ผ ๋ง๋ค์ด๋ฒ๋ฆฐ๋ค. ์ ํ๋ก์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๊น?
- ๋ฐ์ดํธ์ฝ๋๋ฅผ ์กฐ์ํด ํ๊น ์ค๋ธ์ ํธ๋ฅผ ์ง์ ์์ ํด๋ฒ๋ฆฌ๋ฉด DI ์ปจํ ์ด๋์ ๋์์ ๋ฐ์ ํ๋ก์๋ฅผ ์์ฑํ์ง ์๊ณ AOP๋ฅผ ์ ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ๋ก์ ๋ฐฉ์๋ณด๋ค ํจ์ฌ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ AOP๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ด ๋ฉ์๋๋ก ์ ํ๋์ง๋ง ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ง์ ์กฐ์ํ๋ฉด ์ค๋ธ์ ํธ์ ์์ฑ, ํ๋ ๊ฐ์ ์กฐํ์ ์กฐ์, ์คํํฑ ์ด๊ธฐํ ๋ฑ์ ๋ค์ํ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ค.
- ํ๊น ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋๋ ์๊ฐ์๋ ์์ ์ด ๊ฐ๋ฅํ๋ค.
- AspectJ๊ฐ์ ๊ณ ๊ธ ๊ธฐ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ณ๋์ ๋ฐ์ดํธ์ฝ๋ ์ปดํ์ผ๋ฌ, ํด๋์ค ๋ก๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ํ์ํ๋ค.
- ๋ฐ๋ผ์ ๋๋ถ๋ถ์ ํ๋ก์ ๋ฐฉ์์ ์คํ๋ง AOP๋ก๋ ์ถฉ๋ถํ๋ค.
์ถ์ฒ: https://haviyj.tistory.com/33 [What do you want?]
์คํ๋ง ๋น์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค ๋ฐฉ์์ผ๋ก ์์ฑ๋๋๋ฐ ๊ตณ์ด ๋ด๋ถ์ ์ํ๋ฅผ ๋๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊น?
- Spring์์ POJO(plain, old java object)๋ฅผ โBeansโ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- Beans๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ์ ์ด๋ฃจ๋ ๊ฐ์ฒด์ด๋ฉฐ, Spring IoC(Inversion of Control) ์ปจํ ์ด๋์ ์ํด ์ธ์คํด์คํ, ๊ด๋ฆฌ, ์์ฑ๋๋ค.
- Beans๋ ์ฐ๋ฆฌ๊ฐ ์ปจํ ์ด๋์ ๊ณต๊ธํ๋ ์ค์ ๋ฉํ ๋ฐ์ดํฐ(XML, class ์ค์ ํ์ผ)์ ์ํด ์์ฑ๋๋ค.
- ์ปจํ ์ด๋๋ ์ด ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ํตํด Bean์ ์์ฑ, Bean Life Cycle, Bean Dependency(์ข ์์ฑ) ๋ฑ์ ์ ์ ์๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฒด๊ฐ ์ง์ ๋๋ฉด, ํด๋น ๊ฐ์ฒด๋ getBean() ๋ฉ์๋๋ฅผ ํตํด ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ์ผ๋ฐ์ ์ผ๋ก XML, class ํ์ผ์ ์ ์ํ๋ค. ์ฃผ์ ์์ฑ
- class(ํ์): ์ ๊ทํ๋ ์๋ฐ ํด๋์ค ์ด๋ฆ
- id: bean์ ๊ณ ์ ์๋ณ์
- scope: ๊ฐ์ฒด์ ๋ฒ์ (sigleton, prototype)
- constructor-arg: ์์ฑ ์ ์์ฑ์์ ์ ๋ฌํ ์ธ์
- property: ์์ฑ ์ bean setter์ ์ ๋ฌํ ์ธ์
- init method์ destroy method
- ์คํ๋ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ bean์ singleton์ผ๋ก ์์ฑํ์ฌ ๊ด๋ฆฌํ๋ค.
- ๊ตฌ์ฒด์ ์ผ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ์ JVM ์์์ ์คํ๋ง์ด bean๋ง๋ค ํ๋์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์คํ๋ง์ ํตํด์ bean์ ์ ๊ณต๋ฐ์ผ๋ฉด ์ธ์ ๋ ์ฃผ์ ๋ฐ์ bean์ ๋์ผํ ๊ฐ์ฒด๋ผ๋ ๊ฐ์ ํ์์ ๊ฐ๋ฐ์ ํ๋ค.
- request, session, global session์ Scope๋ ์ผ๋ฐ Spring ์ดํ๋ฆฌ์ผ์ด์
์ด ์๋, Spring MVC Web Application์์๋ง ์ฌ์ฉ๋๋ค.
์ฐธ๊ณ
- โsingletonโ bean์ Spring ์ปจํ ์ด๋์์ ํ ๋ฒ ์์ฑ๋๋ค.
- ์ปจํ ์ด๋๊ฐ ์ฌ๋ผ์ง ๋ bean๋ ์ ๊ฑฐ๋๋ค.
- ์์ฑ๋ ํ๋์ ์ธ์คํด์ค๋
single beans cache
์ ์ ์ฅ๋๊ณ , ํด๋น bean์ ๋ํ ์์ฒญ๊ณผ ์ฐธ์กฐ๊ฐ ์์ผ๋ฉด ์บ์๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. - ์ฆ, ํ๋๋ง ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋์ผํ ๊ฒ์ ์ฐธ์กฐํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ bean์ scope์ด ๋ช
์์ ์ผ๋ก ์ง์ ๋์ง ์์ผ๋ฉด
singleton
์ด๋ค.
- โprototypeโ bean์ ๋ชจ๋ ์์ฒญ์์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ฆ, prototype bean์ ์์กด์ฑ ๊ด๊ณ์ bean์ ์ฃผ์ ๋ ๋ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด ์ฃผ์ ๋๋ค.
- ์ ์์ ์ธ ๋ฐฉ์์ผ๋ก gc์ ์ํด bean์ด ์ ๊ฑฐ๋๋ค.
- ์ํ๊ฐ ์๋ ๊ณต์ ๊ฐ์ฒด: ์ํ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ ๊ฐ์ฒด๋ ๋๊ธฐํ ๋น์ฉ์ด ์๋ค. ๋ฐ๋ผ์ ๋งค๋ฒ ์ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ณณ์์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ด์ ๊ฐ ์๋ค. ์ฝ๊ธฐ์ฉ์ผ๋ก๋ง ์ํ๋ฅผ ๊ฐ์ง ๊ณต์ ๊ฐ์ฒด: 1๋ฒ๊ณผ ์ ์ฌํ๊ฒ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ ์ฝ๊ธฐ ์ ์ฉ์ด๋ฏ๋ก ์ฌ์ ํ ๋๊ธฐํ ๋น์ฉ์ด ๋ค์ง ์๋๋ค. ๋งค ์์ฒญ๋ง๋ค ์๋ก์ด ๊ฐ์ฒด ์์ฑํ ํ์๊ฐ ์๋ค.
- ๊ณต์ ๊ฐ ํ์ํ ์ํ๋ฅผ ์ง๋ ๊ณต์ ๊ฐ์ฒด: ๊ฐ์ฒด ๊ฐ์ ๋ฐ๋์ ๊ณต์ ํด์ผ ํ ์ํ๋ฅผ ์ง๋ ๊ฐ์ฒด๊ฐ ํ๋ ์๋ค๋ฉด, ์ด ๊ฒฝ์ฐ์๋ ํด๋น ์ํ์ ์ฐ๊ธฐ๋ฅผ ๊ฐ๋ฅํ ๋๊ธฐํ ํ ๊ฒฝ์ฐ ์ฑ๊ธํค๋ ์ ํฉํ๋ค.
- ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ ์ํ๋ฅผ ์ง๋๋ฉด์๋ ์ฌ์ฉ๋น๋๊ฐ ๋งค์ฐ ๋์ ๊ฐ์ฒด: ์ ํ๋ฆฌ์ผ์ด์ ์์์ ์ ๋ง๋ก ์ฌ์ฉ๋น๋๊ฐ ๋๋ค๋ฉด, ์ฐ๊ธฐ ์ ๊ทผ์ ๋ํ ๋๊ธฐํ ๋น์ฉ์ ๊ฐ์ํ๊ณ ์๋ผ๋ ์ฑ๊ธํค์ ๊ณ ๋ คํ ๋งํ๋ค. ์ด ๋ฐฉ๋ฒ์ 1. ์ฅ์๊ฐ์ ๊ฑธ์ณ ๋งค์ฐ ๋ง์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋, 2. ํด๋น ๊ฐ์ฒด๊ฐ ๋งค์ฐ ์์ ์์ ์ฐ๊ธฐ์ํ๋ฅผ ๊ฐ์ง๊ณ ์์ ๋, 3. ๊ฐ์ฒด ์์ฑ๋น์ฉ์ด ๋งค์ฐ ํด ๋์ ์ ์ฉํ ์ ํ์ด ๋ ์ ์๋ค.
- ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ ์ํ๋ฅผ ์ง๋ ๊ฐ์ฒด: ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ ์ํ๊ฐ ๋ง์์ ๋๊ธฐํ ๋น์ฉ์ด ๊ฐ์ฒด ์์ฑ ๋น์ฉ๋ณด๋ค ํฌ๋ค๋ฉด ์ฑ๊ธํค์ผ๋ก ์ ํฉํ์ง ์๋ค.
- ์ํ๊ฐ ๋ ธ์ถ๋์ง ์์ ๊ฐ์ฒด: ์ผ๋ถ ์ ํ์ ์ธ ๊ฒฝ์ฐ, ๋ด๋ถ ์ํ๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ์ง ์๋ ๋น์ ์ฐธ์กฐํ์ฌ ๋ค๋ฅธ ์์กด๊ฐ์ฒด์๋ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ์ ์ํํ๋ ์์กด ๊ฐ์ฒด๊ฐ ์๋ค๋ฉด ์ฑ๊ธํค๋ณด๋ค ๋น์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ์ ์๋ค.