Java ์ ๋ค๋ฆญ(Generic) ์์ ์ ๋ณต (์ ์ ~ ์ปฌ๋ ์ ๊น์ง, ์ฝ๋ ํ ์ค์ฉ ์ค๋ช )
1. ์ ๋ค๋ฆญ(Generic)์ด๋?
์๋ฐ์์ ๋ณ์/๋งค๊ฐ๋ณ์/๋ฐํ๊ฐ์ ๋ชจ๋ ์๋ฃํ(Type) ์ ๊ฐ์ง๋๋ค.
๊ทธ๋ฐ๋ฐ ์ค์ ๊ฐ๋ฐ์์๋ ์๋์ฒ๋ผ “๋์์ ๋๊ฐ์๋ฐ ๋ค๋ฃจ๋ ํ์ ๋ง ๋ค๋ฅธ” ์ํฉ์ด ์ ๋ง ๋ง์ต๋๋ค.
- ํ๋ฆฐํฐ์ ์ฌ๋ฃ๋ฅผ ๋ฃ๊ณ ๊บผ๋ด๊ธฐ (Powder / Plastic)
- ๋ฆฌ์คํธ์ ์์๋ฅผ ์ ์ฅํ๊ณ ๊บผ๋ด๊ธฐ (String / Integer)
- ์ด๋ค ๊ฐ์ฒด๋ฅผ ๋ด๋ ๋ฐ์ค(Box) ๋ง๋ค๊ธฐ
์ด๋ ํ์ ๋ง๋ค ํด๋์ค๋ฅผ ๋งค๋ฒ ์๋ก ๋ง๋ค๋ฉด ์ฝ๋๊ฐ ์ค๋ณต๋๊ณ , Object๋ก ํตํฉํ๋ฉด ๊บผ๋ผ ๋๋ง๋ค ํ๋ณํ(์บ์คํ )์ด ํ์ํ๊ณ ๋ฐํ์ ์ค๋ฅ ์ํ์ด ์ปค์ง๋๋ค.
โ ๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด ์ ๋ค๋ฆญ(Generic) ์ ๋๋ค.
์ ๋ค๋ฆญ(Generic) ์ด๋
“ํด๋์ค/๋ฉ์๋์์ ์ฌ์ฉํ ์๋ฃํ์ ๋์ค์(์ฌ์ฉ ์์ ์) ๊ฒฐ์ ํ๋๋ก ํ๋ ๋ฐฉ์”์ ๋๋ค.
์ฆ, ํ์ ์ ๋ง์น ํ๋ผ๋ฏธํฐ์ฒ๋ผ ๋ฐ์์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
2. ์ ๋ค๋ฆญ์ ์ฅ์
(1) ์ปดํ์ผ ์ ๊ฐํ ํ์ ์ฒดํฌ (Type Safety)
์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด “์๋ชป๋ ํ์ ”์ ์คํ ์ ์(์ปดํ์ผ ๋จ๊ณ์์) ์ก์์ค๋๋ค.
- ์ ๋ค๋ฆญ ์์ → ์คํํ๋ค๊ฐ ClassCastException ๊ฐ์ ๋ฐํ์ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ
- ์ ๋ค๋ฆญ ์์ → ์ ์ด์ ์ปดํ์ผ์ด ์ ๋๊ฒ ๋ง์์ค
(2) ํ๋ณํ(์บ์คํ ) ์ ๊ฑฐ
์ ๋ค๋ฆญ์ด ์์ผ๋ฉด Object๋ก ๊บผ๋ด์ค๊ฒ ๋์ด ์บ์คํ
์ด ํ์ํฉ๋๋ค.
์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด “๊บผ๋ผ ๋ ์ด๋ฏธ ํ์
์ด ํ์ ”์ด๋ฏ๋ก ์บ์คํ
์ด ํ์ ์์ต๋๋ค.
3. ์ ๋ค๋ฆญ ๋์ ์ : Raw Type(List) ์ฌ์ฉ ์ ๋ฌธ์ ์ (ํ๋ณํ + ๋ฐํ์ ์ค๋ฅ)
์๋ ์ฝ๋๋ ์ ๋ค๋ฆญ์ ์ฐ์ง ์์ List(= raw type) ์์์ ๋๋ค.

