[혼공자] 6주차_Java 에외 처리와 기본 API 클래스 정리

경운·2025년 8월 15일
0

혼공자

목록 보기
6/7
post-thumbnail


📚 6주차 미션 정리

🔖 기본 미션 (필수)

P.486 10-2 확인 문제 2번 문제 풀고 과정 설명하기

  • throws에 대한 설명으로 틀린 것은 무엇인가?
  1. 생성자나 메소드의 선언 끝 부분에 사용되어 내부에서 발생된 예외를 떠넘긴다.
  2. throws 블록 뒤에는 떠넘겨야 할 예외를 쉼표(,)로 구분해서 기술한다.
  3. 모든 예외를 떠넘기기 위해 간단하게 throws Exception으로 작성할 수 있다.
  4. 새로운 예외를 발생시키기 위해 사용된다.
  • 해설
    throws메서드나 생성자 선언부에서 사용, 내부에서 발생할 수 있는 예외를 호출한 쪽으로 전달하는 역할
    4번이 틀린 말이다 새로운 예외를 만드는 것이 아닌 발생할 수 있는 예외를 전달하는 것
  • throws예외 전달(떠넘기기) (선언부에서 사용)
  • throw예외 발생시키기 (메서드나 블록 내부에서 사용)

🔖 추가 미션 (선택)

java.lang 패키지에 속하는 주요 클래스와 용도를 정리해서 포스팅하기

  • 클래스
  1. Object → 자바 클래스의 최상위 클래스
  2. System
    데이터를 입력할 때 (System.in)
    데이터를 출력할 때 (System.out)
  3. Class → 클래스를 메모리로 로딩할 때
  4. String → 문자열을 저장하고 여러 가지 정보를 얻을 때
  5. Wrapper → 문자열을 기본 타입으로 변환할 때
  6. Math → 수학 함수를 사용할 때

자세한 내용은 아래에 있습니다.


📌 Chap10 내용 정리 | 예외 처리

일반 예외

  • 자바 소스 코드들을 컴파일 과정에서 예외 처리 코드 있는지 검사
  • 컴파일러가 강제로 예외 처리 (try-catch 또는 throws 요구)
  • 예외 클래스는 java.lang.Exception 클래스 상속
  • java.lang.ClassNotFoundException, java.lang.InterruptedException 등등

실행 예외

  • java.lang.RuntimeException 을 상속
  • 소스 코드가 실행 중에만 발생 → 실행 전에는 알 수 없음 / 즉, 개발자의 경험에 의해서 예외 처리 코드를 작성해야 함

1. NullPointerException

  • 매우 빈번하게 발생하는 예외
String data = null;
System.out.println(data.tostring());

객체 참조가 없는 상태
즉, null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용할 때 발생

2. ArrayIndexOutOfBoundsException

  • 배열에서 인덱스 범위를 초과할 때 발생
int[] arr = new int[3]; // 인덱스 0~2 사용 가능
int value = arr[3];

인덱스를 0~2까지만 사용이 가능한데 3을 사용해서 발생

3. NumberFormatException

  • 문자열로 되어 있는 데이터를 숫자로 변경할 때 발생
String data1 = "100";
String data2 = "a100";

int A = Integer.parseInt(data1);
int B = Integer.parseInt(data2);

A 변수는 해당 문자열을 숫자로 변환이 가능하지만
B 변수는 숫자로 변환이 불가능 하기 때문에 발생

4. ClassCastException

  • 자바 객체의 두 개의 타입 간에 다형성이 없는 경우, 객체의 타입이 다르기 때문에 발생
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

Animal a = new Dog();
Cat c = (Cat) a; // ClassCastException 발생

Animal a = new Dog(); : a 변수의 타입은 Animal 이지만, 실제로 가리키는 객체는 Dog
Cat c = (Cat) a; : a 가 참조하는 실제 객체는 Dog인데, Cat 타입으로 변환하기 때문에 발생


예외 처리 코드

  • try-catch-finally 사용

  • 정상 실행 되는 코드

try {
	// 예외 발생 가능 코드
} catch(예외 클래스 e) {
	// 예외 처리
} finally {
	// 항상 실행
}

tryfinally 순으로 실행

  • 예외가 발생되었을 때 코드
try {
	// 예외 발생 가능 코드
} catch(예외 클래스 e) {
	// 예외 처리
} finally {
	// 항상 실행
}

trycatchfinally 순으로 실행

  • finally 는 생략 가능, 예외 발생 여부 상관 없이 항상 실행

다중 catch

