์ œ๋„ค๋ฆญ (4) - ์ œํ•œ๋œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ

2023. 7. 23. 23:05ยท ๐Ÿง Programming/Java

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
'๐Ÿง Programming/Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • IntelliJ ์ธ์ฝ”๋”ฉ ์„ค์ •
  • ์ œ๋„ค๋ฆญ (5) - ๊ณต๋ณ€์„ฑ, ๋ฐ˜๊ณต๋ณ€์„ฑ, ๋ฌด๊ณต๋ณ€์„ฑ
  • ์ œ๋„ค๋ฆญ (3) - ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์™€ ์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ
  • ์ œ๋„ค๋ฆญ (2) - ์ œ๋„ค๋ฆญ & ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ
KR_DEV
KR_DEV
๊ณต๋ถ€์šฉ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค. :)
๋ฐ˜์‘ํ˜•
KR_DEV
All about IT
KR_DEV
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ์ „์ฒด (139)
    • ๐Ÿ“š ์—ฐ์žฌ ์‹œ๋ฆฌ์ฆˆ (19)
      • ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ๋ฉด ์ข‹์„ ๋‚ด์šฉ (11)
      • ์ž์ฃผ ์“ฐ์ด๋Š” IT ์šฉ์–ด ์ •๋ฆฌ (6)
      • ์žก๋‹คํ•œ IT ์ •๋ณด (2)
    • ๐ŸŽฎ Toy Project (1)
    • ๐Ÿ’ฏ Coding Test (35)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ (14)
      • SQL ํ…Œ์ŠคํŠธ (21)
    • ๐Ÿ’ป Computer Science (14)
      • Hardware (4)
      • Operating System (3)
      • Network (4)
      • Database (3)
      • Data Structures (0)
      • Algorithms (0)
    • ๐ŸŒ Front End (0)
      • HTML5 (0)
      • CSS3 (0)
    • ๐Ÿ‘จโ€๐Ÿ’ป Back End (30)
      • Spring (5)
      • MySQL (12)
      • Redis (3)
      • OOP (0)
      • Design Pattern (0)
      • HTTP (2)
      • Servlet (1)
      • JDBC (7)
      • MSA (0)
    • ๐Ÿ› ๏ธ Devops (12)
      • HAProxy (1)
      • Linux (6)
      • Virtual Machine (4)
      • Container (0)
      • Ansible (1)
    • ๐Ÿง Programming (20)
      • Java (10)
      • Python (10)
    • ๐ŸŒฅ๏ธ Cloud (2)
      • AWS (1)
      • Oracle Cloud (0)
    • ๐Ÿ’พ Storage (5)
      • MiniO (3)
    • ๐Ÿ” Security & Hacking (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ๋ฐฉ๋ช…๋ก

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

  • ๊ตฌ๊ธ€ ์• ๋“œ์„ผ์Šค ํ†ต๊ณผํ–ˆ๋„ค์š” !!!
  • ์•ˆ๋…•ํ•˜์„ธ์š”.

์ธ๊ธฐ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.2
KR_DEV
์ œ๋„ค๋ฆญ (4) - ์ œํ•œ๋œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ
์ƒ๋‹จ์œผ๋กœ

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

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.