โ ํ ์ค์ฉ ์ค๋ช
- List list = new ArrayList();
- List<T>์ฒ๋ผ ํ์ ํ๋ผ๋ฏธํฐ๊ฐ ์์ผ๋ฏ๋ก ์ด๋ค ํ์ ์ด๋ ์ ์ฅ ๊ฐ๋ฅํ ์ํ๊ฐ ๋ฉ๋๋ค.
- ์ด๊ฑธ raw type(๋ก ํ์ ) ์ด๋ผ๊ณ ํฉ๋๋ค.
- list.add(10);
- 10์ int(๊ธฐ๋ณธํ)์ธ๋ฐ, List๋ ๊ฐ์ฒด๋ง ์ ์ฅ ๊ฐ๋ฅ
- ์๋ฐ๊ฐ ์๋์ผ๋ก Integer(10)์ผ๋ก ๋ฐ๊พธ์ด ์ ์ฅํฉ๋๋ค (์คํ ๋ฐ์ฑ)
- list.add("์ด์ฝ");
- String๋ ๋ฌธ์ ์์ด ๋ค์ด๊ฐ๋๋ค.
- ์ฆ, ์ง๊ธ list์๋ ์๋ก ๋ค๋ฅธ ํ์ ์ด ์์ฌ ์๋ ์ํ์ ๋๋ค.
- int num = (Integer) list.get(0);
- raw type์ get()์ ์ฌ์ค์ Object๋ฅผ ๋ฐํํ๋ค๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค.
- ๊ทธ๋์ ๊ฐ๋ฐ์๊ฐ ์ง์ (Integer)๋ก ์บ์คํ ํด์ค์ผ ํฉ๋๋ค.
- int snacks = (Integer) list.get(1);
- list.get(1)์ "์ด์ฝ"(String)์ธ๋ฐ Integer๋ก ์บ์คํ ํ๋ ค๊ณ ํจ
- ์ปดํ์ผ์ ๋์ง๋ง ์คํํ๋ฉด ์๋ ์ค๋ฅ ๋ฐ์:
- โ ClassCastException
๊ฒฐ๋ก : ์ ๋ค๋ฆญ์ด ์์ผ๋ฉด “์์ฌ ๋ค์ด๊ฐ๋ ๊ฒ”์ ์ปดํ์ผ๋ฌ๊ฐ ๋ง์ง ๋ชปํ๊ณ ,
“๊บผ๋ผ ๋ ์ค์ํ๋ฉด ๋ฐํ์์ ํญ๋ฐ”ํฉ๋๋ค.
4. ํ์ ๋ณ ํด๋์ค๋ฅผ ๋ง๋ค๋ฉด? (์ค๋ณต ์ฝ๋ ํญ์ฆ)
3D ํ๋ฆฐํฐ ์์๋ก ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๋ฃ ํ์ ๋ง ๋ค๋ฅผ ๋ฟ ๋ก์ง์ ๋์ผํฉ๋๋ค.
Powder ์ ์ฉ ํ๋ฆฐํฐ

Plastic ์ ์ฉ ํ๋ฆฐํฐ

โ ๋ฌธ์ ์
- ์ฌ๋ฃ ํ์ ๋ง ๋ค๋ฅด์ง ์ฝ๋๋ ๊ฑฐ์ ๋ณต๋ถ
- ์ฌ๋ฃ๊ฐ ๋์ด๋ ์๋ก ํด๋์ค๊ฐ ๊ณ์ ์ฆ๊ฐ
5. Object๋ก ํตํฉํ๋ฉด? (ํด๋์ค๋ 1๊ฐ์ง๋ง ๋งค๋ฒ ์บ์คํ )
์ค๋ณต์ ์ค์ด๊ธฐ ์ํด Object๋ก ํตํฉํ ์๋ ์์ต๋๋ค.

ํ ์คํธ ์ฝ๋

