๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Note for moment

[Java] ์˜ˆ์™ธ(Exception)์™€ ์—๋Ÿฌ(Error), ์˜ˆ์™ธ์ฒ˜๋ฆฌ, ์˜ˆ์™ธํด๋ž˜์Šค์ƒ์„ฑ ๋ฐ ์ฐธ์กฐ

by ๐Ÿ’œautumn 2020. 9. 3.

* ์˜ˆ์™ธ(exception)

   : ๋ฌธ๋ฒ•์ ์œผ๋กœ ์ž˜๋ชป๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐœ์ƒ ์‹œํ‚ฌ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ

       - ์—๋Ÿฌ : ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์˜ ์˜ค๋ฅ˜

       - ์˜ˆ์™ธ : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜

    : ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์— ๋Œ€ํ•ด ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š”๊ฒƒ์ด ํ•„์ˆ˜!

       - ์‹ฌ๊ฐํ•œ ํ”„๋กœ๊ทธ๋žจ ์˜ˆ์™ธ์ธ ๊ฒฝ์šฐ "์—๋Ÿฌ"๋กœ ํ‘œ๊ธฐ : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋ถˆ๊ฐ€

       - ๊ฐ€๋ฒผ์šด ํ”„๋กœ๊ทธ๋žจ ์˜ˆ์™ธ์ธ ๊ฒฝ์šฐ "์˜ˆ์™ธ"๋กœ ํ‘œ๊ธฐ : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ฐ€๋Šฅ, JVM์— ์˜ํ•ด ์ž๋™์ ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

 

 

* ์˜ˆ์™ธ์ฒ˜๋ฆฌ

    : ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์„ธ์ง€๋ฅผ ์ œ๊ณต or ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์—๋Ÿฌ๋กœ๊ทธ๋ฅผ ์ œ๊ณต

    : try - catch๋ฌธ ํ™œ์šฉ

   

* ์˜ˆ์™ธ์ฒ˜๋ฆฌ์ „๊ฐ€

    : ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ํ•ด๋‹น ํด๋ž˜์Šค๋‚˜ ๋ฉ”์†Œ๋“œ์—์„œ ๋‹น์žฅ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Œ

    : ์ผ์ข…์˜ ์ฑ…์ž„์ „๊ฐ€๋กœ ๋‚˜์ค‘์— ์ผ๊ด„์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

    : throws ๋ฐœ์ƒ์˜ˆ์™ธ๋ช…(=์˜ˆ์™ธํด๋ž˜์Šค๋ช… ๋‚˜์—ด๊ฐ€๋Šฅ)

      => "์ด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์•Œ์ง€๋งŒ, ๋‚˜๋Š” ์ฒ˜๋ฆฌ ์•ˆํ•˜๊ณ  ๋„˜๊ธธ๊บผ์•ผ~

            ๋‹ˆ๊ฐ€ ๋‚˜์ค‘์— ์ด๊ฑฐ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ทธ๋•Œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•ด~"

 

 

* ์˜ˆ์™ธํด๋ž˜์Šค ์ƒ์„ฑ๊ณผ ํ™œ์šฉ

    : ๊ฐ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์†Œ๋“œ์—์„œ ์ œ๋•Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

    : ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑ ํ›„ ์ ์šฉํ•  ํด๋ž˜์Šค๋‚˜ ๋ฉ”์†Œ๋“œ์—์„œ ์ฐธ์กฐ

      → ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ : ๋Œ€ํ˜•ํ”„๋กœ๊ทธ๋žจ์— ์ ํ•ฉ

     1) ์˜ˆ์™ธํด๋ž˜์Šค ์ง์ ‘ ์ƒ์„ฑ์‹œ extends Exception ํ•„์ˆ˜

     2) ์˜ˆ์™ธํด๋ž˜์Šค ์ฐธ์กฐ๋ฅผ ์›ํ•  ์‹œ throws new ์ƒ์„ฑ์˜ˆ์™ธํด๋ž˜์Šค๋ช…;

//์˜ˆ์™ธ์ฒ˜๋ฆฌํด๋ž˜์Šค : ์˜ˆ์™ธํด๋ž˜์Šค
public class PasswordMissMatchException extends Exception {
	// ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ฐ€์žฅ ํฐ ํด๋ž˜์Šค Exception์ƒ์† : ์”จ๋ฆฌ์–ผ ํ•„๋“œ์ƒ์„ฑ! 
	private static final long serialVersionUID = 1L;
	
	//๊ธฐ๋ณธ์ƒ์„ฑ์ž
	public PasswordMissMatchException() {
		// TODO Auto-generated constructor stub
	}
	
	//ํ•„์ˆ˜์ƒ์„ฑ : ์˜ˆ์™ธ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ๋ณ€๊ฒฝํ•˜๋Š” ์ƒ์„ฑ์ž 
	public PasswordMissMatchException(String message) {
		//๋ถ€๋ชจํด๋ž˜์Šค(throw)์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•„๋“œ์— ์ดˆ๊ธฐ๊ฐ’๋ถ€์—ฌ!
		super(message);      //โ˜…superํ•„์ˆ˜!
	}
}
// ํ‚ค๋ณด๋“œ๋กœ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๋น„๊ตํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ
public class PasswordMatchApp {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		try {
			System.out.print("์ •์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” >> ");
			int password=scanner.nextInt();

			// ์ง์ ‘ ์ƒ์„ฑํ•œ Exceptionํด๋ž˜์Šค ํ™œ์šฉ
			if (password!=1234) {
				throw new PasswordMissMatchException("[Error]๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
			}
			System.out.println("๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.");
		} catch (InputMismatchException e) {
			System.out.println("์ •์ˆ˜๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.");
		} catch (PasswordMissMatchException e) {     //์ „์ฒดException์ฒ˜๋ฆฌ = ์ƒ์†๋ฐ›์€ํด๋ž˜์Šคํ˜ธ์ถœ
			System.out.println(e.getMessage());
		} finally {
			scanner.close();
		}
	}
}

 

๋Œ“๊ธ€