[Java] Generic vs WildCard

2024. 1. 7. 23:20ยทJVM/Java

 

 

๐ŸŽฏ 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
'JVM/Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Java] Thread ์ƒ์† ๋Œ€์‹  Runnable ์„ ์‚ฌ์šฉํ•˜๋ผ.
  • [Java] Guava - MultiMap , BiMap
  • [๊ฐ์ฒด์ง€ํ–ฅ] ์ž˜๋ชป๋œ DRY ์›์น™ ์ ์šฉ
  • [Java] Enum ์—๋Š” equals ๋Œ€์‹  == ์„ ์จ๋ผ
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (432)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (๋ฌธ์ œํ’€์ด) (56)
        • Algorithm (์ด๋ก ) (23)
      • JVM (65)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (24)
        • Error (7)
      • ๊ธฐํƒ€ (70)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (13)
        • git (19)
        • ์žก๋™์‚ฌ๋‹ˆ (27)
      • ์žฌํ…Œํฌ (11)
        • ์„ธ๋ฌด (4)
        • ํˆฌ์ž (3)
        • ๋ณดํ—˜ (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • ์‹œ์Šคํ…œ ๋ณด์•ˆ (5)
      • ๋„คํŠธ์›Œํฌ (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • ์ €์ž‘๊ถŒ๊ณผ ์Šค๋งˆํŠธํฐ์˜ ์ดํ•ด (0)
      • ์ƒ๊ฐ ๋ญ‰์น˜ (6)
      • ๊ถ๊ธˆ์ฆ (2)
      • Private (4)
        • ์ด์ง ๊ฒฝํ—˜ (0)
        • ๊ฟˆ์„ ์ฐพ์•„์„œ (1)
      • Android (21)
        • OS (4)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • WEB
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • DataBase
    • Linux
    • Mobile
    • C
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • github
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    C++
    docker
    ubuntu
    Git
    kafka
    Spring
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    Programmers
    android
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋ฐฑ์ค€
    javascript
    JPA
    database
    linux
    PostgreSQL
    java
    algorithm
    Bitcoin
    Kotlin
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
M_Falcon
[Java] Generic vs WildCard
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”