try ~ catch

프로그램 실행 시 에러가 발생했을 때는 

에러 메시지를 캐치해서 클라이언트나 개발자에게 알려줘야 하고, 

프로그램이 종료되어도 안된다. 에러가 나도 정상 종료해야 한다. 

그러기 위해서 사용하는 것이 Try / catch 구문이다.  

 

main/Main.java

package main; // 여기 패키지 메인임.

import model.Student; // 모델에 있는 스튜던트 데리고 온다.

public class Main {

	public static void main(String[] args) { // cpu 시작 
		
		Student s1 = new Student(); // 메모리에 스튜던트 공간 확보한다. 
		
		s1.name = "홍길동";

		System.out.println(s1.name);
		
		s1.subjectList.add("자바"); 
	}
}

model/Student.java

package model;

import java.util.ArrayList;

public class Student {
	
	public String name;
	public ArrayList<String> subjectList;
    
    }

이렇게만 되어 있으면 "s1.subjectList.add("자바");" 부분에서 오류가 나며 프로그램이 종료되어 버린다. 

살펴보면 add 변수만 있지 메모리에서 생성이 안 되었다. 객체 생성을 하지 않고 작업을 하려고 했다. 

해결책은 객체 생성을 해 주면 된다. 

 

 

 

 

try catch문을 사용해서 어떤 에러가 나는지 확인도 하고, 프로그램이 종료되지 않도록 셋팅해 줄 수 있다.

 

main/Main.java

package main; // 여기 패키지 메인임.

import model.Student; // 모델에 있는 스튜던트 데리고 온다.

public class Main {

	public static void main(String[] args) { // cpu 시작 
		
		Student s1 = new Student(); // 메모리에 스튜던트 공간 확보한다. 
		
		try {
			// 에러가 날만한 코드가 있는 부분을 try로 둘러 싼다. 
			s1.name = "홍길동";
			
			System.out.println(s1.name);
			
			s1.subjectList.add("자바"); 
            // 변수만 있지 메모리 생성 안 됨. 객체 생성을 하지 않고 작업을 하려고 했다. 

			
		} catch (Exception e) {
			// try 부분에서 에러가 발생하면, 원래는 프로그램이 종료된다. 
			// 하지만 try / catch를 이용하면 
			// catch에서 프로그램 종료 없이 에러를 처리해 줄 수 있다. 
			
			// 유저에게 알려주는 것
			System.out.println("고객님, 에러 발생했습니다."); 
			System.out.println(e.toString());
			// 에러 메시지 
            // java.lang.NullPointerException: Cannot invoke "java.util.ArrayList.add(Object)" because "s1.subjectList" is null
			
		} finally {
			// try에서 정상 수행을 했든, 
			// catch에서 에러가 발생했든, 
			// 무조건 finally 코드는 실행하는 부분.
			// 옵셔널입니다. 있어도 되고 없어도 됨. 파이썬도 마찬가지 
			
			System.out.println("finally 실행됨");
		}
	}
}

 

 

model/Student.java

 

NullPointerException 에러 발생 시 해결하는 방법은 두 가지다.  

package model;

import java.util.ArrayList;

public class Student {
	
	public String name;
	public ArrayList<String> subjectList = new ArrayList<>(); // ArrayList는 함수다. 
    
}

위 방법은 바로 new 로 이어 공간을 만들어주는 것이다.
두번째 방법은 아래와 같이 생성자를 만들어 주는 것이다.

package model;

import java.util.ArrayList;

public class Student {
	
	public String name;
	public ArrayList<String> subjectList; // ArrayList는 함수다. 
	public Student() {
		subjectList = new ArrayList<>();
	}
}

 

 

 

Dev Life in IT :: [Java] java.lang.NullPointerException 오류 (tistory.com)

 

+ Recent posts