Java

리스트처리(for -> forEach), switch (enum), Null(Optional)

99duuk 2024. 12. 25. 15:44

1. 리스트 처리 - IndexOutOfBoundsException 방지

잘못된 코드 (전통적인 for문 사용)

import java.util.List;

public class IndexErrorExample {
    public static void main(String[] args) {
        List<String> names = List.of("Alice", "Bob", "Charlie");

        for (int i = 0; i <= names.size(); i++) { // 실수로 'i <= names.size()' 사용
            System.out.println(names.get(i));    // IndexOutOfBoundsException 발생
        }
    }
}

 

  • i <= names.size()와 같이 잘못된 조건으로 인해 IndexOutOfBoundsException이 발생할 수 있음
  • 코드 작성자가 실수하기 쉬움

좋은 코드 (Stream forEach 사용)

 

import java.util.List;

public class SafeIterationExample {
    public static void main(String[] args) {
        List<String> names = List.of("Alice", "Bob", "Charlie");

        names.forEach(name -> System.out.println(name)); // 안전한 순회
    }
}

 

  • 인덱스 관련 로직이 없으므로 실수로 인한 예외 발생 가능성이 없음
  • 데이터의 크기와 관계없이 안전하게 동작

 


예제 2: switch문에서 default로 빠지는 문제 방지

잘못된 코드 (switch에서 잘못된 값 처리)

enum Color {
    RED, GREEN, BLUE
}

public class SwitchErrorExample {
    public static void main(String[] args) {
        Color color = Color.RED;

        switch (color) {
            case RED:
                System.out.println("Color is RED");
                break;
            case GREEN:
                System.out.println("Color is GREEN");
                break;
            // BLUE에 대한 처리가 빠져 있음 -> default로 빠지거나 예외 발생 가능
            default:
                throw new IllegalStateException("Unexpected value: " + color);
        }
    }
}

 

  • enum의 모든 값을 처리하지 않으면 default로 빠질 가능성이 생김
  • 새로운 enum 값이 추가될 경우, 모든 switch문에서 누락될 가능성이 있음

 


좋은 코드 (모든 enum 값을 명시적으로 처리)

enum Color {
    RED, GREEN, BLUE
}

public class SafeSwitchExample {
    public static void main(String[] args) {
        Color color = Color.RED;

        switch (color) {
            case RED:
                System.out.println("Color is RED");
                break;
            case GREEN:
                System.out.println("Color is GREEN");
                break;
            case BLUE:
                System.out.println("Color is BLUE");
                break;
        }
    }
}

 

  • 모든 enum 값을 명시적으로 처리하여 누락 가능성을 제거
  • 새로운 값이 추가되면 컴파일러가 경고를 제공하므로 수정이 강제

 


예제 3: 널 체크 방지

잘못된 코드 (null 체크 없이 메서드 호출)

public class NullPointerErrorExample {
    public static void main(String[] args) {
        String name = null;

        // NullPointerException 발생 가능
        System.out.println(name.toUpperCase());
    }
}

 

  • name이 null일 경우 NullPointerException이 발생
  • 런타임에 예외를 발생시키지 않으려면 사전 체크가 필요

 


좋은 코드 (Optional 사용)

import java.util.Optional;

public class SafeNullHandlingExample {
    public static void main(String[] args) {
        Optional<String> name = Optional.ofNullable(null);

        // NullPointerException 방지
        System.out.println(name.map(String::toUpperCase).orElse("DEFAULT"));
    }
}

 

  • Optional을 사용하여 null을 안전하게 처리
  • 명시적으로 null 값을 대체하는 로직을 작성하여 예외를 방지

 


 

'Java' 카테고리의 다른 글

LSP  (0) 2024.12.29
추상화....인터페이스...  (0) 2024.12.24
클라이언트 ip 가져오기  (0) 2024.12.24
추상 클래스 / 인터페이스  (0) 2024.12.20
캡슐화  (0) 2024.12.17