35일 차 - 체크, 언체크 예외(Checked,Unchecked Exception), 런타임 예외(Runtime Exception), throws 예외 처리 (23.02.14)

yvonne·2023년 2월 14일
0

📂Java

목록 보기
35/51

1. Checked, Unchecked Exception 에 대하여 설명하시오.

실행 오류예시 경우제어
시스템 오류(error)동적 메모리가 없는 경우
스택 메모리의 오버 플로우
프로그램에서 제어 불가능
예외(exception)읽을 파일이 존재하지 않는 경우
데이터 전송 중 네트워크 연결이 안된 경우
배열 값을 출력하는데 배열의 요소가 없는 경우 등
프로그램에서 제어 가능
  • 에러(Error)는 JVM 실행에 문제가 생긴 것이므로 개발자가 대처할 방법이 없다.
  • 예외(Exception)는 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다.



📌 프로그램 에러 - 오류

  • 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 결과를 초래하는 원인
  • 발생시점에 따라 컴파일 에러(compile-time error)와 런타임 에러(runtime error)로 분류
에러 종류설명오류
컴파일 에러(compile-time error)프로그램 코드 작성 중 컴파일 할 때 발생하는 에러개발 환경에서 대부분의 원인 확인 가능
런타임 에러(runtime error)실행 중인 프로그램이 의도하지 않은 동작(Bug)을 하거나 프로그램이 중지예측하기 어려운 경우가 많으며, 프로그램이 비정상 종료
  • 이 외에도 논리적 에러(logical error)가 있는데, 컴파일도 잘되고 실행도 잘되지만 의도한 것과 다르게 동작하는 것을 말한다.


📌 프로그램 예외

  • 💡체크 예외(Check Exception)💡: RuntimeExcption 클래스를 상속받지 않은 예외 클래스들을 말한다.
  • 복구 가능성이 있는 예외이므로 반드시 예외를 처리하는 코드를 함께 작성해야 함
  • catch문으로 잡거나 throw를 통해 메소드 밖으로 던질 수 있으며 예외를 처리하지 않으면 컴파일 에러가 발생한다.
  • 체크 예외는 개발자가 실수로 예외 처리를 누락하지 않도록 컴파일러가 도와준다. 하지만 개발자가 모든 체크 예외를 처리해주어야 하므로 번거로우며, 신경쓰지 않고 싶은 예외까지 처리해야 한다는 단점이 있다.
  • ex) IOException, SQLException 등
  • 💡언체크 예외(Uncheck Exception)💡: RuntimeException 클래스를 상속받는 예외 클래스들은 복구 가능성이 없는 예외들이므로 컴파일러가 예외처리를 강제하지 않는다.
  • 언체크 예외는 Error와 마찬가지로 에러를 처리하지 않아도 컴파일 에러가 발생하지 않는다.
  • ex) RuntimeException - NullPointerException, ArithmeticException 등

<출처 - https://mangkyu.tistory.com/152 https://blog.naver.com/goaehfkwl/222842870820>




2. throws 에 대하여 설명하시오.

  • throws: 예외 처리를 미루는 것
  • 예외에 해당하는 메서드에서 예외 처리를 하지 않고 미뤄뒀다가 이후 메서드를 호출하여 사용하는 부분에서 미뤄뒀던 예외를 처리하는 것을 의미함
public static void md2() throws IOException {...}
  • 메소드 내에서 문장을 실행하는 과정에서 해당 에러(IOException)가 발생할 수 있다는 의미
  • 만약 함수에서 예외 상황의 문제가 생기게 되면 throws Exception을 자기자신을 호출한 함수한테 던진다. (예외 처리를 떠넘긴다.) → 계속 호출한 곳으로 던져서 결국 try catch의 catch에서 Exception 에서 받게 된다. → try catch가 없는 경우 메인 메소드까지 넘어가서 메인 메소드가 최종적으로 JVM으로 넘기는 것도 가능하다. (하지만 그 전에 try catch로 예외 처리를 직접 하는 것이 좋다.)
public void simpleWrite() throws IOException, IndexOutofBoundsException {
	....
}
  • 둘 이상의 예외를 넘길 때는 ,(콤마)로 구분한다.




3. 주소가 출력되는 이유를 설명하시오.

class A{

}

public class Test {
	public static void main(String[] args) {
		A a = new A();
		System.out.println(a); // String s = String.valueOf(x); -> s가 주소 뿌림
	}
}

① 모든 클래스는 Object 클래스를 상속하기 때문에 Test 클래스도 Object를 상속한다.

② Object 클래스에는 문자열을 반환하는 toString 함수가 있는데 class Test에는 toString함수가 Override 되어있지 않아서 a가 가리키는 객체의 주소값(가짜)를 출력하게 된다.

③ 따라서, Test 클래스에 toStirng() 함수를 생성하여 Object 클래스의 toString 함수를 Override하면 Test 클래스의 toString 함수가 호출된다.

*println()함수가 객체 이름을 매개 변수로 받아서 toString()을 호출할 수 있도록 overload되어 있기 때문에 
 a.toString을 붙이지 않아도 위의 문제와 같이 원하는 문자열이 출력되는 결과를 얻을 수 있다.




4. 다음 조건을 만족하도록 클래스 Person과 Student를 작성하시오.

  • 클래스 Person
  • 필드 : 이름, 나이, 주소 선언
  • 클래스 Student
  • 필드 : 학교명, 학과, 학번, 8개 평균평점을 저장할 배열로 선언
  • 생성자 : 학교명, 학과, 학번 지정
  • 메소드 average() : 8개 학기 평균평점의 평균을 반환
  • 클래스 Person과 Student
  • 프로그램 테스트 프로그램의 결과 : 8개 학기의 평균평점은 표준입력으로 받도록한다.

이름 : 김다정
나이 : 20

주소 : 서울시 관악구
학교 : 동양서울대학교
학과 : 전산정보학과
학번 : 20132222


8학기 학점을 순서대로 입력하세요

1학기 학점 → 3.37
2학기 학점 → 3.89
3학기 학점 → 4.35
4학기 학점 → 3.76
5학기 학점 → 3.89
6학기 학점 → 4.26
7학기 학점 → 4.89
8학기 학점 → 3.89


8학기 총 평균 평점은 4.0375점입니다.

profile
개발 연습장

0개의 댓글