λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ–₯️/Java

[Java] Generic 기법

by HanaV 2023. 3. 22.
728x90

Generic은 λͺ¨λ“  μ’…λ₯˜μ˜ νƒ€μž…μ„ λ‹€λ£° 수 μžˆλ„λ‘ ν΄λž˜μŠ€λ‚˜ λ©”μ†Œλ“œλ₯Ό μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ μ„ μ–Έν•˜λŠ” 기법이닀. μ‰½κ²Œ λ§ν•˜λ©΄, μ œλ„€λ¦­μ€ 데이터 νƒ€μž…μ„ λ³€μˆ˜μ²˜λŸΌ μ„ μ–Έν•˜λŠ” 것이닀.

μ œλ„€λ¦­μ„ μ‚¬μš©ν•¨μœΌλ‘œμ„œ μ–»λŠ” μž₯점은 μ•„λž˜μ™€ κ°™λ‹€.

1. νƒ€μž… μ•ˆμ •μ„±(Type Safety): μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μ½”λ“œμ—μ„œ λ°œμƒν•  수 μžˆλŠ” νƒ€μž… κ΄€λ ¨ 였λ₯˜λ₯Ό 미리 κ²€μΆœν•  수 μžˆλ‹€.

2. μ½”λ“œ μž¬μ‚¬μš©μ„±: λ™μΌν•œ κΈ°λŠ₯을 가진 ν΄λž˜μŠ€λ‚˜ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬ 데이터 νƒ€μž…μ— λŒ€ν•΄ λ‹€μ‹œ μž‘μ„±ν•˜μ§€ μ•Šκ³  μž¬μ‚¬μš©ν•  수 μžˆλ‹€.

3. μ„€κ³„μ˜ μΌλ°˜ν™”: μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λ©΄ νŠΉμ • νƒ€μž…μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” 일반적인 λ””μžμΈμ„ ν•  수 μžˆλ‹€. 

4. μ„±λŠ₯ κ°œμ„ : μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λ©΄ 컴파일 μ‹œκ°„μ— νƒ€μž… λ³€ν™˜ μ½”λ“œκ°€ μƒμ„±λ˜λ―€λ‘œ μ‹€ν–‰ μ‹œκ°„μ— λΆˆν•„μš”ν•œ νƒ€μž… κ²€μ‚¬λ‚˜ ν˜• λ³€ν™˜μ„ ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.


μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜λŠ” 주둜 E(Element) , T(Type), V(Value), K(Key)λ₯Ό μ‚¬μš©ν•œλ‹€.

μ œλ„€λ¦­ νƒ€μž… <T>λ₯Ό 가진 μ œλ„€λ¦­ 클래슀의 λͺ¨μŠ΅μ„ κ°„λž΅νžˆ λ‚˜νƒ€λ‚Έ 것이닀.

class Stack<T> {
	...
    void push (T item) { ... }
    T pop() { ... }
    ...
}

 

μ˜ˆμ‹œ μ½”λ“œ

class GStack<T> { //<T>: λͺ¨λ“  νƒ€μž…μ„ λ°›μŒ

    public int tos; //클래슀 전체에 영ν–₯을 λ―ΈμΉ˜λŠ” μ „μ—­λ³€μˆ˜
    Object[] stck;
    
    public GStack(){
        this.tos = 0;
        stck = new Object[10]; //μ›μ†Œμ˜ κ°œμˆ˜κ°€ 10인 λ°°μ—΄ 생성
    }

    public void push(T item){
        if(tos == 10) return;
        stck[tos] = item;
        tos ++;
    }

    public T pop(){
        if(tos == 0) return null;
        tos --;
        return (T)stck[tos];
    }
}



public class GenericTest {
    public static void main(String[] args) {
        GStack<Object> stringStack = new GStack<>();
        stringStack.push("Seoul");
        stringStack.push("Busan");
        stringStack.push("LA");
        stringStack.push(24); //int String λ“± λͺ¨λ“  νƒ€μž… κ°€λŠ₯

        for(int i=0; i<4; i++)
        System.out.println(stringStack.pop());
    }
    
}

console

Seoul
Busan
LA
24
728x90

"); wcs_do();