๊ธฐ์กด ์ฝ”๋“œ ๋ฌธ์ œ์ 

package javaInt2Lecture.generic.ex1;

public class IntegerBox {

    private Integer value;

    public void set(Integer value) {
        this.value = value;
    }

    public Integer get() {
        return value;
    }


}

 

package javaInt2Lecture.generic.ex1;

public class StringBox {

    private String value;

    public void set(String value) {
        this.value = value;
    }

     public String get() {
        return value;
    }
}
package javaInt2Lecture.generic.ex1;

public class BoxMain1 {

    public static void main(String[] args) {
        IntegerBox integerBox = new IntegerBox();
        integerBox.set(10); // ์˜คํ† ๋ฐ•์‹ฑ
        Integer integer = integerBox.get();
        System.out.println("integer = " + integer);

        StringBox stringBox = new StringBox();
        //์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ(set)๋ฅผ ํด๋ž˜์Šค ์ด๋ฆ„์„ ํ†ตํ•ด ํ˜ธ์ถœํ•˜์—ฌ ์ƒ๊ธด ์˜ค๋ฅ˜_ ํ•ด๊ฒฐ ๊ณผ์ •์€ ์ด์Šˆ๋ž€ โœจ
        stringBox.set("hello");
        String str = stringBox.get();
        System.out.println("str = " + str);

    }
}

 

๊ธฐ์กด ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งˆ๋‹ค ๋ฐ•์Šค ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, IntegerBox์™€ StringBox๋Š” ๊ฐ๊ฐ Integer์™€ String ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

 

๊ธฐ์กด ์ฝ”๋“œ์˜ ํ•œ๊ณ„

1. ํ™•์žฅ์„ฑ ๋ถ€์กฑ: ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ๊ฐ๊ฐ์˜ ํƒ€์ž…์— ๋งž๋Š” ํด๋ž˜์Šค(DoubleBox, FloatBox ๋“ฑ)๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

2. ์ค‘๋ณต ์ฝ”๋“œ ์ฆ๊ฐ€: ํด๋ž˜์Šค ๊ตฌ์กฐ๋Š” ๋™์ผํ•˜๊ณ  ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งŒ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 


๋ฆฌํŒฉํ† ๋ง: ObjectBox ํด๋ž˜์Šค ๋„์ž…

 

ObjectBox๋Š” Java์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ธ Object๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

 

Object ํด๋ž˜์Šค๋ž€?

Object ํด๋ž˜์Šค๋Š” Java์—์„œ ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ํด๋ž˜์Šค์ด๋‹ค. ์ฆ‰, Java์˜ ๋ชจ๋“  ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Object ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Java๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์ผ๊ด€๋œ ๋™์ž‘์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

Object ํด๋ž˜์Šค์˜ ์ฃผ์š” ๊ธฐ๋Šฅ
1. ๊ณตํ†ต ๋ฉ”์„œ๋“œ ์ œ๊ณต: toString(), equals(), hashCode()์™€ ๊ฐ™์€ ๊ณตํ†ต ๋ฉ”์„œ๋“œ๋ฅผ ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
2. ๋‹คํ˜•์„ฑ ์ง€์›: Object ํƒ€์ž…์œผ๋กœ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ฉ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
3. ํ™•์žฅ์„ฑ: ํŠน์ • ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ Object ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ObjectBox ํด๋ž˜์Šค

public class ObjectBox {
    private Object value;
    
    public void set(Object object) {
        this.value = object;
    }
    
    public Object get() {
        return value;
    }
}

 

ObjectBox๋ฅผ ํ™œ์šฉํ•œ ์ฝ”๋“œ

public class BoxMain2 {
    public static void main(String[] args) {
        ObjectBox objectBox = new ObjectBox();

        // Integer ํƒ€์ž… ์ €์žฅ
        objectBox.set(10);
        Object object = objectBox.get();
        System.out.println("Stored value: " + object);

        // String ํƒ€์ž… ์ €์žฅ
        objectBox.set("Hello");
        object = objectBox.get();
        System.out.println("Stored value: " + object);
    }
}

 

ObjectBox ๋ฆฌํŒฉํ† ๋ง์˜ ์žฅ์ 

1. ๋ฒ”์šฉ์„ฑ: Object ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŠน์ • ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ์ œํ•œ๋˜์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