โ ํ ์ค์ฉ ์ค๋ช
- private Object material;
- ์ด๋ค ์ฌ๋ฃ๋ ์ ์ฅ ๊ฐ๋ฅํด์ง
- printer.setMaterial(p1);
- Powder๋ Object์ ์์์ด๋ฏ๋ก ์ ์บ์คํ ์ ์๋ (์์ )
- Powder p2 = (Powder) printer.getMaterial();
- getMaterial()์ Object๋ฅผ ์ฃผ๊ธฐ ๋๋ฌธ์
- ๋ค์ ์๋ ํ์ ์ผ๋ก ๋ค์ด์บ์คํ ์ ํด์ผ ํจ (์ํ)
- ์๋ชป ์บ์คํ ํ๋ฉด ๋ฐํ์ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ
โ ๊ฒฐ๋ก
- Object๋ “์ ์ฐํ์ง๋ง ์ํํ๊ณ ๋ถํธ”ํฉ๋๋ค.
6. ์ ๋ค๋ฆญ์ผ๋ก ํด๊ฒฐ: GenericPrinter<T>
์ด ๋ฌธ์ ๋ฅผ ๊น๋ํ๊ฒ ํด๊ฒฐํ๋ ๋ฐฉ์์ด ์ ๋ค๋ฆญ์ ๋๋ค.

โ ํ ์ค์ฉ ์ค๋ช
- public class GenericPrinter<T>
- T๋ “๋์ค์ ์ ํด์ง ํ์ ์๋ฆฌ”์ ๋๋ค.
- ํด๋์ค ์ฌ์ฉ ์์ ์ T๊ฐ ์ค์ ํ์ ์ผ๋ก ์นํ๋ฉ๋๋ค.
- private T material;
- material์ ํ์ ์ด Powder์ผ ์๋, Plastic์ผ ์๋ ์์ (์์ง ๋ฏธ์ )
- setMaterial(T material)
- “T ํ์ ๋ง” ๋ฐ์์ ์ ์ฅ
- T getMaterial()
- ์ ์ฅ๋ ๊ฐ์ “T ํ์ ๊ทธ๋๋ก” ๋ฐํ
- ์ฆ, Object๊ฐ ์๋๋ฏ๋ก ์บ์คํ ์ด ํ์ ์์
- toString()
- ์ด๋ค ๊ฐ์ฒด๋ toString()์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ง๋ฏ๋ก ์ถ๋ ฅ ๊ฐ๋ฅ
7. ์ ๋ค๋ฆญ ํ ์คํธ: ์บ์คํ ์์ด ์์ ํ๊ฒ ์ฌ์ฉ
์ฌ๋ฃ ํด๋์ค:

ํ ์คํธ ์ฝ๋:

โ ํ ์ค์ฉ ์ค๋ช
- GenericPrinter<Powder> powderPrinter = new GenericPrinter<>();
- ์ฌ๊ธฐ์ T๋ Powder๋ก ๊ฒฐ์ ๋ฉ๋๋ค.
- powderPrinter.setMaterial(new Powder());
- T=Powder์ด๋ฏ๋ก Powder๋ง ์ ์ฅ ๊ฐ๋ฅ
- Powder powder = powderPrinter.getMaterial();
- ๋ฐํ ํ์ ์ด T=Powder์ด๋ฏ๋ก ํ๋ณํ์ด ํ์ ์์
- ๋ง์ฝ ์๋์ฒ๋ผ ์๋ชป ๋ฃ์ผ๋ ค ํ๋ฉด?
โ
์ปดํ์ผ ์๋ฌ ๋ฐ์
→ ์คํ ์ ์ ์ค์๋ฅผ ๋ง์์ค(ํ์
์์ )
8. ์ ๋ค๋ฆญ๊ณผ static: ์ static์๋ T๋ฅผ ๋ชป ์ธ๊น?
์ ๋ค๋ฆญ ํ์ T๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋ ๊ฒฐ์ ๋ฉ๋๋ค.
- GenericPrinter<Powder> → T๊ฐ Powder๋ก ์ ํด์ง
- GenericPrinter<Plastic> → T๊ฐ Plastic์ผ๋ก ์ ํด์ง
ํ์ง๋ง static ๋ฉค๋ฒ๋ ๊ฐ์ฒด ์์ฑ ์ ์ ํด๋์ค ๋ก๋ฉ ์์ ์ ๋จผ์ ๋ง๋ค์ด์ง๋๋ค.
์ฆ, static์ด ๋ง๋ค์ด์ง ์์ ์๋ T๊ฐ ๋ญ์ง ์์ง ๊ฒฐ์ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
9. ์ปฌ๋ ์ ํ๋ ์์ํฌ์์์ ์ ๋ค๋ฆญ (ArrayList<E>)
ArrayList๋ ๋ด๋ถ์ ์ผ๋ก ์ด๋ฐ ํํ๋ก ์ ์ธ๋์ด ์์ต๋๋ค(๊ฐ๋ ):
- E๋ ๊ด์ฉ์ ์ผ๋ก Element(์์) ๋ฅผ ์๋ฏธํฉ๋๋ค.
์์:

โ ํ ์ค์ฉ ์ค๋ช
- ArrayList<String> list = new ArrayList<>();
- ์ด ๋ฆฌ์คํธ๋ String๋ง ์ ์ฅํ๋๋ก ๊ณ ์
- list.add("hello");
- String OK
- String s = list.get(0);
- get()์ ๋ฐํ ํ์ ์ด E์ธ๋ฐ ์ฌ๊ธฐ์ E=String
- ๊ทธ๋์ ๋ฐํ์ด String์ผ๋ก ํ์ → ์บ์คํ ๋ถํ์
๋ง๋ฌด๋ฆฌ ์์ฝ
- ์ ๋ค๋ฆญ์ ํ์ ์ ๋์ค์ ๊ฒฐ์ ํด์ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ
- ์ปดํ์ผ ๋จ๊ณ์์ ํ์ ์ค๋ฅ๋ฅผ ์ก์์ฃผ๋ ํ์ ์์ ์ฑ์ ์ ๊ณตํ๋ฉฐ
- Object ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ณํ ์ง์ฅ/๋ฐํ์ ์ค๋ฅ ์ํ์ ์ ๊ฑฐํฉ๋๋ค.
“Object๊ฐ ์๋๋ฏ๋ก ์บ์คํ ์ด ํ์ ์์” = ๋ฐํ๊ฐ์ ํ์ ์ด ์ด๋ฏธ ํ์ ์ด๋ผ์ ‘ํ์ธ ์์ (์บ์คํ )’์ ์ ํด๋ ๋๋ค๋ ๋ง์ด์ผ.
1) ์บ์คํ (casting)์ด ๋ญ์ผ? (ํ ๋ฌธ์ฅ)
์บ์คํ = “์ด ๊ฐ์ ์ง๊ธ Object๋ก ๋ณด์ด์ง๋ง, ์ฌ์ค์ โโํ์ ์ด์ผ”๋ผ๊ณ ๊ฐ์ ๋ก ํ์ ์ ๋ฐ๊ฟ์ ์ฐ๋ ๊ฒ

2) ์ Object๋ฉด ์บ์คํ ์ด ํ์ํด?
โ Object๋ “์ ์ฒด๊ฐ ์ ๋ณด์ด๋ ๊ฐ”์ด์ผ
Object ํ์ ๋ณ์์๋ ์๋ฌด ๊ฐ์ฒด๋ ๋ค์ด๊ฐ ์ ์์ด.

๊ทธ๋์ Object๋ก ๋ฐ์ผ๋ฉด ์ปดํ์ผ๋ฌ ์ ์ฅ์์ ์ด๋ ๊ฒ ์๊ฐํด:
“์ด ๊ฐ์ด String์ธ์ง Integer์ธ์ง Powder์ธ์ง ๋ ๋ชฐ๋ผ.
๊ทธ๋ฅ Object์ผ ๋ฟ์ด์ผ.”
๊ทผ๋ฐ ๋๋ “์ด๊ฑธ String์ผ๋ก ์ฐ๊ณ ์ถ์ด!” ๋ผ๊ณ ํ๋ฉด
์ปดํ์ผ๋ฌ๊ฐ ๋งํด:
“๋ ๋ชฐ๋ผ. ๋ค๊ฐ ์ง์ ์ฆ๋ช ํด(์บ์คํ ํด).”
๊ทธ๋์ ์บ์คํ ์ ํด์ผ ํด:

