
๊ธฐ์กด ์ฝ๋ ๋ฌธ์ ์
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 ํ๋ก๊ทธ๋๋ฐ์์ ์ค์ํ๋ค.