2. ์ฝ”๋“œ ์ค‘๋ณต ์ œ๊ฑฐ: ๋ชจ๋“  ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ObjectBox ํด๋ž˜์Šค๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ๋ถˆํ•„์š”ํ•œ ํด๋ž˜์Šค ์ƒ์„ฑ์„ ์ค„์ธ๋‹ค.

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

 

ObjectBox ๋ฆฌํŒฉํ† ๋ง์˜ ํ•œ๊ณ„

1. ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ถ€์กฑ: Object๋กœ ๋ฐ˜ํ™˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ช…์‹œ์  ์บ์ŠคํŒ…์ด ํ•„์š”ํ•˜๋‹ค.

Integer value = (Integer) objectBox.get(); // ๋ช…์‹œ์  ์บ์ŠคํŒ…

 

๋‹ค์šด์บ์ŠคํŒ…๊ณผ ๋ช…์‹œ์  ์บ์ŠคํŒ…: ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•

Integer value = (Integer) objectBox.get(); ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋œ (Integer)๋Š” ๋‹ค์šด์บ์ŠคํŒ…๊ณผ ๋ช…์‹œ์  ์บ์ŠคํŒ…์˜ ์˜ˆ์ด๋‹ค. ์ด๋ฅผ ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ๊นŒ์ง€ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

1. ๋‹ค์šด์บ์ŠคํŒ…(Downcasting)

๊ฐœ๋…
๋‹ค์šด์บ์ŠคํŒ…์€ ๋ถ€๋ชจ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ์ฐธ์กฐ๋œ ๊ฐ์ฒด๋ฅผ ์ž์‹ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค. Java์—์„œ Object๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ๋ถ€๋ชจ์ด๋ฏ€๋กœ, Object ํƒ€์ž…์„ ์ž์‹ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋‹ค์šด์บ์ŠคํŒ…์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํŠน์ง•
• ๋‹ค์šด์บ์ŠคํŒ…์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณ€ํ™˜์„ ๋ณด์žฅํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฐ˜๋“œ์‹œ ๋ช…์‹œ์  ์บ์ŠคํŒ…์ด ํ•„์š”ํ•˜๋‹ค.
• ์ž˜๋ชป๋œ ๋‹ค์šด์บ์ŠคํŒ…์€ ๋Ÿฐํƒ€์ž„์—์„œ ClassCastException์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
• ๋‹ค์šด์บ์ŠคํŒ…์€ ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋Š” ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

-----------------------------------------------------------------------
2. ๋ช…์‹œ์  ์บ์ŠคํŒ…(Explicit Casting)

๊ฐœ๋…
๋ช…์‹œ์  ์บ์ŠคํŒ…์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ํ˜• ๋ณ€ํ™˜์„ ์ง€์ •ํ•˜๋Š” ์ž‘์—…์ด๋‹ค. (ํƒ€์ž…)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•˜๋ ค๋Š” ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.

์‚ฌ์šฉ๋ฒ•
• ๋‹ค์šด์บ์ŠคํŒ…, ์—…์บ์ŠคํŒ…, ๋˜๋Š” ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ„์˜ ๋ณ€ํ™˜์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
• ๋‹ค์šด์บ์ŠคํŒ…์˜ ๊ฒฝ์šฐ, ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์„ ์–ธํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

----------------------------------------------------------
3. ๋‹ค์šด์บ์ŠคํŒ…์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ - ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

1. ๋‹คํ˜•์„ฑ(Polymorphism)์„ ์‚ฌ์šฉํ•  ๋•Œ:
• ๋ถ€๋ชจ ํƒ€์ž…(Object ๋“ฑ)์œผ๋กœ ์ฐธ์กฐ๋œ ๊ฐ์ฒด๋ฅผ ์ž์‹ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
• ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
Object obj = "Hello";
String str = (String) obj; // ๋‹ค์šด์บ์ŠคํŒ…

2. ๋ฒ”์šฉ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ:
• ObjectBox์™€ ๊ฐ™์ด Object๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ๋‹ค์‹œ ํŠน์ • ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

