✅ 오전 수업: 예외 처리(Exception Handling)
try {
// 예외 발생 가능 코드
} catch (예외클래스 e) {
// 예외 처리 코드
}
printLength(null);
// → try-catch로 안전하게 처리
try {
Class.forName("java.lang.String2");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
- 다양한 예외 유형을 별도로 처리하거나 |로 통합 처리 가능
catch (ArrayIndexOutOfBoundsException e) { ... }
catch (NumberFormatException e) { ... }
// 또는
catch (NullPointerException | NumberFormatException e) { ... }
public static void findClass(String str) throws ClassNotFoundException
✅ 오전 수업: 사용자 정의 예외 활용
- 출금 시 잔고 부족하면 InsufficientResourcesException 발생
if (balance < money)
throw new InsufficientResourcesException("잔고 부족");
✅ 오전 수업: equals() 메서드 재정의
@Override
public boolean equals(Object obj) {
if (obj instanceof Member target)
return id.equals(target.id);
return false;
}
- ==은 참조 비교, equals()는 논리적 비교
✅ 오후 수업: hashCode()와 equals()
- equals()로 학번(no)과 이름(name) 비교
- hashCode()로 학번 + 이름 기반 해시코드 생성
@Override
public int hashCode() {
return no + name.hashCode();
}
- 두 객체의 해시코드가 같고, equals()도 true면 동등 객체
📌 핵심 규칙
- hashCode()가 다르면 → 무조건 다른 객체
- hashCode()가 같으면 → equals()로 비교해서 중복 여부 판단
📌 예시 결과
HashSet hashSet = new HashSet();
hashSet.add(new Student(1, "홍길동")); // 저장됨
hashSet.add(new Student(1, "홍길동")); // 중복 → 저장 안 됨
hashSet.add(new Student(2, "홍길동")); // 학번 다름 → 저장됨
🧠 20일차 전체 핵심 요약
항목 |
내용 |
try-catch |
예외 발생 시 정상 흐름 유지 |
throws |
예외를 호출자에게 전가 |
사용자 정의 예외 |
직접 예외 클래스 생성 가능 |
equals() 재정의 |
객체의 논리적 동등성 비교 |
hashCode() |
해시 기반 자료구조의 비교 기준 |
HashSet |
hashCode() + equals()로 중복 판단 |