3) ๊ทธ๋ผ “Object๊ฐ ์๋๋ฉด” ์ ์บ์คํ ์ด ํ์ ์์ง?
โ ๋ฐํ๊ฐ์ด ์ด๋ฏธ “์ ์ฒด๊ฐ ํ์คํ ํ์ ”์ด๋ฉด ์บ์คํ ์ด ํ์ ์์ด
์๋ฅผ ๋ค์ด ๋ฐํ ํ์ ์ด Powder๋ฉด:

์ฌ๊ธฐ์๋ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ฏธ ์์:
“์ ๋ฐํ๊ฐ์ด Powder๊ตฌ๋. ๊ทธ๋ผ Powder ๋ณ์์ ๋ฃ์ด๋ ์์ ํ๋ค.”
๊ทธ๋์ (Powder) ๊ฐ์ ์บ์คํ ์ด ํ์๊ฐ ์์ด.
4) ํต์ฌ ๋น๊ต: Object ํ๋ฆฐํฐ vs ์ ๋ค๋ฆญ ํ๋ฆฐํฐ
โ (A) Object๋ก ๋ฐํํ๋ ํ๋ฆฐํฐ โ (B) ์ ๋ค๋ฆญ์ผ๋ก ๋ฐํํ๋ ํ๋ฆฐํฐ (T)


