μ λ€λ¦ μ§μνκΈ° μ μλ°μλ 컬λ μ μμ κ°μ²΄λ₯Ό κΊΌλΌ λλ§λ€ νλ³νμ ν΄μΌνμ (μ΄λ μ€μλ‘ μΈν λ°νμμλ¬λ₯Ό λ°μμν΄)
κ·Έλμ μ»΄νμΌλ¬λ μμμ νλ³ν μ½λλ₯Ό μΆκ°ν μ μκ³ μλ±ν νμ μ κ°μ²΄λ₯Ό λ£μΌλ €λ μλλ₯Ό μ»΄νμΌ κ³Όμ μμ μ°¨λ¨νμ¬ λ μμ νκ³ λͺ νν νλ‘κ·Έλ¨μ λ§λ€μ΄μ€λ€.
μ λ€λ¦μ μ΄μ μ μ΅λν μ΄λ¦¬κ³ λ¨μ μ μ΅μννμ¬ μ¬μ©ν΄λ³΄μ.
μμ΄ν 26 : λ‘(raw) νμ μ μ¬μ©νμ§ λ§λΌ
ν΄λμ€, μΈν°νμ΄μ€ μ μΈμ ‘νμ 맀κ°λ³μ'κ° μ°μ΄λ©΄ μ λ€λ¦ ν΄λμ€, μΈν°νμ΄μ€λΌκ³ λΆλ¦
→ μ΄λ₯Ό ν΅νμ΄ ‘μ λλ¦ νμ 'μ΄λΌκ³ ν¨
→ ‘μ λ€λ¦ νμ ’μ 맀κ°λ³μν νμ μ μ μνλ€.
→ ‘μ λ€λ¦ νμ 'μ μ μνλ©΄ ‘raw νμ ' λ μ μλλ€. (νμ 맀κ°λ³μλ₯Ό μ¬μ©νμ§ μλ νμ ) ex) List<E> → List (μ λ€λ¦ λλ μ μ½λμ νΈνμ μν΄ μ‘΄μ¬)
λ²μ©μ μΈ μ½λλ₯Ό λ§λ€κΈ° μν΄ μ¬λ¬ νμ μ νμ©νκ³ μ¬μ©ν λ μΊμ€ν νλ λ°©λ²μ μ»΄νμΌ νμμλ μ€λ₯κ° λμ§ μκΈ° λλ¬Έμ μ’μ λ°©λ²μ΄ μλλ€.
- λ°νμμμμΌ μ€λ₯κ° λ°μ
- μ€λ₯ μμΈμ μμΉμ λ°νμ μ μ€λ₯ λ°μ μμΉκ° λ©λ¦¬ λ¨μ΄μ Έ μλ€. (μ 체 μ½λμμ μ€λ₯λ₯Ό μ°ΎμμΌν μλ μλ€)
μ€λ₯λ κ°λ₯ν ν μ»΄νμΌν λ λ°κ²¬νλ κ²μ΄ κ°μ₯ μ’λ€!
μ λ€λ¦μ νμ©νλ©΄ νμ μ λ³΄κ° μ μΈ μ체μ λ Ήμλ€κ² λλ€.
private final Collections<Stamp> stamps = ...;
μμ²λΌ νμ μ 보λ₯Ό λͺ μνλ©΄ Stampμ μΈμ€ν΄μ€λ§ λ£μ΄μΌ μ»΄νμΌλ¬κ° μΈμ§νκ² λλ€. μλλΌλ©΄ μ»΄νμΌ μ€λ₯λ°μ. (μ»΄νμΌλ¬κ° 컬λ μ μμ μμλ₯Ό κΊΌλ΄λ λͺ¨λ κ³³μμ 보μ΄μ§ μλ λͺ μλ νμ μΌλ‘μ νλ³νμ μΆκ°νλ€)
rawμ νμ μ μ°λ©΄ μλλ€
μ λ€λ¦μ΄ μ£Όλ μμ μ±κ³Ό ννλ ₯μ λͺ¨λ μκ² λλ€. λ‘ νμ μ λ¨μ§ νΈνμ± λλ¬Έμ λ§λ€μ΄ λ κ²μ΄λ€. (μ§κΈκΉμ§ μμ΄ λ‘νμ μ½λλ€μ μν...)
<?> λΉνμ μ μμΌλμΉ΄λ
μ€μ νμ 맀κ°λ³μκ° μ κ²½μ°μ§ μκ³ μ λ€λ¦ μ¬μ© μΆμ λ
μμΈ
ν΄λμ€ λ¦¬ν°λ΄μ λ‘νμ μ μ¨μΌνλ€. 맀κ°λ³μν νμ κΈμ§
ex) List.class, String[].class, List<?>.classe
λ‘ νμ μ μ¬μ©νλ©΄ λ°νμμ μμΈκ° λ°μν μ μκ³ μ λ€λ¦ νμ μμ€ν μ΄ μλκ³ μμ νμ§ μλ€.
μμ΄ν 27 : λΉκ²μ¬ κ²½κ³ λ₯Ό μ κ±°νλΌ
λΉκ²μ¬ κ²½κ³ λ λ°νμμ μμΈλ₯Ό λ°μμν¬ μ μλ κ°λ₯μ±μ λ§νλ€.
μ΄ μμΈκ° λ°μνμ§ μλλ‘ μ΅λν μ κ±°νκ³ μ κ±° μν¬ λ°©λ²μ΄ μλ€λ©΄ @SuppressWarning("unchecked") λ₯Ό ν΅ν΄ κ²½κ³ λ₯Ό μ¨κΈ΄λ€.
μ΄ν κ²½κ³ λ₯Ό 무μν΄λ λλ μ΄μ λ₯Ό μ£Όμμ λ¨κ²¨μΌ νλ€.
μμ΄ν 28 : λ°°μ΄λ³΄λ€λ 리μ€νΈλ₯Ό μ¬μ©νλΌ
- λ°°μ΄μ 곡λ³μ΄λ€. (νμνμ
[]μ΄ μμ νμ
[] κ°λ₯)
- λ°νμμ μ€ν¨
// λ°νμμ μ€ν¨
Obejct[] objectArray = new Long[1];
objectArray[0] = "νμ
μ΄ λ€λ₯΄λ€"; // ArrayStoreException
- List<νμνμ
>κ³Ό List<μμνμ
> μλ‘ νμ/μμ νμ
μ΄ μλ (μ λ€λ¦)
- μ»΄νμΌ νμμ μ€ν¨
// μ»΄νμΌνμμ μ€ν¨
List<Object> ol = new ArrayList<Long>(); // νΈνλμ§ μλ νμ
. μ»΄νμΌ μλ¬
ol.add("νμ
μ΄ λ€λ₯΄λ€");
μ λ€λ¦μ λ°°μ΄μ μ¬μ©νλ €λ©΄ λΉκ²μ¬ νλ³νμ μ κ±°ν΄μΌν μ λ μκ³ νλ³ν μμΈλ κ²ͺμ μ μλ€.
λ°°μ΄λ³΄λ€λ 리μ€νΈλ₯Ό μ¬μ©νλ©΄ μ€λ₯λ κ²½κ³ μμ΄ μ»΄νμΌ ν μ μλ€.
μμ΄ν 29 : μ΄μμ΄λ©΄ μ λ€λ¦ νμ μΌλ‘ λ§λ€λΌ
μ λ€λ¦ νμ μ λ§λλ κ²μ μ‘°κΈ λ³΅μ‘νλ€.
νμ§λ§ ν΄λΌμ΄μΈνΈμμ μ§μ νλ³ννλ κ²λ³΄λ€ μ λ€λ¦ νμ μ΄ λ μμ νκ³ μ°κΈ° νΈνλ€. (μ§μ νλ³ν νμ μμ΄μ§)
μ λ€λ¦μ μ¬μ©νλ©΄ κΈ°μ‘΄ ν΄λΌμ΄μΈνΈμ μν₯μ μ£Όμ§ μμΌλ©΄μ μ¬μ©ν μ μλ€.
μμ΄ν 30 : μ΄μμ΄λ©΄ μ λ€λ¦ λ©μλλ‘ λ§λ€λΌ
μ λ€λ¦ λ©μλλ₯Ό μ¬μ©νλ©΄ κ²½κ³ μμ΄ μ»΄νμΌλλ©°, νμ μμ νκ³ , μ°κΈ° μ½λ€.
μ§μ νλ³ννμ§ μμλ μ»΄νμΌ λλ€.
public static <E> Set<E> union(Set<E> s1, Set<E> s2) {
Set<E> result = new HashSet<>(s1);
result.addAll(s2);
return result;
}
μμ΄ν 31 : νμ μ μμΌλμΉ΄λλ₯Ό μ¬μ©ν΄ API μ μ°μ±μ λμ΄λΌ
‘맀κ°λ³μν νμ ’μ λΆκ³΅λ³μ΄λ€. μ¦, List<νμνμ >κ³Ό List<μμνμ >λ μλ‘ νμ/μμ νμ μ΄ μλλ€.
νμ μ μμΌλμΉ΄λλ₯Ό μ¬μ©νμ§ μκ³ κ·Έλ₯ 맀κ°λ³μν νμ μ μ¬μ©νλ©΄ μλ‘ λΆκ³΅λ³μ΄κΈ° λλ¬Έμ λ§μ§μλ νμ μ΄λΌκ³ μλ¬κ° λ°μνλ€.
νμ§λ§ μλ μ½λμ²λΌ ‘νμ μ μμΌλμΉ΄λ'λ₯Ό μ¬μ©νλ©΄ “Eμ νμ λλ μμνμ μΈ κ²λ€μ ν¬ν¨νλ€”μ¬μ μ μ°μ±μ΄ κ·Ήλν λλ€.
public void pushAll(Iterable<? extends E> src) { // producer : src
for (E e : src)
push(e);
}
public void popAll(Collection<? super E> dst) { // consumer : dst
while (!isEmpty())
dst.add(pop());
}
μμ΄ν 32: μ λ€λ¦κ³Ό κ°λ³μΈμλ₯Ό ν¨κ» μΈ λλ μ μ€νμ
κ°λ³μΈμλ λ©μλμ λκΈ°λ μΈμμ κ°μλ₯Ό ν΄λΌμ΄μΈνΈκ° μ‘°μ ν μ μκ² νλ κΈ°λ₯μ΄λ€.
κ°λ³μΈμ λ©μλ νΈμΆ → κ°λ³μΈμλ₯Ό λ΄λ λ°°μ΄ μμ±
κ°λ³μΈμλ λ°°μ΄μ λ΄λΆλ‘ κ°μΆμ§ λͺ»νκ³ λ ΈμΆνκΈ° λλ¬Έμ μΆμνκ° μλ²½νμ§ λͺ»νλ€.
νμ μμ νμ§ μμ§λ§ νμ©λλ€.
μ λ€λ¦μ κ°λ³μΈμλ₯Ό μ¬μ©νλ€λ©΄ λ©μλκ° νμ μμ νμ§ νμ νμΈνλλ‘ μ‘°μ¬ν΄μ μ¬μ©νμ.
μμ΄ν 33 : νμ μμ μ΄μ’ 컨ν μ΄λλ₯Ό κ³ λ €νλΌ
μΌλ°μ μΈ μ λ€λ¦ ννμμλ ν 컨ν μ΄λκ° λ€λ£° μ μλ νμ 맀κ°λ³μμ μκ° κ³ μ λμ΄ μλ€. ex) Map<K, V>, List<K> λ±..
컨ν μ΄λ μμ²΄κ° μλ ν€λ₯Ό ‘νμ 맀κ°λ³μλ‘' λ°κΎΈλ©΄ μ μ½μλ ‘νμ μμ μ΄μ’ 컨ν μ΄λ'λ₯Ό λ§λ€ μ μλ€.
Classλ₯Ό ν€λ‘ μ°λ©° μ΄λ₯Ό νμ ν ν°μ΄λΌ νλ€.
-ν΄λΌμ΄μΈνΈ μ½λ-
// μ½λ 33-2 νμ
μμ μ΄μ’
컨ν
μ΄λ ν¨ν΄ - ν΄λΌμ΄μΈνΈ (199μͺ½)
public static void main(String[] args) {
Favorites f = new Favorites();
f.putFavorite(String.class, "Java");
f.putFavorite(Integer.class, 0xcafebabe);
f.putFavorite(Class.class, Favorites.class);
String favoriteString = f.getFavorite(String.class);
int favoriteInteger = f.getFavorite(Integer.class);
Class<?> favoriteClass = f.getFavorite(Class.class);
System.out.printf("%s %x %s%n", favoriteString,
favoriteInteger, favoriteClass.getName());
}
-Favoriteμ½λ-
public class Favorites {
private Map<Class<?>, Object> favorites = new HashMap<>();
public <T> void putFavorite(Class<T> type, T instance) {
favorites.put(Object.requireNonNull(type), instance);
}
public <T> getFavorite(Class<T> type) {
return type.cast(favorite.get(type));
}
}
λ§΅μ΄ μλ ν€κ° μμΌλ νμ μ΄κΈ° λλ¬Έμ λͺ¨λ ν€κ° μλ‘ λ€λ₯Έ 맀κ°λ³μν νμ μΌ μ μλ€λ λ»μ΄λ€.
λ°λΌμ, Class<String>μ΄λ Class<Integer>λ λͺ¨λ κ°λ₯νλ€. (λ€μν νμ μ§μ)
Mapμ κ° νμ μ λ¨μν Objectμ΄λ€. μ΄λ ν€μ κ°μ¬μ΄μ νμ κ΄κ³λ₯Ό 보μ¦νμ§ μλλ€λ κ²μ΄λ€.
νμ§λ§ μ°λ¦¬λ κ°μ κΊΌλΌ λ ν€λ₯Ό λ겨 λ°μμ κ·Έλ‘ μΊμ€ν νμ¬ λμ νλ³νν μ μλ€.
'πμ½μ μ± μ 리 > μ΄νν°λΈμλ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ΄νν°λΈ μλ°] 7μ₯ : λλ€μ μ€νΈλ¦Ό (0) | 2022.03.23 |
---|---|
[μ΄νν°λΈ μλ°] 6μ₯ : μ΄κ±° νμ κ³Ό μ λν μ΄μ (0) | 2022.03.21 |
[μ΄νν°λΈ μλ°] 4μ₯ : ν΄λμ€μ μΈν°νμ΄μ€ (0) | 2022.03.14 |
[μ΄νν°λΈ μλ°] 3μ₯ : λͺ¨λ κ°μ²΄μ κ³΅ν΅ λ©μλ (0) | 2022.03.09 |
[μ΄νν°λΈ μλ°] 2μ₯ : κ°μ²΄ μμ±κ³Ό νκ΄΄ (0) | 2022.03.08 |