1. ์ œ๋„ค๋ฆญ์„ ํ•„์š”๋กœ ํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ

- ์ฝ”๋“œ ์ค‘๋ณต์„ ํ•ด๊ฒฐ๊ณผ ์ฝ”๋“œ ์•ˆ์ „์„ฑ์„ ๋ชจ๋‘ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๋‹คํ˜•์„ฑ๊ณผ ๋‹ค์šด์บ์ŠคํŒ…. 

 

๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋”ฐ๋ผ ํด๋ž˜์Šค๋ฅผ ๋ณ„๋„๋กœ set๋ฉ”์„œ๋“œ์™€ get๋ฉ”์„œ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ๊บผ๋‚ด๋Š” ๊ฒƒ์ด ๋ฒˆ๊ฑฐ๋กญ๋‹ค.

๊ทธ๋ž˜์„œ Object๋Š” ๋ชจ๋“  ํƒ€์ž…์˜ ๋ถ€๋ชจ์ด๋ฏ€๋กœ Object๋ฅผ ๋ถ€๋ชจํด๋ž˜์Šค๋กœ ํ•˜์—ฌ set๊ณผ get ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฒˆ๊ฑฐ๋กœ์›€์„ ํ•ด๊ฒฐ์„ ์‹œ๋„ํ•˜์˜€๋‹ค.

Main ํด๋ž˜์Šค์—์„œ ๋‹ค์šด์บ์ŠคํŒ…์„ ํ•˜์˜€๋‹ค. 

Object integerBox = new ObjectBox();
integerBox.set(10);
Integer integer = (Integer) integerBox.get(); //Object -> Integer ์บ์ŠคํŒ…
System.out.println("integer = "+ integer);

 

๋ฌธ์ œ๋Š” integerBox.set ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ํƒ€์ž…์ธ ๋ถ€๋ชจ์ธ Object๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์ƒ์˜ ์–ด๋–ค ๋ฐ์ด๋„ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ integerBox.set("๋ฌธ์ž100");์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด๋„ ์ž๋ฐ” ์–ธ์–ด ์ž…์žฅ์—์„œ๋Š” ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

ํ•˜์ง€๋งŒ ์ž˜๋ชป๋œ ํƒ€์ž…์˜ ๊ฐ‘์„ ์ „๋‹ฌํ•˜๋ฉด ๊ฐ’์„ ๊บผ๋‚ผ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

Integer result = (Integer) integerBox.get(); //1
Integer result = (Integer) "๋ฌธ์ž100"; //2
Integer result = (Integer) "๋ฌธ์ž100"; //3,์˜ˆ์™ธ ๋ฐœ์ƒ String์„ Integer๋กœ ์บ์ŠคํŒ…ํ•  ์ˆ˜ ์—†๋‹ค.

 

์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ์˜ˆ์ƒํ•œ ๋ฐ•์Šค์—๋Š” ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐ€ ์žˆ์—ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹ค์šด ์บ์ŠคํŒ…์‹œ์— String์„ Integer๋กœ ์บ์ŠคํŒ… ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋œ๋‹ค.

1. ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ๋ฝ‘์•„๋‚ด๋Š” set๋ฉ”์„œ๋“œ์™€ get๋ฉ”์„œ๋“œ ๊ธฐ๋Šฅ์„ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋ณ„๋กœ ํด๋ž˜์Šค๋ฅผ ๋ณ„๋„๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ๋ฒˆ๊ฑฐ๋กญ๋‹ค (๋ฌธ์ œ์  ๋ฐœ์ƒ)
2. ๋ฒˆ๊ฑฐ๋กœ์›€์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ์‹œ๋„ํ•˜์˜€๋‹ค
 - Object ๋ถ€๋ชจํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Mainํด๋ž˜์Šค์—์„œ ๊ฐ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋กœ ๋‹ค์šด์บ์ŠคํŒ… ํ•˜์—ฌ์„œ.
3. set()์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” Object์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋ฌธ์ œ ์—†์ด ๋“ค์–ด๊ฐ„๋‹ค.
   (๋ฒˆ๊ฑฐ๋กœ์›€์€ ํ•ด๊ฒฐํ•˜์˜€์ง€๋งŒ ๋˜๋‹ค๋ฅธ ๋ฌธ์ œ์  ๋ฐœ์ƒ)
4. ์˜๋„ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋‹ค์šด ์บ์ŠคํŒ… ํ•  ๋•Œ, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋“ค์–ด๊ฐ€์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์บ์ŠคํŒ…์ด ๋ถˆ๊ฐ€ํ•˜์—ฌ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ๊ณผ ํƒ€์ž… ์•ˆ์ „์„ฑ์ด๋ผ๋Š” ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ํ•œ ๋ฒˆ์— ์žก์„ ์ˆ˜ ์žˆ๋Š” ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•œ๋‹ค. 

2. ์ œ๋„ค๋ฆญ - ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ๊ณผ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋ชจ๋‘ ์žก์•„๋ณด์ž!

 

package generic.ex1;

public class GenericBox<T> {

    private T value;
    
    public void set(T value) {
        this.value = value
    }
    
    public T get() {
        return value;
    }
}

`<>`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ  ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋ผ๊ณ  ํ•˜๋ฉฐ,

์ด ๊ธฐํ˜ธ( `<>` )๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์ด์•„๋ชฌ๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.  

์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด `Integer`๋‚˜ `String` ๊ฐ™์€ ํŠน์ • ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.  

ํด๋ž˜์Šค๋ช… ์˜ค๋ฅธ์ชฝ์— `<T>`์™€ ๊ฐ™์ด ์„ ์–ธํ•˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๊ฐ€ ๋˜๋ฉฐ,

