반응형

이 글을 본 사람은 다 이해하진 못해도 자기가 코딩을 하다 예외가 떨어지면

아 오류 났네, 에러 났네 하지 말고 아 예외 떨어졌네. 익셉션 떨어졌네.라고 해줍시다.

그리고 제에발! 제발!!!!!!!!!

제목 : "어떤 기능 개발 중 에러 ㅠㅠ" 하면서 커뮤니티에 100 줄 넘는 예외 코드 올리지 말고

무슨 예외 났는지부터 봅시다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

오류(Error 에러)

 

개념


에러(Error)란 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램에 이상이 생겼거나 JVM 실행에 문제가 생겼을 경우 발생하는 것

따라서 개발자가 미리 예측하여 처리할 수 없기 때문에, 애플리케이션에서 오류에 대한 처리를 신경 쓰지 않아도 된다.

 

오류(Error 에러)- 시스템 레벨에서 발생

 

 

종류


Throwable 하위

Error 하위

VirtualMachineError 하위

OutOfMemoryError

StackOverflowError (보자마자 사이트가 생각나는 엄청난 파급력..)

.. 외에 여러 것들이 있다

 

 

Exception(예외) 

 

개념


사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류.

 

예외가 발생하면 프로그램이 종료가 된다는 것은 에러와 동일하지만 예외는 예외처리(Exception Handling)를 통해 프로그램을 종료되지 않고 정상적으로 작동되게 만들어줄 수 있습니다. 자바에서 예외처리는 Try Catch문을 통해 해 줄 수 있습니다.

 

예외(Exception)- 개발자가 구현한 로직에서 발생

 

즉,

예외는 발생할 상황을 미리 예측하여 처리할 수 있다

 

있 기 문 에

있 기 문 에

있 기 문 에

 

예외의 개념을 확실히 알고 다음 글인 예외처리를 확실히 하자.

 

 

종류


Checked Exception과 Unchecked Exception

 

 

Checked Exception

 

특징


반드시 예외 처리 해야함.

반드시 예외 처리 해야함.

반드시 예외 처리 해야함.

 

확인 : 컴파일 단계

 

예외 발생시 트랜잭션 처리 : *roll-back 하지 않음

 

*roll-back : 롤백(rollback)은 데이터베이스에서 업데이트에 오류가 발생할 때, 이전 상태로 되돌리는 것을 말한다.

 

대표 예외

RuntimeException 제외한 모든 예외

IOException

SQLException  지금은 없다.

 

Unchecked Exception

 

특징


예외 처리를 반드시 하지 않아도 .

예외 처리를 반드시 하지 않아도 .

예외 처리를 반드시 하지 않아도 .

 

확인 : 실행단계 확인

 

예외 발생시 트랜잭션 처리 : *roll-back 진행됨.

 

*roll-back : 롤백(rollback)은 데이터베이스에서 업데이트에 오류가 발생할 때, 이전 상태로 되돌리는 것을 말한다.

 

대표 예외

RuntimeException 하위 예외

NullPointException

IllegalArgumentException

IndexOutOfBoundException

SystemException

 

자주 보는 대표 예외들


java.xxx. ~ Exception

 

ArithmeticException

정수를 0으로 나눌경우 발생 

int c = 4 / 0;

 

ArrayIndexOutOfBoundsExcetion

배열의 범위를 벗어난 index를 접근할 시 발생

int[] a = {1, 2, 3};
System.out.println(a[3]);

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at Test.main(Test.java:17)

a [3] 있지 않냐? 배열은 0부터 시작 ^^..

 

FileNotFoundException

파일을 못 찾을 때 발생

BufferedReader br = new BufferedReader(new FileReader("emptyfile.txt"));
br.readLine();
br.close();

Exception in thread "main" java.io.FileNotFoundException: emptyfile.txt (지정된 파일을 찾을 수 없습니다) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream. <init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileReader. <init>(Unknown Source)...

 

ClassCastExcetion

변환할 수 없는 타입으로 객체를 반환 시 발생 

Integer.parseInt(Object)

심각: Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer] with root cause

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

참고 글.

 

[Java] java.lang.ClassCastException

예외 상황1 원인 심각: Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.lang.Long..

java119.tistory.com

 

NullPointException (저랑은 이미 절친인 Exception ^^)

존재하지 않는 레퍼런스를 참조할 때 발생 

