๊ตญ๋น์ง์ D+24
- ์์ธ์ฒ๋ฆฌ -
์์ธ์ฒ๋ฆฌ
์์ธ (Exception)
- ์ฌ์ฉ์ ์ค์, ์์คํ ์ ๋ฌธ์ ๋ก ์ธํด ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ์ง ๋ชปํ๋ ๋น์ ์์ ์ธ ์ํฉ (abnormal condition)
- ์ฝ๋์ ๋ฌธ์ ๊ฐ ์๋.
- ์คํ์๊ฐ(Run-Time)์ ๋ฐ์ํ๋ ๋น์ ์์ ์ํฉ
- ๋น์ ์์ ์ํฉ์ ๋๋ถ๋ถ ์ด๋ค๊ฒ ์ ์์ ์ธ์ง ํ๋จ ๋ถ๊ฐ๋ฅ
- ํ๋จ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ JVM ์์ธ๊ฐ ๋ฐ์๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ๊ธ์ ์ข ๋ฃ
์์ธ์๋ ์์ธก๊ฐ๋ฅํ ์์ธ์ ์์ธก๋ถ๊ฐ๋ฅํ ์์ธก์ด ์๋ค.
์ด๋ ์์ธก๊ฐ๋ฅํ ์์ธ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์์ฝ๋๋ฅผ ์์ฑํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋๊ฐ์ ์์ง๋ง, ์์ธก์ด ๋ถ๊ฐ๋ฅํ ์์ธ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์ํ ์ ์๋ ์์ธ๋ ์กด์ฌํ๋ค.
์ด๋ ์์ธก๊ฐ๋ฅํ ์์ธ๋ ๊ฒฐ๋ก ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฒฐํจ์ด ์๋ค๊ณ ํ ์ ์์ผ๋ฉฐ, ๋ฐ๋๋ก ์์ธก๋ถ๊ฐ๋ฅํ ์์ธ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ์ผ๋ ๊ฒฐํจ์ด ์กด์ฌํ๋ค๊ณ ํ ์ ์๋ค.
์์ธ์ฒ๋ฆฌ
์ฐ๋ฆฌ๊ฐ ์์์ผํ ๊ฒ์ ์์ธ์ฒ๋ฆฌ๋ ๋น์ ์์ ์ธ์ํ๋ฅผ ์ ์์ ์ธ ์ํ๋ก ๋๋๋ฆฌ๋ ๊ฒ์ด ๋ชฉ์ ์ด ์๋๋ผ ์์ธ๊ฐ ๋ฐ์๋์๋ค๋ ๊ฒ์ ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๊ธฐ ์ํ ๋ชฉ์ ์ด๋ค.
์ฌ๊ธฐ ๋๊ฐ์ ๊ฐ์ ์ ๋ ฅ๋ฐ์ ๋๋๊ฐ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ด ์๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋ด๊ฐ ๋๋ฒ์งธ ๊ฐ์ 0์ ์ ๋ ฅํ์๊ฒฝ์ฐ ์ปดํจํฐ๋ ๋๋๊ธฐ๋ฅผ ๊ฐ์ด ๋์ฌ๋ ๊น์ง ๋นผ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ 0์ ๋ฃ์ผ๋ฉด ๋ฌดํ ๋ฃจํ๋ฅผ ๋์ ์์ธ๋ก์ธํ ์๋ฌ๊ฐ ๋ฐ์๋๋ฉด์ ์ข ๋ฃํด๋ฒ๋ฆฐ๋ค.
์ฆ, ์ฝ๋์์ ์์ธ๊ฐ ๋ฐ์๋์์ ๊ฒฝ์ฐ ์ปดํจํฐ๋ ํด๋น ํ๋ก๊ทธ๋จ์ด ๋ฌด๊ฒฐ์ฑ์ ์์๋ค๊ณ ํ๋จํด ๋ฐ์ ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๋ฐ๋ก ์ข ๋ฃํด๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ์์ธ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ํตํด์ ์ ์ ์๋ ๊ฒ์ ์์ค์ฝ๋์ ๋ณต์ก๋๋ฅผ ๋๋ฆด์ ์๋ค๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ์ปดํ์ผํ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์๋ ์์ง๋ง ๋ฐํ์๊ฐ์ ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ๋ ์์ค์ฝ๋๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ์๋ค. ์ด๋ด๋ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉ์์๊ฒ ์ด๋ ํ ๋์์ ์ฒ๋ฆฌํด์ผํ๋์ง ์๋ ค์ค์ผํ๋๋ฐ ๊ทธ๋ ์ฌ์ฉํ๋ ๊ตฌ๋ฌธ์ด ๋ฐ๋ก try - catch ์ด๋ค.
try - catch
try
{
// ์์ธ๊ฐ ๋ฐ์๋ ๋งํ ์ฝ๋
}
catch( ์์ธ1 e ) // ์์ธ1์ด ๋ฐ์๋์๋ค๋ฉด
{
// ์ด๋ ๊ฒ ํด๋ผ
return;
}
catch( ์์ธ2 e ) // ์์ธ2์ด ๋ฐ์๋์๋ค๋ฉด
{
// ์ด๋ ๊ฒ ํด๋ผ
return;
}
try์ catch๋ ํจ๊ป ์ฌ์ฉํด์ผํ๋ค.
try
- ์์ธ๋ฐ์ ์์ ๋ธ๋ญ
- ์์ธ๊ฐ ๋ฐ์๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋๋ฅผ ์ง์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
- JVM์๊ฒ "์์ธ๊ฐ ๋ฐ์๋ ์ ์์ผ๋ ์ฒ๋ฆฌํ ์ค๋น์ข ํด์ฃผ์ธ์"๋ผ๊ณ ๋ถํํ๋ ๊ฒ์ด๋ค.
- JVM์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๊ธฐ ์ ์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ค ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋ค.
catch
- ํน์ ์์ธ๋ฅผ ์ฒ๋ฆฌ
- ํน์ ์์ธ๊ฐ ๋ฐ์ํ์๋ง์ ๋ฐ๋ก catch๋ก ์ด๋ํ์ฌ ์์ธ์ ๋ํ ๊ฒ์ ์ฒ๋ฆฌํ๊ณ ์ข ๋ฃํ๋ค.
- catch์ ์ ๊ทผํ๋ค๋ ๊ฒ์ ํด๋น ํ๋ก์ธ์ค๋ ๋์ด์ ๊ฐ์น๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์์ธ์ ์ข ๋ฃ์ ๋ฐ๋ผ ์ดํ์ ์ฝ๋๋ฅผ ๋๋ ค์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉฐ, ์ฝ๋๋ฅผ ๋๋ฆฌ์ง ์๊ณ ๋ฐ๋ก ์ข ๋ฃ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
- ์ฌ๋ฌ์์ธ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ catch๋ฅผ ์ ๋ ฅํด๋ ๋๋ค.
finally
try - catch๋ฅผ ์ฌ์ฉํ ๋ ํจ๊ป ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์์ธ๊ฐ ๋ฐ์ํ๋ ๋ฐ์ํ์ง ์๋ ๋ฌด์กฐ๊ฑด ์คํ์์ผ์ค๋ค.
์์ธ์ฒ๋ฆฌ์ ์ฃผ์์ฌํญ
์์ธ๋ ํฌ๊ฒ Error์ Exception ๋๊ฐ์ง๋ก ๋ํ๋๋๋ฐ ์ด๋ Error๋ unchecked๋ก ์ฐ๋ฆฌ๊ฐ ํ์ธํด๋ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ์์ด ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ Error๋ ์๋ตํ๊ณ Exception์ ๋ํด์ ํ์ตํ๋ฉด ๋๋ค.
Exception๋ด์์๋ ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋์ํด์ผ๋ง ํ๋ ์์ธ๊ฐ ์๊ณ ์ฒ๋ฆฌํ์ง ์์๋ ๋๋ ์์ธ๊ฐ ์๋๋ฐ ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ์ ์ผ ์ค์ํ๊ฒ ๋ด์ผํ ๊ฒ์ ์ด๋ฌํ ์์ธ๋ค์ Exception์ด๋ผ๋ ํด๋์ค์ ์ํ๋ฉฐ, ๊ฐ์ฅ ์ต์์ ํด๋์ค๋ Throwable์ด๋ผ๋ ๊ฒ์ด๋ค.
์ฆ, ๋ด๊ฐ ๋ง์ฝ catch๋ฅผ ํตํด IOException์ ๋ํด ์ฒ๋ฆฌํ๋ คํ ๋ IOException์ด๋ผ๊ณ ์์ฑํ์ง์๊ณ Throwable์ด๋ Exception์ด๋ผ๊ณ ์ ์ด๋ ๋ฌธ์ ๊ฐ ์ํด๊ฒฐ๋๋ค๋ ๊ฒ์ด๋ค.
try
{
//์์ธ๊ฐ ๋ฐ์๋ ๋งํ ์ฝ๋
}
catch(IOException e){ //IOException์ด ๋ฐ์ํ๋ค๋ฉด
}
catch(Exception e){ //Exception์ด ๋ฐ์ํ๋ค๋ฉด
}
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฐ๋ฆฌ๊ฐ Exception์ด์๋ IOException๊ณผ ๊ฐ์ ํน์ ์๋ฌ์ ๊ด๋ จ๋ catch๋ฌธ์ ์์ฑํ๋ ์ด์ ๋ ์ฑ๋ฅ์ด๋ ์๋ ๋ฌธ์ ๋ก์ธํด ๊ฐ๊ธ์ ์ ์ ํ ๋ฒ์๋ด์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ์ฌ๋ฌ ์์ธ์๋ํ catch๋ฌธ์ ์์ฑํ ๋์๋ ํ์ ํด๋์ค๋ฅผ ๋จผ์ ์์ฑํ๊ณ ์์ํด๋์ค๋ค์ ์๋์ ์์ฑํ๋ ๊ฒ์ด ํจ์จ์ ์ด๊ณ ๋ฐ๋์ฝ๋๋ฅผ ๋ฐ์์ํค์ง์๋๋ค.
throws
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.BufferedWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
Path file = Paths.get("C:\\Users\\101-15\\Documents\\test.txt");
BufferedWriter writer = null;
try {
writer = Files.newBufferedWriter(file);
writer.write('A');
writer.write('D');
if(writer != null)
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
์ฐ๋ฆฌ๊ฐ ๊ธฐ์กด์ ํ์ตํ ๊ฒ์ ์์ธ๊ฐ ๋ฐ์๋ ๊ฒ ๊ฐ์ ๋ถ๋ถ์ try์์ ๋๊ณ ์์ธ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ catch๋ฅผ ํตํด์ ์ฒ๋ฆฌํด์ค๋ค๊ณ ํ์ตํ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌํ ๋ฐฐ์ด๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ์ฐ๋ฆฌ๋ ์์ ์ฝ๋๋ฅผ ๊ตฌํํ ์ ์์ ๊ฒ์ด๋ค.
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.BufferedWriter;
import java.io.IOException;
public class Main {
public static void func2() throws IOException, ArrayIndexOutOfBoundsException
{
Path file = Paths.get("C:\\Users\\101-15\\Documents\\test.txt");
BufferedWriter writer = null;
writer = Files.newBufferedWriter(file);
writer.write('A');
writer.write('D');
writer.close();
int[] ar = {11, 22};
System.out.println(ar[2]);
}
public static void func1() throws IOException, ArrayIndexOutOfBoundsException
{
func2();
}
public static void main(String[] args) {
try {
func1();
}
catch(IOException e)
{
e.printStackTrace();
System.out.println("IOEception");
}
catch(ArrayIndexOutOfBoundsException e)
{
e.printStackTrace();
System.out.println("index over");
}
}
}
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์์ ์ฝ๋์ฒ๋ผ main์ func1์ func2์ ์๋ ์๋ฌ๋ฅผ main์์ ์ฒ๋ฆฌํด์ฃผ๊ณ ์ถ์๋์๋ ๋ง์ฐฌ๊ฐ์ง๋ก main์ ์๋ func1์ ํตํด์ try-catch๋ฅผ ์ฒ๋ฆฌํด์ค ์ ์๋ค.
๋ค๋ง ํจ์๋ค์ด ์ข ์์ ์ธ ๊ด๊ณ๋ฅผ ๊ฐ์ ธ ์ผ๋ถ ์ฑ ์์ด ์๊ธฐ ๋๋ฌธ์ ํจ์์๋ค๊ฐ throws ์์ธ๋ช ์์ฑํด์ ํด๋นํจ์ ์์๋ค๊ฐ ๋ฐ์ํ ์์ธ๋ฅผ ์์๋ค๊ฐ ๋์ ธ์ค ๋ฟ๋ง์๋๋ผ ์ผ์ข ์ ๊ฐ์ด๋๋ผ์ธ์ ๊ธฐ๋ฅ์ ํ๊ธฐ๋ ํ๋ค.
'์๋ > ๊ตญ๋น์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[D+26] ์์ฉSW ๊ธฐ์ด ๊ธฐ์ ํ์ฉ (0) | 2022.10.27 |
---|---|
[D+25] ๊ธฐ๋ณธ API (0) | 2022.10.26 |
[D+23] ์ธํฐํ์ด์ค, ์ถ์ํด๋์ค (0) | 2022.10.24 |
[D+22] Linked List (0) | 2022.10.24 |
[D+22] ์ฝ๋ฉ๋ฐ์ด (0) | 2022.10.22 |
๋๊ธ