์ ํ์ํ๋๋ฉด getMaterial()์ด Object๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ด์ผ.
์ฆ, “์ ์ฒด๋ฅผ ๋ชจ๋ฅด๋๊น” ๋ค๊ฐ ์ง์ Powder๋ผ๊ณ ์ฆ๋ช
ํด์ผ ํจ.
์ ์บ์คํ
์ด ์๋๋ฉด,
์ฌ๊ธฐ์ T๋ ์ด๋ฏธ Powder๋ก ์ ํด์ก๊ธฐ ๋๋ฌธ์ด์ผ.
์ฆ ์ปดํ์ผ๋ฌ ์ ์ฅ์์๋:
- printer๋ GenericPrinter<Powder>
- ๊ทธ๋ฌ๋ฉด getMaterial()์ Powder๋ฅผ ๋ฐํ
- ๊ทธ๋์ Powder p = ...๊ฐ ์๋์ผ๋ก ์์ ํจ
5) ์ฌ์ด ๋น์ ํ๋๋ก ๋๋ด๊ธฐ
- Object ๋ฐํ = ๊ฒ์ ๋ดํฌ๋ก ๋ฐ๊ธฐ
- “์์ ๋ญ ๋ค์๋์ง ๋ชฐ๋ผ”
- ๊บผ๋ผ ๋ “์ด๊ฑฐ ์ฌ๊ณผ ๋ง์ง?” ํ๊ณ ํ์ธ(์บ์คํ ) ํด์ผ ํจ
- Powder/T=Powder ๋ฐํ = ๋ผ๋ฒจ ๋ถ์ ํฌ๋ช
๋ฐ์ค๋ก ๋ฐ๊ธฐ
- “Powder ์ ์ฉ”์ด๋ผ๊ณ ์จ์์
- ๊ทธ๋ฅ ๊บผ๋ด๋ฉด Powder์ → ํ์ธ(์บ์คํ ) ํ์ ์์
6) ํ ์ค๋ก ์ ํํ๊ฒ ๋ค์ ๋งํ๋ฉด
โ “Object๊ฐ ์๋๋ฏ๋ก ์บ์คํ ์ด ํ์ ์์”์ด๋ ๋ป์:
๋ฐํ๊ฐ์ด Object์ฒ๋ผ “์ ์ฒด ๋ถ๋ช ”์ด ์๋๋ผ
Powder(ํน์ T=Powder)์ฒ๋ผ ํ์ ์ด ์ด๋ฏธ ํ์ ๋ ํํ๋ก ๋ฐํ๋๊ธฐ ๋๋ฌธ์
๊ฐ๋ฐ์๊ฐ (Powder) ๊ฐ์ ์บ์คํ ์ ์ธ ํ์๊ฐ ์๋ค.
์ ๋ค๋ฆญ(Generic)์ ์ฐ๋ ์ด์
1) ํ์ ์ค์๋ฅผ “์ปดํ์ผ ๋จ๊ณ”์์ ๋ง๊ธฐ ์ํด (Type Safety)
์ ๋ค๋ฆญ์ด ์์ผ๋ฉด(= Object/raw type) ๋ค๋ฅธ ํ์ ์ด ์์ฌ ๋ค์ด๊ฐ๋ ์ปดํ์ผ์ ๋๊ณ , ์คํํ๋ค๊ฐ ํฐ์ง ์ ์์ด์.
- ์ ๋ค๋ฆญ ์์ → ๋ฐํ์์ ClassCastException ๊ฐ์ ์ค๋ฅ ๊ฐ๋ฅ
- ์ ๋ค๋ฆญ ์์ → ์ ์ด์ ์ปดํ์ผ ์๋ฌ๋ก ๋ง์์ค
โ ์ฆ, “์คํํด๋ณด๊ธฐ ์ ์” ํ์ ๋ฒ๊ทธ๋ฅผ ์๋ฐฉํฉ๋๋ค.
2) ํ๋ณํ(์บ์คํ )์ ์ ํ๋ ค๊ณ (ํธํ๊ณ ์์ )
Object๋ก ๋ฐ์ผ๋ฉด ๊บผ๋ผ ๋๋ง๋ค (Powder), (String)์ฒ๋ผ ์บ์คํ
์ ํด์ผ ํด์.
์ ๋ค๋ฆญ์ ์ฐ๋ฉด ๋ฐํ ํ์
์ด ์ด๋ฏธ ํ์ ์ด๋ผ ์บ์คํ
์ด ํ์ ์์ต๋๋ค.
- ์ ๋ค๋ฆญ ์์:
-
Object x = list.get(0); String s = (String) x;
- ์ ๋ค๋ฆญ ์์:
-
String s = list.get(0);
โ ์ฝ๋๊ฐ ์งง์์ง๊ณ , ์บ์คํ ์ค์๋ก ํฐ์ง ์ํ๋ ์ฌ๋ผ์ง๋๋ค.
3) ๊ฐ์ ๋ก์ง์ “ํ์ ๋ง ๋ฐ๊ฟ์” ์ฌ์ฌ์ฉํ๋ ค๊ณ (์ฌ์ฌ์ฉ์ฑ/์ ์ง๋ณด์)
ํ์
๋ง ๋ค๋ฅด๋ค๊ณ ํด๋์ค/๋ฉ์๋๋ฅผ ๊ณ์ ๋ณต๋ถํ๋ฉด ์ฝ๋๊ฐ ๋๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์.
์ ๋ค๋ฆญ์ “ํ์
์๋ฆฌ(T)”๋ง ๋ฐ๊ฟ์ ๊ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
์: ํ๋ฆฐํฐ ๋ก์ง์ ๋์ผ, ์ฌ๋ฃ๋ง ๋ค๋ฆ
- ๋ณต๋ถ ๋ฐฉ์: PowderPrinter, PlasticPrinter, … ๊ณ์ ๋์ด๋จ
- ์ ๋ค๋ฆญ ๋ฐฉ์: GenericPrinter<T> ํ๋๋ก ๋
โ ์ค๋ณต ์ ๊ฑฐ + ํ์ฅ ์ฌ์ + ์ ์ง๋ณด์ ์ฌ์.
'๐ฉโ๐ปDeveloper ๐ก > ๐พBack-end๐๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Java Stream(์คํธ๋ฆผ) ์์ ์ ๋ฆฌ (0) | 2026.02.12 |
|---|---|
| JAVA ์ค๋ ๋(Thread) ์์ ์ ๋ฆฌ (0) | 2026.02.12 |
| JAVA ์ปฌ๋ ์ ์๋ฃ๊ตฌ์กฐ (0) | 2026.02.11 |
| Java ์์ธ ์ฒ๋ฆฌ (0) | 2026.02.11 |
| Java 8. Interface (0) | 2026.02.10 |