주니어 자바 개발자를 위한 질문(Exception Class)

박재언·2023년 11월 27일
0
post-thumbnail

throw와 throws의 차이는 무엇인가요?

  • thorw는 개발자가 지정한 상황에 해당되면 강제로 예외를 발생시키며 작성한 로직에 따라 발생된다. 개발자의 의도에 따라 작성됨으로 원치 않는 동작을 방지하기 위해 사용된다.
    thorws는 메서드에서 처리해야할 하나 이상의 예외를 메서드를 호출한 곳으로 던져버린다. 따라서 예외를 한곳으로 모아서 한꺼번에 예외 처리를 할 때 주로 사용된다.

final, finally, finalize의 차이는 무엇인가요?

  • final은 부모 클래스의 메서드에 final 키워드를 명시하여 자식 클래스의 추가적인 재정의를 막는 의도로 사용되며 변수에 사용 시 상수를 선언하는 역할을 한다.
    finally는 try-catch오 함께 사용되며 예외 발생 유무와 상관없이 무조건 수행되며 데이터 베이스 등을 사용한 후 닫는 기능과 같이 항상 수행해야 할 필요가 있는 경우 사용된다.
    finalize는 object 클래스에 포함된 메서드로 JVM이 메모리 누수를 방지하기 위해 실행하는 Garbarge Colection(GC)이 수행되기 전에 사용되지 않는 자원을 정리 하는 종료자 메서드 이다.
  • finalize는 java 9 부터 사용되지 않는다.

try-catch-finally에서 생략할 수 있는 부분이 무엇인가요?

  • try-catch-finally중에 catch나 finally 중 하나를 생략할 수 있다. 둘 다 생략은 안된다.

  • try-catch

public class Exception {
	public static void main(String[] args) {
		try {
			System.out.println("Exception STEP");			
			throw new Exception();	
			
		} catch (Exception e) {
			System.out.println("Exception STEP 2");
		}
	}
}
  • try finally
public class Exception {
	public static void main(String[] args) {
		try {
			System.out.println("Exception STEP");	
		} finally {
			System.out.println("Exception STEP 2);				
		}
	}
}

위의 두 코드의 실행 결과는 같다.

catch가 반환되면 finally가 실행되나요?

  • finally는 예외 발생여부와 상관없이 실행되어야 할 코드가 있을 경우 작성한다.
    따라서 finally가 작성되있다면 catch의 반환 여부와 관계 없이 finally는 실행된다.

exception 클래스의 예시를 말해주세요.

  • 예외에는 일반예외, 실행예외로 나뉜다.
    일반예외란 Checked Exception라고도 하며 자바 소스를 컴파일하는 과정에서 예외 처리가 필요한지 검사하는 것으로 해당 예외는 개발자가 반드시 처리해야 한다.
    일반 예외는 Java.lang.Exception 클래스를 상속받는다.
  • 실행 예외는 Unchecked Exception라고도 하며 컴파일하는 과정에서 예외 처리 코드를 검사하지 않는 예외를 말하며 예외처리가 필수는 아니다.
    RunTimeException을 상속받는 클래스들이다.
    따라서 실행 예외는 자바 컴파일러가 체크하지 않기 때문에 개발자의 경험에 의해서 코드를 삽입해야한다.

RuntimeException , 즉 실행 예외의 예시에 대하여 나열하자면

예외예외 발생 상황
IllegalStateException부적절한 때에 메서드가 호출된 경우
IllegalArgumentException부적절한 인수를 메서드에 전달 했을 때
IllegalMonitorStateException스레드가 스레드의 속하지 않는 객체를 모니터 하려고 할 때
NegativeArraySizeException배열의 크기가 음수인 경우
ArrayStoreException배열 유형이 허락하지 않는 객체를 배열에 저장하려 할 때
ArrayIndexOutOfBoundsException배열에서 인덱스 범위를 초과하여 사용할 때
ArithmeticException숫자를 0으로 나누는 등의 불가능한 산술연산을 수행할 때
NumberFormatException숫자 형식이 아닌 데이터를 숫자로 변경하려고 했을 때
ClassCastException클래스에 대한 불가능한 타입변환을 시도하려고 했을 때
NullPointerException객체 참조가 없는 상태일 때
OutOfMemoryException사용 가능한 메모리가 없는 경우


자주 접하는 일반 예외 (Other Exception)의 종류는 이 정도 있다.

예외예외 발생 상황
IOException입/출력 작업 과정에서 문제가 발생했을 때
SQLException데이터베이스 연동 과정에서 문제가 발생했을 때
ClassNotFoundException존재하지 않는 클래스를 사용하려고 했을 때

질문 출처: https://medium.com/@xjpp22/top-100-java-interview-questions-for-1-to-3-years-experienced-programmers-63ad74069cb6

0개의 댓글