728x90

에러(error)란?

비정상 종료 상황 발생했다 = 에러 = 오류

코드 수정으로 해결할 수 있는 오류 = 예외

코드 수정으로 해결할 수 있는 오류를 예외라고 부름

  • 예외 발생 시 ‘예외처리’를 통해 해결

 

에러 종류 3가지

1)컴파일(Compile) 에러

2)런파일 에러

3)시스템 에러

 

1)컴파일 에러 : 문법 에러

ex)이클립스 빨간줄

해결법 : 코드 수정

 

2)런파일 에러 : 수행 중 에러

ex)배열 범위 초과

해결법 : 코드 수정

 

3)시스템 에러 : 컴퓨터 자체가 오작동

해결법 : 컴퓨터 CS적으로 해결해야함.

ex)컴퓨터 껐다 켰다나 하드웨어 문제 등 전반적인 것들

 

 

예외도 클래스로 자바 구현되어있음

ex) NumberFormatException, NullPointerException

 

예외(Exception)도 클래스라 object부터 상속이 쭉 내려져옴

 

에러의 최상위 Throwable

Throwable 위에는 모든 자바의 객체의 최상위 클래스인 Object만 존재

Throwable은 Exception과 Error 둘로 나뉘며, 예외Exception가 포커스

728x90
반응형
728x90

<예외의 상속>

예외(Exception)도 클래스라 object부터 상속이 쭉 내려져옴

예외도 클래스로 자바 구현되어있음

ex) NumberFormatException, NullPointerException

 

Exception은 모든 예외 클래스의 최상위 클래스

 

<예외Exception 분류>

크게 두가지로 분류하며, 이외에도 다양한 subclass가 많이 있다

1)checked Exception

2)unchecked Exception

  Checked Exception : 예외처리가 필수
  Unchecked Exception : 예외처리 선택

 Unchecked Exception의 조상 Runtime Exception
 Checked Exception의 조상은 Exception

예외 처리할 필요가 없게 extends를 Runtime Exception로 변경

 

<예외처리 방법>

  1. throws
  2. try ~ catch
  3. finally

 

※ e.printStackTrace()  : 발생한 에러에 대한 정보를 출력해주는 메소드

에러가 뭐 때문에 어디서 왜 났는지 알려줌

일반적으로 .printStackTrace() 많이씀

1) throws

예외를 위임

나를 호출한 메소드에게 예외를 던져주는 것

예외를 내가 처리하지 않고 넘겨주는 것

ex) close()가 close()를 선언한 곳에 예외를 던지는 것

호출한 곳 예 : sc.close();

 

2) try ~ catch

예외를 직접 처리한다

익셉션 오류가 뜨는건 처리하라고 받은 예외를 받기만하고 처리하지 않아서 나는 것

try : 익셉션이 발생할 수 있는 코드를 기술하는 부분. 예외없는 코드도 들어갈 수 있음

catch : 실제로 발생한 예외에 대해서 어떻게 처리할지 기술하는 부분

try    
    Exception이 발생할 수 있는 코드를 기술하는 부분
catch (예외종류 변수선언)
  	실제로 발생한 예외에 대해서 어떻게 처리할지 기술하는 부분

예시코드

ThrowsTest tt = new ThrowsTest();
	try {
		tt.methodA();
	} catch (IOException e) { // (예외종류, 레퍼런스변수 선언 : e)
		e.printStrackTrace();
	} finally {
		System.out.println("종료");
	}

 

3) finally

예외(Exception) 발생 여부와 상관없이 무조건 실행되는 코드 작성

 


 

<사용자 정의 예외(Exception)>

자바에서 만들어놓은 클래스 말고

내가 만든 클래스(사용자 정의 클래스)처럼 내가 만든 예외를 사용자 정의 예외라고 부른다

 

예외를 상속 받는다

public class MyException extends Exception {

extends Exception

여기서 부모는 자바 안에 있는 Exception class

 

사용자 정의 예외 : 꼭 작성해야할 것들

1)기본생성자