try {
    int[] arr = new int[3];
    arr[5] = 10; // ArrayIndexOutOfBoundsException 발생
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("배열 인덱스 오류");
} catch (NullPointerException e) {
    System.out.println("널 참조 오류");
} catch (Exception e) {
    System.out.println("기타 예외");
}
  • Exception 클래스는 모든 예외 클래스의 상위 클래스
  • ArrayIndexOutOfBoundsExceptionNullPointerExceptionException 클래스의 하위 클래스

상위 클래스 타입인 Exception을 제일 위에 적었을 경우 모든 예외를 처리하기 떄문에, 하위 예외 클래스가 실행이 안됨

다중 catch문을 작성할 때는 순서가 매우 중요


예외 떠넘기기

  • 메서드에서 발생한 예외를 직접 처리하지 않고 호출한 쪽으로 전달
public class Test {
    public static void main(String[] args) {
        try {
            accessArray();
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("배열 인덱스 범위 초과 예외 처리");
        }
    }

    static void accessArray() throws ArrayIndexOutOfBoundsException {
        int[] arr = new int[3];
        System.out.println(arr[5]); // 인덱스 범위 초과 → 예외 발생
    }
}

진짜 예외 처리 정처기 단골 문제임,, 매번 1문제씩 나옴,,


📌 Chap11 내용 정리 | 기본 API 클래스

Object 클래스

1. 객체 비교(equals())

  • 모든 객체가 매개값으로 대입 가능 = 모든 객체는 Object 타입으로 자동 타입 변환이 되기 때문
  • equals() 메소드는 비교 연산자인 ==과 동일한 결과 리턴

보통 (변수.equals(변수)) 사용

2. 객체 해시코드(hashCode())

  • 객체를 식별하는 하나의 정수값
  • 논리적 동등 비교시 hashCode()를 오버라이딩 해야 함
    • 해시코드 값이 다르면 다른 객체, 같으면 equals() 메소드로 다시 비교

3. 객체 문자 정보(toString())

  • 객체의 문자 정보를 리턴 → toString() 메소드는 클래스이름@16진수해시코드로 구성

System 클래스

1. 프로그램 종료(exit())

  • 현재 실행하고 있는 프로세스를 강제 종료

2. 현재 시각 읽기(currentTimeMillis(), nanoTime())

  • long 값을 리턴

Class 클래스

1. Class 객체 얻기(getClass(), forName())

  • 클래스로부터 얻는 방법
  1. Class clazz = 클래스이름.class
  2. Class clazz = Class(forName("패키지...클래스이름")
  • 객체로부터 얻는 방법
    1, Class clazz = 참조변수.getClass();

String 클래스

리턴타입메소드 이름설명
charcharAt()특정 위치의 문자를 리턴
booleanequals()두 문자열을 비교
bytegetBytes()bytes[]로 리턴
byte주어진 문자셋으로 인코딩한 byte[]로 리턴
intindex()문자열 내에서 주어진 문자열의 위치를 리턴
intlength()총 문자의 수를 리턴
stringreplace(A, b)A 부분을 b로 대치한 새로운 문자열을 리턴
stringsubstring(A)A 위치에서 끝까지 잘라낸 새로운 문자열을 리턴
stringsubstring(A, B)A 위치에서 B 전까지 잘라낸 새로운 문자열을 리턴
stringtoLowerCase()알파벳 소문자로 변환한 새로운 문자열을 리턴
stringtoUpperCase()알파벳 대문자로 변환한 새로운 문자열을 리턴
stringtrim()앞뒤 공백을 제거한 새로운 문자열을 리턴
stringvalue() / valueOf()기본 타입 값을 문자열로 리턴

개인적으로 String 클래스가 제일 중요한 듯


Wrapper(포장) 클래스

  • 기본 타입 값은 외부에서 변경 불가, 새로운 포장 객체를 만들어서 변경
  • 대부분 기본 타입에서 첫글자만 대문자
  • 박싱 : 기본 타입 → 래퍼 클래스
  • 언박싱 : 패러 클래스 → 기본 타입

언박싱은 코테 문제 풀면서 자주 사용 했다
왜? → 코테에서는 입력 처리 속도를 높이기 위해 BufferedReader 요새 연습하는 중이다 ㅎㅎ


Math 클래스

  • 수학 계산에 사용할 수 있는 메소드 제공
메소드설명
abs()절대값
ceil()올림값
floor()버림값
max()최대값
min()최소값
random()랜덤값
rint()가까운 정수의 실수값
round()반올림값

0개의 댓글