πŸ“•μ œλ„€λ¦­

dev_itzel_02✨·2024λ…„ 8μ›” 28일
post-thumbnail

πŸ·οΈμ œλ„€λ¦­

클래슀 λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  데이터 νƒ€μž…μ„ μ™ΈλΆ€μ—μ„œ μ§€μ •ν•˜λŠ” 기법

  • 데이터 νƒ€μž…μ„ μΌλ°˜ν™”ν•˜λŠ” 것을 의미
  • ν΄λž˜μŠ€λ‚˜ λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©ν•  λ‚΄λΆ€ 데이터 νƒ€μž…μ„ 컴파일 μ‹œ 미리 μ €μž₯

βœπŸΌμ‚¬μš© 방법

  • μ œλ„€λ¦­ νƒ€μž…μ€ νƒ€μž…μ„ νŒŒλΌλ―Έν„°λ‘œ κ°€μ§€λŠ” ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€
  • μ œλ„€λ¦­ νƒ€μž…μ€ 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€ 이름 뒀에 <> λΆ€ν˜Έκ°€ λΆ™κ³  사이에 νƒ€μž… νŒŒλΌλ―Έν„°κ°€ μœ„μΉ˜
public class 클래슀λͺ…<T> {...}
public interface μΈν„°νŽ˜μ΄μŠ€λͺ…<T> {...}
νƒ€μž…μ„€λͺ…
T
Type
E
Element
K
Key
V
Value
N
Number

>> e.g.

πŸ“‘μ œλ„€λ¦­ 클래슀

public class Box<T> {
    private T;
    
    public T get() {
        return t;
    }
    
    public void set(T t) {
        this.t = t;
    }
    
    public static void main(String[] args) {
        Box<Integer> integerBox = new Box<>();
        Box<String> stringBox = new Box<>();
        
        integerBox.set(new Integer(10));
        stringBox.set(new String("Hello World"));
        
        System.out.println("Integer Value :%d\n", integerBox.get());
        System.out.println("String Value :%s\n", stringBox.get());
    }
}
  • 클래슀λ₯Ό 섀계할 λ•Œ ꡬ체적인 νƒ€μž…μ„ λͺ…μ‹œν•˜μ§€ μ•Šκ³  νƒ€μž… νŒŒλΌλ―Έν„°λ‘œ λ„£μ–΄λ‘μ—ˆλ‹€κ°€, μ‹€μ œ μ„€κ³„ν•œ ν΄λž˜μŠ€κ°€ μ‚¬μš©λ  λ•Œ ꡬ체적인 νƒ€μž…μ„ μ§€μ •ν•˜μ—¬ μ‚¬μš©ν•˜λ©΄μ„œ νƒ€μž… λ³€ν™˜μ„ μ΅œμ†Œν™”ν•¨.
  • νƒ€μž… νŒŒλΌλ―Έν„°μ—λŠ” κΈ°λ³Έ μžλ£Œν˜•μ΄ μ•„λ‹Œ Wrapper 클래슀 λ˜λŠ” 일반 클래슀λ₯Ό μ‚¬μš©ν•΄μ•Ό 함.

πŸ“‘μ œλ„€λ¦­ μΈν„°νŽ˜μ΄μŠ€

public interface GenericInterface<T> {
    T performAction(T t);
}

public class GenericClass<T> implements GenericInterface<T> {
    
    @Override
    public T performAction(final T t) {
        return t;
    }
    
    public static void main(String[] args) {
        GenericClass<String> stringInstance = new GenericClass<>();
        String result = stirngInstance.performAction("Hello");
        System.out.println(result);
        
        GenericClass<Integer> integerInstance = new GenericClass<>();
        Integer integerResult = integerInstance performAction(25);
        System.out.println(integerResult);
    }
}
  • μΈν„°νŽ˜μ΄μŠ€μ—μ„œλ„ νƒ€μž… νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ νƒ€μž…μ„ μ²˜λ¦¬ν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•¨.

πŸ“‘μ œλ„€λ¦­ μ™€μΌλ“œ μΉ΄λ“œ

// 이 μ™€μΌλ“œ μΉ΄λ“œλŠ” μ œν•œμ΄ μ—†μŒ. μ–΄λ–€ νƒ€μž…μ΄λ“  올 수 있으며, κ°€μž₯ 일반적인 ν˜•νƒœμ˜ μ™€μΌλ“œ μΉ΄λ“œ
public static void printList(List<?> list) {
    for (Object item: list)
        System.out.println(item);
}

// μƒμœ„ 경계(νŠΉμ • νƒ€μž… or ν•˜μœ„ νƒ€μž…)λ₯Ό μ„€μ •ν•˜λŠ” μ™€μΌλ“œ μΉ΄λ“œ
public static double sumOfList(List<? extends Number> list) {
    double s = 0.0;
    for (Number n : list)
        s += n.doubleValue();
    return s;
}

// ν•˜μœ„ 경계(νŠΉμ • νƒ€μž… or μƒμœ„ νƒ€μž…)λ₯Ό μ„€μ •ν•˜λŠ” μ™€μΌλ“œ μΉ΄λ“œ
public static void addNumbers(List<? super Integer> list) {
    for (int i = 1; i <= 10; i++)
        list.add(i);
}
  • μ™€μΌλ“œ μΉ΄λ“œ νƒ€μž…μ—λŠ” 총 μ„Έ κ°€μ§€μ˜ ν˜•νƒœκ°€ 있으며 ? ν‚€μ›Œλ“œλ‘œ ν‘œν˜„ν•¨
    • μ œλ„€λ¦­ νƒ€μž…<?> πŸ‘‰πŸΌ νƒ€μž… νŒŒλΌλ―Έν„°λ₯Ό λŒ€μΉ˜ν•˜λŠ” κ²ƒμœΌλ‘œ λͺ¨λ“  ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€ νƒ€μž… κ°€λŠ₯
    • μ œλ„€λ¦­ νƒ€μž…<? extends μƒμœ„νƒ€μž…> πŸ‘‰πŸΌ μ™€μΌλ“œ μΉ΄λ“œμ˜ λ²”μœ„κ°€ νŠΉμ • 객체의 ν•˜μœ„ 클래슀만 κ°€λŠ₯
    • μ œλ„€λ¦­ νƒ€μž…<? super ν•˜μœ„νƒ€μž…> πŸ‘‰πŸΌ μ™€μΌλ“œ μΉ΄λ“œμ˜ λ²”μœ„κ°€ νŠΉμ • 객체의 μƒμœ„ 클래슀만 κ°€λŠ₯
profile
πŸœπŸ‘£steadinessπŸœπŸ‘£

0개의 λŒ“κΈ€