1) ์ ๋ค๋ฆญ & ํ์ ํ๋ผ๋ฏธํฐ
- ์ด๋ฒ์๋ ์ ๋ค๋ฆญ์ ๋ํ ๋ช ํํ ์ ์์ ํ์ ํ๋ผ๋ฏธํฐ์ ๋ํด ์์๋ณด๋๋ก ํ์!
(1) ์ ๋ค๋ฆญ (Generics)
class Box<T> {
public T content;
...
public static void main(String[] args) {
Box<String> strBox = new Box<String>();
Box<Integer> intBox = new Box<Integer>();
}
}
- ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด Box ํด๋์ค๊ฐ ์๊ณ ๋ค์ํ ํ์ ์ ๊ฐ์ฒด๋ฅผ ์ง์ํ๊ธฐ ์ํด Box ํด๋์ค ๋ฉค๋ฒ ๋ณ์์ธ content์ ํ์ ์ ํน์ ํ์ ์ผ๋ก ์ง์ ํ์ง ์๊ณ ํ์ ํ๋ผ๋ฏธํฐ์ธ T๋ก ์ค์ ํ์๋ค.
- ๊ทธ๋ฆฌ๊ณ main() ๋ฉ์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด String ๊ฐ์ฒด์ Intenger ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ๊ฐ์ Box ๊ฐ์ฒด๋ฅผ “ํ์ ”์ ์ง์ ํ์ฌ ์์ฑํ์๋ค.
- ๋ฐ๋ผ์, strBox ๊ฐ์ฒด๋ ํ์ ํ๋ผ๋ฏธํฐ T ๋์ ์ String ํ์ ์ผ๋ก intBox ๊ฐ์ฒด๋ ํ์ ํ๋ผ๋ฏธํฐ T ๋์ ์ Integer ํ์ ์ผ๋ก ๋์ฒด๋์๋ค.
- ์ฆ, ์ ๋ค๋ฆญ์ ๊ฒฐ์ ๋์ง ์์ ํ์ ์ ํ๋ผ๋ฏธํฐ๋ก ์ฒ๋ฆฌํ๊ณ ์ค์ ์ฌ์ฉํ ๋, ํ๋ผ๋ฏธํฐ๋ฅผ ๊ตฌ์ฒด์ ์ธ ํ์ ์ผ๋ก ๋์ฒดํ๋ ๊ฒ์ ์๋ฏธํ๋ค!
- ํ๋ง๋๋ก ํ์ ์ ๋ฏธ๋ฆฌ ์ง์ ํด์ฃผ๋ ๊ฒ์ด ์๋ ํ์์ ์ํด ์ง์ ํ ์ ์๋๋ก ํ๋ ์ผ๋ฐ (Generic) ํ์ ์ธ ๊ฒ์ด๋ค.
- ๊ทธ ๋ค์์ผ๋ก ํ์ ํ๋ผ๋ฏธํฐ์ ๋ํด ์์ธํ ์์๋ณด์!
(2) ํ์ ํ๋ผ๋ฏธํฐ (Type Parameter)
class Box<T> {
public T content;
...
}
- Box ํด๋์ค ์์ ๊บฝ์ <>๋ T๊ฐ ํ์ ํ๋ผ๋ฏธํฐ์์ ๋ปํ๋ ๊ธฐํธ๋ก, ํ์ ์ด ํ์ํ ์๋ฆฌ์ T๋ฅผ ์ฌ์ฉํ ์ ์์์ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
- ์ฌ๊ธฐ์์ Box ํด๋์ค๋ T๋ฅผ content ํ๋์ ํ์ ์ผ๋ก ์ฌ์ฉํ์๊ณ Box ํด๋์ค๋ T๊ฐ ๋ฌด์จ ํ์ ์ธ์ง๋ ๋ชจ๋ฅด์ง๋ง Box ๊ฐ์ฒด๊ฐ ์์ฑ๋ ์์ ์ ๋ค๋ฅธ ํ์ ์ผ๋ก ๋์ฒด๋๋ค๋ ๊ฒ์ ์๊ณ ์๋ค.
class Box<T, K, V, Hanguk> {
public T content;
...
}
- ๊ทธ๋ฆฌ๊ณ ํ์ ํ๋ผ๋ฏธํฐ๋ ํ ๊ฐ ๋ง์ด ์๋๋ผ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ๋ํ ํ์ ํ๋ผ๋ฏธํฐ๋ก ์ฐ์ด๋ T๋ ๋จ์ง ์ด๋ฆ์ผ ๋ฟ์ด๊ธฐ ๋๋ฌธ์ T ๋์ A๋ถํฐ Z๊น์ง ์ด๋ค ์ํ๋ฒณ์ ์ฌ์ฉํด๋ ์ข๊ณ Hanguk๊ณผ ๊ฐ์ด ๋จ์ด๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
- ๋ค๋ง, ์ฃผ์ํ ์ ์ ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋์ฒดํ๋ ํ์ ์ ๊ธฐ๋ณธ ํ์ (Primitive type)์ด ์๋๋ผ ์ฐธ์กฐ ํ์ (Reference Type)๋ง ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
- ์์ ์ ๋ค๋ฆญ ์ค๋ช ๋ถ๋ถ์์ Box ๋์ ์ Box๋ฅผ ์ฌ์ฉํ ๊ฒ๋ ๊ธฐ๋ณธ ํ์ ์ ํ์ ํ๋ผ๋ฏธํฐ์ ๋์ฒด ํ์ ์ด ๋ ์ ์์๊ธฐ ๋๋ฌธ์ด๋ค.
public static void main(String[] args) {
Box<String> strBox = new Box<String>();
Box<Integer> intBox = new Box<>();
}
- ๋ํ, Box ๊ฐ์ฒด ๋ณ์๋ฅผ ์ ์ธํ ๋ <> ์์ ํ์ ์ ์ง์ ํ ๋ค์ ์์ฑ์ ํธ์ถ ์์๋ ํ์ ์ ๋ช ์ํ์ง ์๊ณ <>๋ง ๋ถ์ผ ์ ์๋ค.
[์ฐธ๊ณ ] ์ ๋ค๋ฆญ ์ ๊ฑฐ ์๊ธฐ
- Java ์ฝ๋์์ ์ ์ธ๋๊ณ ์ฌ์ฉ๋ ์ ๋ค๋ฆญ ํ์ ์ ์ปดํ์ผ ์, ์ปดํ์ผ๋ฌ์ ์ํด ์๋์ผ๋ก ๊ฒ์ฌ๋์ด ํ์ ์ด ๋ณํ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ฝ๋ ๋ด์ ๋ชจ๋ ์ ๋ค๋ฆญ ํ์ ์ ์ ๊ฑฐ๋์ด ์ปดํ์ผ๋ class ํ์ผ์๋ ์ด๋ ํ ์ ๋ค๋ฆญ ํ์ ๋ ํฌํจ๋์ง ์๊ฒ ๋๋ค.
- ์ด๋ฐ ์์ผ๋ก ๋์ํ๋ ์ด์ ๋ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋์์ ํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํจ์ด๋ค.
[Reference]
๋ฐ์ํ
'๐ง Programming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ๋ค๋ฆญ (4) - ์ ํ๋ ํ์ ํ๋ผ๋ฏธํฐ (0) | 2023.07.23 |
---|---|
์ ๋ค๋ฆญ (3) - ์ ๋ค๋ฆญ ํด๋์ค์ ์ ๋ค๋ฆญ ๋ฉ์๋ (0) | 2023.07.22 |
์ ๋ค๋ฆญ (1) - ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ ์ด์ (1) | 2023.07.22 |
์ด๋ ธํ ์ด์ (Annotation) (0) | 2023.07.22 |
๋ฆฌํ๋ ์ (Reflection) (0) | 2023.07.22 |