μ œλ„€λ¦­(Generics) μ΄λž€? (+Wrapper 클래슀, μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬)
2025. 1. 19. 20:10

μžλ°”μ—μ„œ μ œλ„€λ¦­μ€ 클래슀 λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  λ°μ΄ν„°νƒ€μž…μ„ μ™ΈλΆ€μ—μ„œ μ§€μ •ν•˜λŠ” 것!

즉, μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λ©΄ 컴파일 μ‹œ 미리 νƒ€μž…μ΄ μ§€μ •λœλ‹€.

 

μ‚¬μš©μ΄μœ ? νƒ€μž… μ•ˆμ „μ„±

 

리슀트 객체λ₯Ό 예λ₯Ό λ“€λ©΄..

ArrayList<String> List = new ArrayList<>(); // λ’·μͺ½μ˜ μ œλ„€λ¦­μ˜ νƒ€μž…μ€ μƒλž΅ κ°€λŠ₯

리슀트 클래슀 μžλ£Œν˜•μ˜ νƒ€μž…μ€ String으둜 μ§€μ •λ˜μ–΄, λ¬Έμžμ—΄ λ°μ΄ν„°λ§Œ λ¦¬μŠ€νŠΈμ— 적재 κ°€λŠ₯함!

 

μš°λ¦¬κ°€ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ λ³€μˆ˜μ˜ νƒ€μž…μ„ μ§€μ •ν•΄μ£Όλ“―,
μ œλ„€λ¦­μ€ 객체(Object)에 νƒ€μž…μ„ μ§€μ •ν•΄μ£ΌλŠ” 것이라고 보면 λœλ‹€.

 

μ œλ„€λ¦­ νƒ€μž…μ˜ μ’…λ₯˜

=> 일반적으둜 μ‚¬μš©λ˜λŠ” μ„ μ–Έλ˜λŠ” 방식이지 무쑰건 μ§€μΌœμ•Όν•˜λŠ” κ·œμΉ™μ€ μ•„λ‹˜

<T> : Type

<K> : Key

<V> : Value

<E> : Element

<N> : Number

<R> : Result

<S>, <U>, <V> … λ“± μ—¬λŸ¬ 개의 λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œ μ΄μš©ν•  수 μžˆλ‹€.

 

μ œλ„€λ¦­ ν΄λž˜μŠ€λŠ” κΈ°λ³Έν˜• νƒ€μž… (int, double, char,...)을 μ§€μ •ν•  수 μ—†λ‹€.

=> Integer, Doubleκ³Ό 같은 μ°Έμ‘°ν˜• νƒ€μž…μ„ ν™œμš©ν•˜μ—¬ μ§€μ •ν•΄μ•Όν•œλ‹€.

 

 Wrapper 클래슀

μžλ°”μ˜ κΈ°λ³Έ μžλ£Œν˜•(int, float, double, char..)을 μœ„ν•œ 클래슀

λ§€κ°œλ³€μˆ˜κ°€ κ°μ²΄μ΄κ±°λ‚˜ return값이 객체인 경우 κΈ°λ³Έ μžλ£Œν˜•μ„ κ°μ²΄ν˜•μœΌλ‘œ μ‚¬μš©ν•œλ‹€.

int Wrapperν΄λž˜μŠ€λŠ” Integer둜 ν•΄λ‹Ή 클래슀의 parseIntλ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ λ¬Έμžμ—΄λ‘œ μ·¨κΈ‰λ˜λŠ” "1"을 숫자둜 λ°˜ν™˜ν•  μˆ˜λ„ μžˆλ‹€. λ˜ν•œ μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ μ œλ„€λ¦­μœΌλ‘œ νƒ€μž…μ„ μ§€μ •ν•΄μ£ΌλŠ” 경우 Wrapper 클래슀λ₯Ό μ¨μ•Όν•œλ‹€!

// String -> int
int num = Integer.parseInt("10");

// int -> String
String str = Integer.toString(10);

 

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬ (Collection Framework (API, 라이브러리) : 자료ꡬ쑰λ₯Ό κ΅¬ν˜„ν•΄ 놓은 클래슀)

- SET /  LIST / MAP

1) Set : μ€‘λ³΅ν—ˆμš© X

=> κ΅¬ν˜„μ²΄ 클래슀 : HashSet, LinkedHashSet(μˆœμ„œ), TreeSet(μ •λ ¬) 

=> 속도 λΉ λ₯Έ μˆœμ„œ : HashSet > LinkedHashSet > TreeSet

 

2) LIST : λ°°μ—΄μ²˜λŸΌ 인덱슀λ₯Ό κ°€μ§€λ©° ν¬κΈ° λ³€κ²½ κ°€λŠ₯ 

=> κ΅¬ν˜„μ²΄ 클래슀 : ArrayList, LinkedList, Vector

=> ArrayList VS Vector : λ©€ν‹°μ“°λ ˆλ“œ μ•ˆμ „ μ—¬λΆ€!

                                        ArrayList (μ•ˆμ „ X) /   Vector(μ•ˆμ „ O)

=> ArrayList VS LinkedList : 데이터λ₯Ό μ°Έμ‘°ν•  λ•Œ (get, select, κ°€μ Έμ˜¬λ•Œ) ArrayListκ°€ 빠름

                                             λ°μ΄ν„° μΆ”κ°€/μ‚­μ œ(μ•žλ’€)λŠ” λ˜‘κ°™μŒ

                                             λ°μ΄ν„° 쀑간 μΆ”κ°€/μ‚­μ œλŠ” LinkedListκ°€ 빠름

 

3) Map  : key, value ν•œμŒμœΌλ‘œ 데이터 μ €μž₯

=> κ΅¬ν˜„μ²΄ 클래슀 : HashMap, LinkedHashMap(μˆœμ„œ), TreeMap(μ •λ ¬)

Map<String, String> map = new HashMap<>();

μ œλ„€λ¦­μ„ λ¬Έμžμ—΄λ‘œ μ§€μ •ν•˜λŠ” λ§΅ 객체