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 |