2)스트링 하나만 받는 매개변수 생성자

 

※ 매개변수 있는 생성자가 있어야하는 이유 ※

에러 오른쪽에 에러에 대한 상세 설명(ex:곧 수업 끝나는 에러)을 넣어주기 위해서 String타입으로 매개변수 있는 생성자가 필요한 것

어떤 에러인지 알려주기 싫으면 매개변수 안넣어줘도 된다

728x90
반응형
728x90

 

기능이 실패했을 경우 예외처리

 <Checked Exception & Unchecked Exception>

  Checked Exception : 예외처리가 필수
  Unchecked Exception : 예외처리 선택

 Unchecked Exception의 조상 Runtime Exception
 Checked Exception의 조상은 Exception

예외 처리할 필요가 없게 extends를 Runtime Exception로 변경

package com.kh.Spring.member.model.exception;

public class MemberException extends RuntimeException {

	// Checked Exception & Unchecked Exception
	// 		Checked Exception : 예외처리가 필수
	// 		Unchecked Exception : 예외처리 선택
	
	// Unchecked Exception의 조상 Runtime Exception
	// Checked Exception의 조상은 Exception
	
	// 예외 처리할 필요가 없게 extends를 Runtime Exception로 변경
	
	public MemberException() {}
	public MemberException(String msg) {
		super(msg);
	}
	
}
728x90
반응형
728x90

Filter

이클립스 new에서 Filter 항목 클릭하면 자동생성됨

인코딩 코드 추가: request.setCharacterEncoding("UTF-8");

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

		request.setCharacterEncoding("UTF-8");
		
		chain.doFilter(request, response);
	}

 

추가로 필터는 Annotation이 @WebFilter이다

 

Exception

1) 클래스생성

2) 클래스 기본생성자 생성

public MemberException() {}

3) 예외처리해줄 메소드 생성 + super()

	public MemberException(String msg) {
			super (msg);
	}

 

 

Filter

package common;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/**
 * Servlet Filter implementation class CommonFilter
 */
@WebFilter("/CommonFilter")
public class CommonFilter implements Filter {

    /**
     * Default constructor. 
     */
    public CommonFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	
	
	
	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

		request.setCharacterEncoding("UTF-8");
		
		chain.doFilter(request, response);
	}

	
	
	
	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

 

 

 

Exception

package member.model.vo;

public class MemberException extends Exception {
	public MemberException() {}
	public MemberException(String msg) {
			super (msg);
	}
}

 

728x90
반응형
728x90

 

한바퀴 도는 메소드 먼저 하나 만들었다

한바퀴 돌기 좋은 코드 로직인 것 같다

이제 예외(Exception)를 강제 발생시켜 예외처리 연습을 해보려한다

 

IOException 임포트 후에 예외 강제 발생 코드인 throw를 넣고 런시키니 뜬 에러메세지

Unhandled exception type IOException 

Unreachable code

 

Unhandled exception type IOException는  IOException을 예외처리 못했다는 의미이고

Unreachable code는 예외가 발생되면 발생된 곳 이후 코드들은 전부 작동하지 않기에 닿지않는 코드라고 에러가 뜨는 것이다. println 결력도 call_3메소드는 출력되지 않고 2까지만 되고 있다

이제 발생한 예외를 try catch문을 써서 직접 처리 해본다

 

 

코드 call_1 off까지 끝까지 잘 작동한다.

아래 빨간줄은 에러처럼 보이지만 catch문 안에 e.printStackTrace();에서 .printStackTrace()이 에러 정보를 보여주기 때문에 나오는 것이다. 에러메세지가 아니니 걱정하지 않아도 된다.

 

 

 .printStackTrace()지워보면 빨간줄이 전부 사라진다.

 

기능클래스의 메소드 call_3에서 직접 예외처리 했지만,

런파일에서 pe4.call_3를 try문 안에 넣고 해도 된다

728x90
반응형

+ Recent posts