์—ฌ๊ธฐ์„œ `T`๋Š” ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.  

 

ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ `T`๋Š” ๋‚˜์ค‘์— ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ `Integer`, `String` ๋“ฑ์œผ๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ๋‹ค.  

ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ํƒ€์ž…์ด ํ•„์š”ํ•œ ๊ณณ์— `T`๋ฅผ ์‚ฌ์šฉํ•ด ์˜ˆ๋ฅผ ๋“ค์–ด `T value`์™€ ๊ฐ™์ด ์„ ์–ธํ•˜๋ฉด,

๋‚˜์ค‘์— ์ง€์ •๋œ ํƒ€์ž…์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋œ๋‹ค.

 

package generic.ex1;

public class BoxMain3 {

   public static void main(String[] args) {
      GenericBox<Integer> integerBox = new GenericBox<Integer>(); // ์ƒ์„ฑ์‹œ์ ์— T์˜ ํƒ€์ž… ๊ฒฐ์ •
      integerBox.set(10);
      //integerBox.set("๋ฌธ์ž100"); // Integer ํƒ€์ž…๋งŒ ํ—ˆ์šฉ, ์ปดํŒŒ์ผ ์˜ค๋ฅ˜
      Integer integer = integerBox.get(); //Integer ํƒ€์ž… ๋ณ€ํ™˜ (์บ์ŠคํŒ… X)
      System.out.println("integer = " + integer);
      
      //์›ํ•˜๋Š” ๋ชจ๋“  ํƒ€์ž… ์‚ฌ์šฉ ๊ฐ€๋Šฅ
GenericBox<Double> doubleBox = new GenericBox<Double>(); doubleBox.set(10.5);
Double doubleValue = doubleBox.get(); System.out.println("doubleValue = " + doubleValue);


      //ํƒ€์ž… ์ถ”๋ก : ์ƒ์„ฑํ•˜๋Š” ์ œ๋„ค๋ฆญ ํƒ€์ž… ์ƒ๋žต ๊ฐ€๋Šฅ
        GenericBox<Integer> integerBox2 = new GenericBox<>();
   }

}

 

์‹คํ–‰ ๊ฒฐ๊ณผ

integer = 10
doubleValue = 10.5

 


์ƒ์„ฑ ์‹œ์ ์— ์›ํ•˜๋Š” ํƒ€์ž… ์ง€์ •
์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ์ •์˜ํ•œ๋‹ค. `<>` (๋‹ค์ด์•„๋ชฌ๋“œ ๊ธฐํ˜ธ)์•ˆ์— ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค.

class GenericBox<T>

 

 

์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋Š” ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— `<>์‚ฌ์ด์— ์›ํ•˜๋Š” ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค.

new GenericBox<Integer>()

 


T์— Integer๋ฅผ ์ ์šฉํ•œ GenericBox ํด๋ž˜์Šค

 public class GenericBox<Integer> {
      private Integer value;
      public void set(Integer value) {
          this.value = value;
}
      public Integer get() {
          return value;
} }

T` ๊ฐ€ ๋ชจ๋‘ `Integer` ๋กœ ๋ณ€ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ `Integer` ํƒ€์ž…์„ ์ž…๋ ฅํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ `set(Integer value)` ์ด๋ฏ€๋กœ ์ด ๋ฉ”์„œ๋“œ์—๋Š” `Integer` ์ˆซ์ž๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

`get()์˜ ๊ฒฝ์šฐ์—๋„ `Integer๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž… ์บ์ŠคํŒ… ์—†์ด ์ˆซ์ž ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

Integer integer = integerBox.get(); // Integer ํƒ€์ž… ๋ฐ˜ํ™˜ (์บ์ŠคํŒ… X)

 


ํƒ€์ž… ์ถ”๋ก 

GenericBox<Integer> integerBox = new GenericBox<Integer>() // ํƒ€์ž… ์ง์ ‘ ์ž…๋ ฅ 
GenericBox<Integer> integerBox2 = new GenericBox<>() // ํƒ€์ž… ์ถ”๋ก 

์ฒซ ๋ฒˆ์งธ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ์™€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ <Integer>๊ฐ€ ๋‘ ๋ฒˆ ๋“ฑ์žฅํ•œ๋‹ค.

์ž๋ฐ”๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ ์‚ฌ์šฉ๋œ <Integer>๋ฅผ ๋ณด๊ณ , ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ํ•„์š”ํ•œ ํƒ€์ž… ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๋‘ ๋ฒˆ์งธ ์ค„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ new GenericBox<>()์™€ ๊ฐ™์ด ํƒ€์ž… ์ •๋ณด๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฅผ ํƒ€์ž… ์ถ”๋ก ์ด๋ผ ํ•˜๋ฉฐ,

์ž๋ฐ”๊ฐ€ ์Šค์Šค๋กœ ํƒ€์ž… ์ •๋ณด๋ฅผ ์œ ์ถ”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํƒ€์ž… ์ •๋ณด๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

 

๋‹ค๋งŒ, ํƒ€์ž… ์ถ”๋ก ์€ ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํƒ€์ž…์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ,

์ด๋ฅผ ์œ„ํ•ด ์ฃผ๋ณ€ ์ฝ”๋“œ์— ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํƒ€์ž… ์ •๋ณด๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด, ํƒ€์ž… ์ •๋ณด๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚œ ์ƒํ™ฉ์—์„œ๋งŒ ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 


์ •๋ฆฌ
์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•œ ๋•๋ถ„์— ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ๊ณผ ํƒ€์ž… ์•ˆ์ „์„ฑ์ด๋ผ๋Š” ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ๋ชจ๋‘ ์žก์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

+ Recent posts