๐ฏ Goals
- WildCard ๊ฐ ์ ํ์ํ์ง ์๋ค.
- ์ธ์ Generic ์ ์ธ์ง ์๋ค.
- ์ธ์ wildcard ๋ฅผ ์ธ์ง ์๋ค.
Java ์ ๋ค์ํ ์ปฌ๋ ์ ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๋ค๋ณด๋ฉด ์ ๋ค๋ฆญ์ ์์ฃผ ์ฌ์ฉํ๊ฒ ๋๋ค.
์ด ๋ `?` ๋ก ํํ๋๋ ์์ผ๋์นด๋๋ ์ฌ์ฌ์น ์๊ฒ ๋ณด๊ฒ ๋๋๋ฐ, ์ด ๋๋ ์์ ์ญํ ๊ณผ ์ฉ๋ก๋ฅผ ์์๋ณด์.
WildCard ์์ : ์์ผ๋ ์นด๋๋ ์ ๋์๋?
class ShapeTest {
void drawAll(List<Shape> shapeList) {
for (Shape shape : shapeList) {
shape.draw();
}
}
@DisplayName("Could not print all shapes with collection type hierarchy")
@Test
void drawAllTest() {
List<Rectangle> rectangles = List.of(new Rectangle(), new Rectangle());
this.drawAll(rectangles); // ๐ซ Error occurs
}
}
Rectangle ์ Shape ์ ์์ ํด๋์ค์ธ๋ฐ ์ ์๋ฌ๊ฐ๋์ง?
์ปฌ๋ ์ ์ ์์ ํ์ ์ด ์์ ๊ด๊ณ๋ฅผ ๋ง์กฑํ๋ค๊ณ ํด์ ์ปฌ๋ ์ <ํ์ > ์์ ๊ด๊ณ๋ ์ฑ๋ฆฝ๋๋ ๊ฒ์ ์๋๋ค.
(i.e.) Rectangle ์ด Shape ์ ์์ํ๋ค๊ณ ํด์ List<Rectangle> ์ด List<Shape>์ ์์ ๋ฐ์ ๊ฒ์ ์๋๋ค.
WildCard : ์ปฌ๋ ์ ํ์ ์ ์ ํํ ๋
class ShapeTest {
// Shape ์ ์์๋ฐ์ ํ์
์ ์ฐ์ฐ ๊ฐ๋ฅํ๋ค.
void drawAll(List<? extends Shape> shapeList) {
for (Shape shape : shapeList) {
shape.draw();
}
}
@DisplayName("It's possible to use method when collection wildcard is defined")
@Test
void drawAllTest() {
List<Rectangle> rectangles = List.of(new Rectangle(), new Rectangle());
this.drawAll(rectangles); // โ
}
}
Genreic
์ ๋ค๋ฆญ ์์ ๋ฐฉ์์ผ๋ก๋ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
class ShapeTest {
<T extends Shape> void drawAll(List<T> shapeList) {
for (T shape : shapeList) {
shape.draw();
}
}
@DisplayName("It's possible to use method when it's defined as type variable hierarchy")
@Test
void drawAllTest() {
List<Rectangle> rectangles = List.of(new Rectangle(), new Rectangle());
this.drawAll(rectangles);
}
}
Generic + WildCard ๊ณตํต์
๋๋ค ํ์ ์์ ์ฑ์ ๋ฐํ์ -> ์ปดํ์ผ ํ์์ผ๋ก ์ฎ๊ฒจ ์์ ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ๋ง๋ค์ด์ก๋ค.
์ฐจ์ด์
(์ถ๊ฐ ์์ )
'JVM > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Thread ์์ ๋์ Runnable ์ ์ฌ์ฉํ๋ผ. (0) | 2024.07.21 |
---|---|
[Java] Guava - MultiMap , BiMap (0) | 2024.07.14 |
[๊ฐ์ฒด์งํฅ] ์๋ชป๋ DRY ์์น ์ ์ฉ (0) | 2023.12.16 |
[Java] Enum ์๋ equals ๋์ == ์ ์จ๋ผ (0) | 2023.11.22 |
[Java & Kotlin] Stream (1) | 2023.10.09 |