(거의 대부분은 객체가 제대로 생성되지 않은 경우 발생). 

String a = null; 
    if (a.equals("비교값")) { 
        System.out.println("equals");
    } else {
        System.out.println("!equals");
    }
    
//Spring 예시
@RequestMapping("menu/menuTest001.do")
	public ModelAndView workflowConfig() {
		ModelAndView mav = new ModelAndView();
		return mav;
	}
//menuTest001 이라는 jsp가 존재하지 않을 때.

 

IllegalArgumentException

잘못된 인자를 전달할 때 발생 

public String print(String x) throws Exception;

<select id="prints" statementType="CALLABLE" parameterType="String" resultType="String">
</select>

//dao - print 호출 MyBatis - prints

java.lang.IllegalArgumentException: Mapped Statements collection does not contain value xxx.xxx.xxx.xxx

 

IllegalArgumentException MyBatis 절친이다.

MyBatis 쓰다가 예외가 발생했다면 주 원인

1.mapper id가 틀린 경우

2.Parameter와 bean의 field명이  틀린 경우

3.sql.xml에서 정의된 namespace와 DAO에서 호출하는 namespace가 다를 경우

4.mapper가 정의가 되어 있지 않거나 Spelling이 틀린 경우

5.mapper에 정의된 namespace 명칭이 같은 Application 내에 중복될 경우

참고 글.

 

[MyBatis] 관련 오류(예외)시 꼭! 확인해야 될 사항

오키에 어떤 멋진 선배님이 덧글로 남긴 거 퍼옵니다. 이 사항들만 잘 지켜도 오류(예외) 해결 됩니다. 하나하나 다시 되돌아보시기 바랍니다. 1. 에러 출력되는 부분은 없습니까? 2. 디비 설정이 디비명, 테이블..

java119.tistory.com

IOException

입출력 동작 실패 또는 인터럽트 시 발생

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int age=0;
age = Integer.parseInt(in.readLine());

//IOException을 강제로 써야하지만 안쓰고 바로 Run을 실행한 상태.

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

Unhandled exception type IOException

 

BufferedReader, InputStreamReader 파일 I/O 관련 함수를 쓰려면

강제로 try/catch 하거나 throws IOException

(Checked Exception 특징 하나가 반드시 예외를 처리해야함 이라고 나와있었죠)

 

OutOfMemoryException

메모리가 부족한 경우 발생  

Exception in thread “main”: java.lang.OutOfMemoryError: Java heap spac
Heap size의 부족으로 Java Object를 Heap에 할당하지 못하는 경우.

Exception in thread “main”: java.lang.OutOfMemoryError: PermGen space
Class나 Method 객체를 PermGen space에 할당하지 못하는 경우 발생

애플리케이션에서 너무 많은 class를 로드할 때 발생한다.
주로 잘못된 설계/구현에 의해 발생한다.
-XX:PermSize, -XX:MaxPermSize Option을 이용하여 오류를 수정하기도 한다.

Exception in thread “main”: java.lang.OutOfMemoryError: Requested array size exceeds VM limit
사용할 배열의 사이즈가 VM에서 정의될 사이즈를 초과할 때 발생한다.

Exception in thread “main”: java.lang.OutOfMemoryError: request bytes for . Out of swap space?
Java는 런타임시 물리적 메모리를 초과한 경우 가상메모리를 확장해 사용하게 되는데 가용한 가상메모리가 없을 경우 발생한다.

Exception in thread “main”: java.lang.OutOfMemoryError: (Native method)
JVM에 설정된 것 보다 큰 native메모리가 호출 될 때 발생한다.

코드는 아니지만 길어서 코드 블록에 가둔다.

 

NumberFormatException

문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환시 발생

String str = "OO7oO";
System.out.println(Integer.parseInt(str));

00700 아닌 영문 O 섞인 OO7OO

Exception in thread "main" java.lang.NumberFormatException: For input string: "OO7OO"

