[자바] - 예외와 예외 처리

yeom yaloo·2023년 11월 24일
0

FISA

목록 보기
5/61
post-thumbnail

예외

[예외 처리]

1. 예외 처리의 목적

  • 서비스 시 발생할 수 있는 경우에 시스템 자체의 중지가 아닌 지속적인 서비스 구동 유도를 위해서 예외 처리를 사용해야 한다.
  • 예외 처리를 하지 않으면 서비스 중지라는 큰 문제가 발생할 수 있다. 그러나 예외 처리를 잘 하는 경우엔 서비스 중지라는 최악의 상황을 면할 수 있고 또한 계속 지속적인 서비스 유지를 진행하면서 개발자가 원하는 방향으로 해당 예외를 처리해서 안정적인 서비스 제공이 가능해진다.

2. exception

  • 처리 가능한 경미한 에러를 의미한다.

2-1. exception 관계도

[예외 종류]

1. 컴파일 예외

  • 컴파일 예외
    • 처리 코드 없을 경우 컴파일 불가
    • 처리 코드 필수
      - try-catch : 필수
      - 예시 : forName(String className) throws ClassNotFoundException()
  • 컴파일 시 발생하는 에외를 컴파일 예외라고 한다.

2. 런타임 예외

  • 런타임 예외
    • 컴파일 정상, 실행시 오류
    • 배열의 인덱스 값 오류로 인해 실행 예외 발생 후 index 값만 수정후 실행
    • try-catch : 옵션
    • 값만 수정해서 해결

NullPointerException과 같이 컴파일 시 발생하는 예외는 무조건 잡아야 한다.

[예외 처리]

1. 예외 처리 문법

1-1. try ~ catch


try { 

	} catch (발생가능한예외타입 변수){
	
}

1-2. try ~ catch ~ finally

try { 

	} catch (발생가능한예외타입 변수){
	
	} finally{
 		// 100% 발생 코드블록
        주로 자원 반환용으로 사용된다.
}

1-3. 발생된 예외를 호출한 곳으로 처리 위임

접근제한자 반환타입 메소드([...]) throws ~ Exception{

}

[예외 구분 - 예외의 종류]

1. unCheckedException (비체크 예외)

  • 예외 처리 코드를 생략해도 컴파일이 되는 예외
  • RuntimeException과 그 하부 예외가 발생할 가능성이 있는 코드

2. checkedException (체크 예외)

  • 예외 처리 코드가 없으면 컴파일 시 오류가 발생한다.
  • 컴파일 에러에 해당한다
  • RuntimeException과 그 하부 예외를 제외한 모든 코드
  • NullPointerException이 대표 체크 예외에 해당한다.

[예외 처리 예시 코드]


import lombok.Builder;
import lombok.Getter;

/**
 * 상황에 따라서 개발자가 예외를 발생하고 처리하는 코드
 * 
 * 
 * id / pwd = fisa, 11값만 유효하다고 가정하자 무효한 경우엔 예외를 발생 시킨다 / 유효한 경우엔 "안녕하세요 누구님 " 출력
 * 
 */

@Builder
@Getter
class Member {

	private String id;
	private String pwd;
	
	
	// 일반 생성자를 대체해서 빌더를 사용해 객체 생성, 초기화 진행
	public static Member createMember(String id, String pwd) {

		return Member.builder()
        	.id(id)
            .pwd(pwd)
            .build();
	}

	
	//원래 데이터베이스가 연결된 경우라면 이 경우엔 데이터베이스에서 가져온 회원 정보와 비교해서 작성해야 한다. 
	
	public boolean isMemberIdPwd(Member member) {

		if (!member.getId().equals("fisa") || !member.getPwd().equals("11")) {

			throw new RuntimeException();

		}

		System.out.printf("%s님 반갑습니다.\n", member.getId());

		return true;

	}

}



public class ExceptionTest2 {


	public static void main(String[] args) {

		
		Member member = Member.createMember("fisa", "11");
		member.isMemberIdPwd(member);

		System.out.println("============================================");

		Member notFisaMember = Member.createMember("ffisa", "11");
		member.isMemberIdPwd(notFisaMember);

	}
}

결과값 출력

fisa님 반갑습니다.

  • Exception in thread "main" java.lang.RuntimeException
    • at step03.exception.Member.isMemberIdPwd(ExceptionTest2.java:32)
    • at step03.exception.ExceptionTest2.main(ExceptionTest2.java:55)
profile
즐겁고 괴로운 개발😎

0개의 댓글