πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

null이 μ•„λ‹Œ, 빈 μ»¬λ ‰μ…˜μ΄λ‚˜ 배열을 λ°˜ν™˜ν•˜λΌ - [8μž₯. λ©”μ„œλ“œ(μ•„μ΄ν…œ54)]

Amenable 2023. 12. 11. 20:22

πŸ“™ 1. null을 λ°˜ν™˜ν•˜λŠ” 경우

  λ§€μž₯ μ•ˆμ˜ 치즈 λͺ©λ‘μ„ λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ‚΄νŽ΄λ³΄μž.

private final List<Cheese> cheeseInStock = ...;

/**
 * @return λ§€μž₯ μ•ˆμ˜ λͺ¨λ“  치즈 λͺ©λ‘μ„ λ°˜ν™˜ν•œλ‹€.
 *      단, μž¬κ³ κ°€ ν•˜λ‚˜λ„ μ—†λ‹€λ©΄ null을 λ°˜ν™˜ν•œλ‹€.
 */
public List<Cheese> getCheeses() {
    return cheeseInStock.isEmpty() ? null
            : new ArrayList<>(cheeseInStock);
}

 

  μ»¬λ ‰μ…˜μ΄λ‚˜ λ°°μ—΄ 같은 μ»¨ν…Œμ΄λ„ˆ(container)κ°€ λΉ„μ—ˆμ„ λ•Œ null을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œλ©΄ ν•­μ‹œ μ•„λž˜μ™€ 같은 λ°©μ–΄ μ½”λ“œλ₯Ό λ„£μ–΄μ€˜μ•Ό ν•œλ‹€.

List<Cheese> cheeses = shop.getCheese();
if(cheeses != null && cheeses.contains(Cheese.STILTON))
    System.out.println("μ°Ύμ•˜λ‹€ μŠ€ν‹Έν„΄");

  λ³΅μž‘ν•˜λ‹€. 그리고 λ§Œμ•½ null을 μ²˜λ¦¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, NullPointException이 λ°œμƒν•  수 μžˆλ‹€. null을 λ°˜ν™˜ν•˜λŠ” APIλŠ” μ‚¬μš©ν•˜κΈ° μ–΄λ ΅κ³  였λ₯˜ 처리 μ½”λ“œλ„ λŠ˜μ–΄λ‚œλ‹€.

 

  λ•Œλ‘œλŠ” 빈 μ»¨ν…Œμ΄λ„ˆλ₯Ό ν• λ‹Ήν•˜λŠ” 데도 λΉ„μš©μ΄ λ“œλ‹ˆ null을 λ°˜ν™˜ν•˜λŠ” μͺ½μ΄ λ‚«λ‹€λŠ” μ£Όμž₯도 μžˆλ‹€. ν•˜μ§€λ§Œ, μ„±λŠ₯ 뢄석 κ²°κ³Ό 이 할당이 μ„±λŠ₯ μ €ν•˜μ˜ 주범이라고 ν™•μΈλ˜μ§€ μ•ŠλŠ” ν•œ, 이 μ •λ„μ˜ μ„±λŠ₯ μ°¨μ΄λŠ” μ‹ κ²½ μ“Έ μˆ˜μ€€μ΄ λͺ» λœλ‹€. λ˜ν•œ, λΉˆ μ»¬λ ‰μ…˜κ³Ό λ°°μ—΄μ€ κ΅³μ΄ μƒˆλ‘œ ν• λ‹Ήν•˜μ§€ μ•Šκ³ λ„ λ°˜ν™˜ν•  μˆ˜ μžˆλ‹€.

 

πŸ“™ 2. null을 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” 경우

  μœ„μ˜ λ©”μ„œλ“œλŠ” μ•„λž˜μ™€ 같이 λ°”κΏ€ 수 μžˆλ‹€.

// 빈 μ»¬λ ‰μ…˜ λ°˜ν™˜
public List<Cheese> getCheeses() {
    return new ArrayList<>(cheeseInStock);
}

  빈 μ»¬λ ‰μ…˜ 할당이 μ„±λŠ₯을 λˆˆμ— λ„κ²Œ λ–¨μ–΄λœ¨λ¦°λ‹€λ©΄ μ•„λž˜μ™€ 같이 λ°”κΏ€ 수 μžˆλ‹€.

// 빈 μ»¬λ ‰μ…˜μ΄ 맀번 μƒˆλ‘œ ν• λ‹Ήλ˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” 것
public List<Cheese> getCheeses() {
    return cheeseInStock.isEmpty() ? Collections.emptyList()
            : new ArrayList<>(cheeseInStock);
}

 

  배열도 λ§ˆμ°¬κ°€μ§€λ‹€. 

// 길이가 0일 μˆ˜λ„ μžˆλŠ” 배열을 λ°˜ν™˜
public Cheese[] getCheeses() {
    return cheesesInStock.toArray(new Cheese[0]);
}
// 빈 배열을 맀번 μƒˆλ‘œ ν• λ‹Ήν•˜μ§€ μ•Šκ³  λ°˜ν™˜ν•˜λŠ” 방법
private static final Cheese[] EMPTY_CHEESE_ARRAY = new Cheese[0];

public Cheese[] getCheeses() {
    return cheesesInStock.toArray(EMPTY_CHEESE_ARRAY);
}

 

 

ν•΄λ‹Ή 글은 Joshua Bloch λ‹˜μ˜ 'Effective Java 3/E'λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.