์๋ก
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 ์ ๋ ฅ์ฐฝ์ด ๋ณด์ด์ง ์๋๋ค๋ฉด ์ด๋ฏธ์ง ์ฐ์ธก์ Modifty options๋ฅผ ๋๋ฌ Add VM options๋ฅผ ์ฒดํฌํ๋ฉด ์ ๋ ฅ์ฐฝ์ด ๋ํ๋ฉ๋๋ค.
2. Error / Exception
assert๊ฐ exception๊ณผ ๋ค๋ฅธ ์ ๋ ๋ฒ์งธ๋ assert๋ AssertionError๋ผ๋ Error๋ฅผ ๋ฐ์์ํค์ง๋ง, exception์ ํน์ ์์ธ ์ํฉ์ ๋์ํ๋ Exception์ ๋ฐ์์ํจ๋ค๋ ๊ฒ์ ๋๋ค.
Error๋ Exception๊ณผ ๋ณธ์ง์ ์ผ๋ก ๋ค๋ฅด๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ์์ธ(Exception): ์ ๋ ฅ ๊ฐ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๊ฑฐ๋, ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ฐธ์กฐ๋ ๊ฐ์ด ์๋ชป๋ ๊ฒฝ์ฐ ๋ฑ ์ ์์ ์ธ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์ด๊ธ๋๋ ๊ฒ
- ์๋ฌ(Error): OutOfMemoryError, StackOverflowError์ ๊ฐ์ด ๋ฐ์ํ๋ฉด ๋ณต๊ตฌํ ์ ์๋ ์ฌ๊ฐํ ์ค๋ฅ
3. ํ๋ก๊ทธ๋จ ์ข ๋ฃ
๋ง์ง๋ง์ผ๋ก Exception์ ์ ์ ํ ์ฒ๋ฆฌ(try-catch)๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ์ ์์ ์ธ ํ๋ฆ์ผ๋ก ๋ณต๊ทํ๋๋ก ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฐ์ ๋ก ์ข ๋ฃ๊ฐ ๋์ง ์์ง๋ง, assert๋ ์คํจ ์ AssertionError๋ฅผ ๋ฐ์์ํค๋ฏ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฐ์ ๋ก ์ข ๋ฃ๊ฐ ๋ฉ๋ค๋ ์ ์ ๋๋ค.
์ ๋ฆฌ
Exception๊ณผ Error๋ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ธ ํ๋ฆ์ ๋ฐฉํดํ๋ ๋ฌธ์ ๋ฅผ ๋ํ๋ด์ง๋ง, ๊ทธ ์์ธ๊ณผ ๋์ ๋ฐฉ๋ฒ์ด ๋ค๋ฆ ๋๋ค. ๊ฐ๊ฐ ํน๋ณํ ์ฌ์ฉ ์ฌ๋ก์ ๋ง๊ฒ ์ค๊ณ๋์ด ์์ผ๋ฉฐ, ๊ฐ๋ฐ์๋ ๋ ๊ฐ์ง๋ฅผ ํผ๋ํ์ง ์๊ณ ์ ์ ํ ์ํฉ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ํ ์ค์ ๋ฐฐํฌ ํ๊ฒฝ์์๋ -ea ์ต์ ์ ๊บผ์ assert๋ก ์ธํด ์ค์ ์๋น์ค์์ ์๊ธฐ์น ์์ ์ข ๋ฃ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์๋ํ์ง ์๋๋ก ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
'BackEnd๐ฑ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] CompletableFuture๋ก ๋น๋๊ธฐ ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ธฐ (2) | 2023.12.12 |
---|---|
[JVM ๋งค๊ฐ๋ณ์] InitialRAMPercentage, MinRAMPercentage, MaxRAMPercentage (0) | 2023.10.01 |
์ผ๊ธ ์ปฌ๋ ์ (First-Class Collection)์ด๋? (0) | 2023.04.12 |
Java์ ๊ธฐ๋ณธ ํจ์ํ ์ธํฐํ์ด์ค (0) | 2023.03.20 |
Java์ ์์ธ ์์ฑ ๋น์ฉ์ ๋น์ธ๋ค (0) | 2023.03.10 |
๋๋ฏธํฐ ๋ฒ์น (Law of Demeter)์ด๋? (2) | 2023.02.01 |
๋๊ธ