at java.lang.NumberFormatException.forInputString(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at com.java119.test.JavaNFE.main(JavaNFE.java:5)

 

아니면 parseInt()인데 받는 값이 int 맥스인 2147483647를 넘는 경우에도 발생한다.

int a = Integer.parseInt(2147483648);

 

NoClassDefFoundException 

Exception in thread "main" java.lang.NoClassDefFoundError: Hello

‘Hello라는 클래스를 찾을 수 없다.’는 뜻이다. 클래스의 ‘Hello'의 철자, 특히 대소문자를 확인해보고 이상이 없으면 클래스 파일(*. class)이 생성되었는지 확인한다.

 예를 들어 ‘Hello.java’가 정상적으로 컴파일되었다면 클래스 파일 ‘Hello.class’가 있어야 한다. 클래스 파일이 존재하는데도 동일한 메시지가 반복해서 나타난다면

클래스 패스(classpath)의 설정이 바르게 되었는지 다시 확인해보자.

 

ClassNotFoundException

java.lang.ClassNotFoundException

컴파일된 java class 파일을 찾을 없다.

 

해당 경로에 분명 파일이 있음에도, 두개의 익셉션이 뜬다면?

참고 글.

 

[Eclipse] 잘되던 프로젝트가 갑자기 안될때(feat.HTTP 404)

이 글은 이클립스(IDE) 기반으로 설명합니다. 어제까지 잘되던 프로젝트가 내일 출근하고 보니 맛(?)이 갈 때가 있습니다. 바아로 따라해봅시다 1.Project 2.Clean… 1.Servers 탭 2.Tomcat version Server..

java119.tistory.com

NoSuchMethodException 

Exception in thread "main" java.lang.NoSuchMethodError: main

public static void mains(String []s args

‘main메서드를 찾을 수 없다.’는 뜻인데 실제로 클래스 내에 main메서드가 존재하지 않거나 메서드의 선언부(public static void main(String [] args))에 오타가 존재하는 경우에 발생한다.

 

Spring 관련 예외


BadSqlGrammarException

org.springframework.jdbc.BadSqlGrammarException:

컬럼명을 잘못 기술했을 경우 나타나는 예외

<select id="get~" resultType="DTO">
select from table
</select>
// select * from table *(아스타)가 빠짐.
// 외에 DB 컬럼명과 다르게 호출 할 경우 발생. id - ids

 


어디서 한 번씩은 본거 같은 Java 예외 리스트


java.io

  • IOException
  • CharConversionException
  • EOFException
  • FileNotFoundException
  • InterruptedIOException
  • ObjectStreamException
    • InvalidClassException
    • InvalidObjectException
    • NotActiveException
    • NotSerializableException
    • OptionalDataException
    • StreamCorruptedException
    • WriteAbortedException
  • SyncFailedException
  • UnsupportedEncodingException
  • UTFDataFormatException
  • UncheckedIOException

java.lang

  • ReflectiveOperationException
  • ClassNotFoundException
  • InstantiationException
  • IllegalAccessException
  • InvocationTargetException
  • NoSuchFieldException
  • NoSuchMethodException
  • CloneNotSupportedException
  • InterruptedException
  • 산술 예외
  • IndexOutOfBoundsException
  • ArrayIndexOutOfBoundsException
  • StringIndexOutOfBoundsException
  • ArrayStoreException
  • ClassCastException
  • EnumConstantNotPresentException
  • IllegalArgumentException
  • IllegalThreadStateException
  • NumberFormatException
  • IllegalMonitorStateException
  • IllegalStateException
  • NegativeArraySizeException
  • NullPointerException
  • SecurityException
  • TypeNotPresentException
  • UnsupportedOperationException

java.net

  • HttpRetryException
  • SocketTimeoutException
  • MalformedURLException
  • ProtocolException
  • SocketException
  • BindException
  • ConnectException
  • NoRouteToHostException
  • PortUnreachableException
  • UnknownHostException
  • UnknownServiceException
  • URISyntaxException

java.text

  • ParseException

 

java.time

  • DateTimeException

 

java.time.zone

  • ZoneRulesException

더욱더 자세한 Java Exception 보고 싶은 변태 멋진 분들은 여기 링크 남깁니다.

https://programming.guide/java/list-of-java-exceptions.html

 

더욱더 자세한 Spring Exception 보고 싶은 변태 멋진 분들은 여기 링크 남깁니다.

https://stackoverflow.com/questions/7561550/list-of-spring-runtime-exceptions

 

 

글은 제가 새로운 Exception 만날 때마다 수정/추가 될 예정입니다.

 

다음은 try catch 정확한 사용법을 알아보겠습니다. 개념 문법 위주

반응형

+ Recent posts