1) ์ ํ๋ ํ์ ํ๋ผ๋ฏธํฐ (Bounded Type Parameter)
- ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋์ฒดํ๋ ๊ตฌ์ฒด์ ์ธ ํ์ ์ ์ ํํ ํ์๊ฐ ์๋ค.
- ์๋ฅผ ๋ค์ด, ์ซ์๋ฅผ ์ฐ์ฐํ๋ ์ ๋ค๋ฆญ ๋ฉ์๋๋ ๋์ฒด ํ์ ์ผ๋ก Number ๋๋ ์์ ํด๋์ค (Byte, Short, Integer, Long, Double)๋ก ์ ํํ ํ์๊ฐ ์๋ค.
- ์ด์ฒ๋ผ ๋ชจ๋ ํ์ ์ผ๋ก ๋์ฒดํ ์ ์๊ณ , ํน์ ํ์ ๊ณผ ์์ ๋๋ ๊ตฌํ ๊ด๊ณ์ ์๋ ํ์ ๋ง ๋์ฒดํ ์ ์๋ ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ํ๋ ํ์ ํ๋ผ๋ฏธํฐ (Bounded Type Parameter) ๋ผ๊ณ ํ๋ค.
public <T extends ์์ํ์
> ๋ฆฌํดํ์
๋ฉ์๋ (๋งค๊ฐ๋ณ์, ...) { }
- ์ ํ๋ ํ์ ํ๋ผ๋ฏธํฐ์ ์ ์๋ ์์ ๊ฐ์ด extends ํค์๋๋ฅผ ์ฌ์ฉํด์ ํ ์ ์์ผ๋ฉฐ, ์์ ํ์ ์ ํด๋์ค ๋ฟ๋ง ์๋๋ผ ์ธํฐํ์ด์ค๋ ๊ฐ๋ฅํ๊ณ ์ธํฐํ์ด์ค๋ผ๊ณ ํด์ implements ํค์๋๋ฅผ ์ฌ์ฉํ์ง๋ ์๋๋ค.
- ๋ํ, extends ํค์๋๋ ํน์ ํ์ ๊ณผ ์์ ๋๋ ๊ตฌํ ๊ด๊ณ์ ์๋ ํ์ ๋ง ๋์ฒดํ ์ ์๋ค๊ณ ํ์๋๋ฐ ๋ง์ฝ ํ์ ํ๋ผ๋ฏธํฐ์ ์ ํ์ ์ฃผ์ด์ง ํ์ ์ ์์ ๋๋ ๊ตฌํ ๊ด๊ณ์ ์๋ ํ์ ์ด ์๋๋ผ ์ฃผ์ด์ง ํ์ ์ ์กฐ์ ํ์ ์ผ๋ก ์ ํํ ์ ์๋์ง ๊ถ๊ธํ ์ ์๋ค.
- ๋ต์ ๋งํ์๋ฉด ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฃผ์ด์ง ํ์ ์ ์กฐ์ ํ์ ์ผ๋ก๋ ์ ํํ ์ ์๋ค.
- ์๋ํ๋ฉด <T extends ํ์ >์ ์ ์ํ ์ ๋ค๋ฆญ ํ์ ๋ฒ์๋ฅผ “์ํ” ์ ํํ๊ธฐ ์ํด ์ฌ์ฉํ๋๋ฐ <T super ํ์ >์ด ๋๋ค๋ฉด ๋ฌด์ํ ๋ง์ ์๋ฐ ํด๋์ค์ ์ธํฐํ์ด์ค๊ฐ ์ฌ ์ ์๋ค๋ ๋ป์ผ๋ก Object์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ ์ธ๋ชจ์๋ ์ฝ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- super ํค์๋์ ๊ดํด์๋ ์์ผ๋์นด๋ ๋ถ๋ถ์์ ์์ธํ ๋ค๋ฃจ๋๋ก ํ๊ณ extends ํค์๋๋ฅผ ์ฌ์ฉํ ์ ํ๋ ํ์ ํ๋ผ๋ฏธํฐ์ ์์ ์ฝ๋๋ฅผq ๋ณด๋๋ก ํ์!
class Food { }
class Fruit extends Food { }
class Vegetable extends Food { }
class Apple extends Fruit { }
class Banana extends Fruit { }
class Carrot extends Vegetable { }
class FruitBox<T> {
private List<Fruit> fruits = new ArrayList<>();
public void add(T fruit) {
fruits.add(fruit); // Compile Error
}
}
- ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ ๋ค๋ฆญ ํด๋์ค์ธ FruitBox๋ ๋ด๋ถ ํ๋๋ก List ํ์ ์ธ fruits ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ํด๋น fruits ๋ณ์์ ์์๋ฅผ ์ถ๊ฐํ๋ add(T fruit) ๋ฉ์๋๊ฐ ์๋ค.
- ๋ค๋ง add() ๋ฉ์๋ ๋ถ๋ถ์์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ List๋ ๋ด๋ถ ์์์ ํ์ ์ Fruit ํด๋์ค ๋๋ ๊ทธ ํ์ ํด๋์ค๋ง์ ์ถ๊ฐํ ์ ์๋๋ฐ ํ์ ํ๋ผ๋ฏธํฐ์ธ T๋ ์ด๋ค ํ์ ์ ํด๋์ค๋ ๋ชจ๋ ์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์, ํ์ ํ๋ผ๋ฏธํฐ์ ํ์ ์ Fruit ํ์ ๋๋ Fruit์ ์์ ํ์ ์ผ๋ก๋ง ๋์ฒด ๊ฐ๋ฅํ๋๋ก ์ ํํด์ฃผ์ด์ผ ํ๋ค.
- extends ํค์๋๋ฅผ ์จ์ ์์ ์ฝ๋๋ฅผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๋ฐ๊พธ์ด ๋ณด์!
class FruitBox<T extends Fruit> {
private List<Fruit> fruits = new ArrayList<>();
public void add(T fruit) {
fruits.add(fruit); // OK
}
}
- ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ ์ ๋๋ก ์คํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
[์ฐธ๊ณ ] ์์ ์ฝ๋ ํด๋์ค ์์๋
[Reference]
- https://www.youtube.com/watch?v=Vv0PGUxOzq0&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC
๋ฐ์ํ
'๐ง Programming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
IntelliJ ์ธ์ฝ๋ฉ ์ค์ (0) | 2023.08.18 |
---|---|
์ ๋ค๋ฆญ (5) - ๊ณต๋ณ์ฑ, ๋ฐ๊ณต๋ณ์ฑ, ๋ฌด๊ณต๋ณ์ฑ (0) | 2023.07.25 |
์ ๋ค๋ฆญ (3) - ์ ๋ค๋ฆญ ํด๋์ค์ ์ ๋ค๋ฆญ ๋ฉ์๋ (0) | 2023.07.22 |
์ ๋ค๋ฆญ (2) - ์ ๋ค๋ฆญ & ํ์ ํ๋ผ๋ฏธํฐ (0) | 2023.07.22 |
์ ๋ค๋ฆญ (1) - ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ ์ด์ (1) | 2023.07.22 |