국비

[ 20일차 92~102 ] 수업 정리 - 자바

코딩하는냥이 2025. 5. 13. 15:29
반응형

✅ 오전 수업: 예외 처리(Exception Handling)

📌 1. 기본적인 예외 처리 흐름

  • 예외 발생 시 프로그램 중단 방지
try {
    // 예외 발생 가능 코드
} catch (예외클래스 e) {
    // 예외 처리 코드
}

📌 2. NullPointerException 처리

printLength(null);
// → try-catch로 안전하게 처리

📌 3. Class.forName() 사용 시 ClassNotFoundException 처리

try {
    Class.forName("java.lang.String2");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

📌 4. 다중 catch & 다형성 처리

  • 다양한 예외 유형을 별도로 처리하거나 |로 통합 처리 가능
catch (ArrayIndexOutOfBoundsException e) { ... }
catch (NumberFormatException e) { ... }
// 또는
catch (NullPointerException | NumberFormatException e) { ... }

📌 5. throws로 예외 위임

public static void findClass(String str) throws ClassNotFoundException

✅ 오전 수업: 사용자 정의 예외 활용

📌 Account 클래스 예시

  • 출금 시 잔고 부족하면 InsufficientResourcesException 발생
if (balance < money)
    throw new InsufficientResourcesException("잔고 부족");

✅ 오전 수업: equals() 메서드 재정의

📌 Member 클래스 예제

@Override
public boolean equals(Object obj) {
    if (obj instanceof Member target)
        return id.equals(target.id);
    return false;
}
  • ==은 참조 비교, equals()는 논리적 비교

✅ 오후 수업: hashCode()와 equals()

📌 Student 클래스

  • equals()로 학번(no)과 이름(name) 비교
  • hashCode()로 학번 + 이름 기반 해시코드 생성
@Override
public int hashCode() {
    return no + name.hashCode();
}

📌 HashCodeExample

  • 두 객체의 해시코드가 같고, equals()도 true면 동등 객체

✅ 오후 수업: HashSet 중복 판단 실습

📌 핵심 규칙

  1. hashCode()가 다르면 → 무조건 다른 객체
  2. 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()로 중복 판단