๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
BackEnd๐ŸŒฑ/Java

Java์—์„œ assert์™€ exception

by dkswnkk 2023. 8. 11.

์„œ๋ก 

Java์—์„œ ๊ฐœ๋ฐœ์ž๋Š” ๋ฒ„๊ทธ ๋˜๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์„ ๊ฒ€์ถœํ•˜๊ณ  ์ ์ ˆํžˆ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ assert์™€ exception์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์€ ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ, ์‚ฌ์šฉ ๋ชฉ์ , ์ ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค, ๊ทธ๋ฆฌ๊ณ  ํŠน์„ฑ์—์„œ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

Exception

exception์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ฐ˜์ ์ธ ์‹คํ–‰ ํ๋ฆ„์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ด๋ฅผ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ Java์˜ ๊ธฐ๋ณธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

Java์˜ ์˜ˆ์™ธ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.

1. Uncheked Exception(๋˜๋Š” RuntimeException)

int x = 0;
int y = 5 / x;  // ArithmeticException ๋ฐœ์ƒ

์‹คํ–‰ ์‹œ๊ฐ„์— ๋ฐœ๊ฒฌ๋˜๋Š” ์˜ˆ์™ธ๋กœ, RuntimeException ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ์˜ˆ์™ธ๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ NullPointerException์ด๋‚˜ AritmeticException ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

2. Checked Exception

try {
    FileReader reader = new FileReader("non_existent_file.txt");
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

์ปดํŒŒ์ผ ์‹œ์ ์— ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ์˜ˆ์™ธ๋กœ, RuntimeException์„ ์ƒ์†๋ฐ›์ง€ ์•Š๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. IOException์ด๋‚˜ SQLException ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

Assert

assert๋Š” ์ฝ”๋“œ์˜ ๋…ผ๋ฆฌ์ ์ธ ์กฐ๊ฑด์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŒ… ๋‹จ๊ณ„์—์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋‚˜ ๋‚ด๋ถ€ ๋ถˆ๋ณ€์„ฑ(invariants)์„ ํ™•์ธํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

assert๋Š” JDK 1.4๋ถ€ํ„ฐ ์ง€์›๋˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

1. ๊ธฐ๋ณธ ํ˜•์‹

assert ์กฐ๊ฑด;

์กฐ๊ฑด์ด false์ผ ๊ฒฝ์šฐ, AssertionError๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

2. ๋ฉ”์‹œ์ง€ ํฌํ•จ ํ˜•์‹

assert ์กฐ๊ฑด : "์—๋Ÿฌ ๋ฉ”์‹œ์ง€";

์กฐ๊ฑด์ด false์ผ ๊ฒฝ์šฐ, ์ฃผ์–ด์ง„ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ AssertionError๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

์˜ˆ์‹œ

int age = getAge();
assert age >= 0 : "๋‚˜์ด๋Š” ์Œ์ˆ˜์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.";

์œ„ ์ฝ”๋“œ๋Š” Exception in thread "main" java.lang.AssertionError: ๋‚˜์ด๋Š” ์Œ์ˆ˜์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
at AgeCheck.main(AgeCheck.java:4) ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

assert์™€ exception์˜ ์ฐจ์ด์ 

assert์™€ exception์€ ํฌ๊ฒŒ ๋‹ค์Œ์˜ ์„ธ ๊ฐ€์ง€ ์ฐจ์ด์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

1. ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”

์ฒซ ๋ฒˆ์งธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ JVM์—์„œ assert๋Š” ๋น„ํ™œ์„ฑ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ assert๋ฅผ ์‚ฌ์šฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‹คํ–‰ ์‹œ -ea(enable assertions) ์˜ต์…˜์„ ํ†ตํ•ด ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. IntelliJ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด VM options์— -ea๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

VM options์— -ea ์ถ”๊ฐ€

๋งŒ์•ฝ VM Options ์ž…๋ ฅ์ฐฝ์ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด๋ฏธ์ง€ ์šฐ์ธก์— Modifty options๋ฅผ ๋ˆŒ๋Ÿฌ Add VM options๋ฅผ ์ฒดํฌํ•˜๋ฉด ์ž…๋ ฅ์ฐฝ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

2. Error / Exception

java Throwable ๋„์‹๋„

assert๊ฐ€ exception๊ณผ ๋‹ค๋ฅธ ์  ๋‘ ๋ฒˆ์งธ๋Š” assert๋Š” AssertionError๋ผ๋Š” Error๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€๋งŒ, exception์€ ํŠน์ • ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€์‘ํ•˜๋Š” Exception์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Error๋Š” Exception๊ณผ ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค๋ฅด๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ์™ธ(Exception): ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์ฐธ์กฐ๋œ ๊ฐ’์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ ๋“ฑ ์ •์ƒ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ์–ด๊ธ‹๋‚˜๋Š” ๊ฒƒ
  • ์—๋Ÿฌ(Error): OutOfMemoryError, StackOverflowError์™€ ๊ฐ™์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋Š” ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜

3. ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ

๋งˆ์ง€๋ง‰์œผ๋กœ Exception์€ ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ(try-catch)๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ์ •์ƒ์ ์ธ ํ๋ฆ„์œผ๋กœ ๋ณต๊ท€ํ•˜๋„๋ก ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ, assert๋Š” ์‹คํŒจ ์‹œ AssertionError๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฏ€๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๊ฐ€ ๋ฉ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

 

์ •๋ฆฌ

Exception๊ณผ Error๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ •์ƒ์ ์ธ ํ๋ฆ„์„ ๋ฐฉํ•ดํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, ๊ทธ ์›์ธ๊ณผ ๋Œ€์‘ ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ฐ๊ฐ ํŠน๋ณ„ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ๋‘ ๊ฐ€์ง€๋ฅผ ํ˜ผ๋™ํ•˜์ง€ ์•Š๊ณ  ์ ์ ˆํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์‹ค์ œ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” -ea ์˜ต์…˜์„ ๊บผ์„œ assert๋กœ ์ธํ•ด ์‹ค์ œ ์„œ๋น„์Šค์—์„œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ข…๋ฃŒ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. 

๋Œ“๊ธ€