์ฃผ์˜ ์‚ฌํ•ญ
• ๋‹ค์šด์บ์ŠคํŒ…์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— instanceof ์—ฐ์‚ฐ์ž๋กœ ํƒ€์ž… ํ™•์ธ์ด ํ•„์š”ํ•˜๋‹ค.
• ์ž˜๋ชป๋œ ํƒ€์ž…์œผ๋กœ ์บ์ŠคํŒ…ํ•˜๋ฉด ClassCastException์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ•ด์•ผ ํ•œ๋‹ค.

<์•ˆ์ „ํ•œ ๋‹ค์šด์บ์ŠคํŒ…>
Object obj = "Hello";
if (obj instanceof String) {
    String str = (String) obj; // ๋‹ค์šด์บ์ŠคํŒ…
    System.out.println("String: " + str);
} else {
    System.out.println("Invalid type");
}

    1.1 IntegerBox์™€ ObjectBox ์˜ˆ์ œ์—์„œ์˜ ๋‹ค์šด์บ์ŠคํŒ…

ObjectBox objectBox = new ObjectBox();
objectBox.set(10); // Object ํƒ€์ž…์— ์ €์žฅ
Integer value = (Integer) objectBox.get(); // ๋‹ค์šด์บ์ŠคํŒ… + ๋ช…์‹œ์  ์บ์ŠคํŒ…

๋™์ž‘ ๊ณผ์ •

1. objectBox.set(10)์—์„œ 10์€ int ํƒ€์ž…์ด์ง€๋งŒ, Object ํƒ€์ž…์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜(์˜คํ† ๋ฐ•์‹ฑ)๋˜์–ด ์ €์žฅ๋œ๋‹ค.

2. objectBox.get() ํ˜ธ์ถœ ์‹œ, ๋ฐ˜ํ™˜๊ฐ’์€ Object ํƒ€์ž…์ด๋‹ค.

3. (Integer)๋ฅผ ์‚ฌ์šฉํ•ด Object ํƒ€์ž…์„ Integer ํƒ€์ž…์œผ๋กœ ๋‹ค์šด์บ์ŠคํŒ…ํ•œ๋‹ค.

 

 

 

2. ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๊ฐ€๋Šฅ์„ฑ: ์ž˜๋ชป๋œ ํƒ€์ž…์œผ๋กœ ์บ์ŠคํŒ…ํ•  ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ํƒ€์ž… ๋ช…ํ™•์„ฑ ๋ถ€์กฑ: ์ฝ”๋“œ๋งŒ ๋ด์„œ๋Š” ObjectBox๊ฐ€ ์–ด๋–ค ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

 


Object์˜ ๋‹คํ˜•์„ฑ๊ณผ ์ œ๋„ค๋ฆญ ๋„์ž… ์ œ์•ˆ

 

Object๋ฅผ ํ™œ์šฉํ•œ ๋‹คํ˜•์„ฑ์€ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ ์บ์ŠคํŒ…์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Java์—์„œ๋Š” ์ œ๋„ค๋ฆญ(Generic)์„ ์ œ๊ณตํ•œ๋‹ค.

 

์ œ๋„ค๋ฆญ ๋„์ž…์„ ํ†ตํ•ด ๊ฐœ์„ ๋œ ์ฝ”๋“œ

public class GenericBox<T> {
    private T value;

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

    public T get() {
        return value;
    }
}

์ œ๋„ค๋ฆญ์„ ํ™œ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ํƒ€์ž„์— ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ช…์‹œ์  ํƒ€์ž… ์บ์ŠคํŒ… ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

 

 


Object ํด๋ž˜์Šค๋Š” Java์˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ค‘์š”ํ•œ ๊ธฐ๋ฐ˜์„ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ฒ”์šฉ์ ์ธ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ObjectBox๋Š” ๊ทธ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ๋ก€์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํƒ€์ž… ์•ˆ์ „์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ œ๋„ค๋ฆญ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ์„ ํƒ์ผ ์ˆ˜ ์žˆ๋‹ค. Object์˜ ๋‹คํ˜•์„ฑ์„ ์ดํ•ดํ•˜๊ณ , ์ด๋ฅผ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒดํ•˜๋Š” ์„ค๊ณ„๋ฅผ ๊ณ ๋ฏผํ•˜๋Š” ๊ฒƒ์ด Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ค‘์š”ํ•˜๋‹ค.

+ Recent posts