-
<์์ธ๋ฐ์>
-
โ1. ์คํ ์ ๋ฐ์ํ๋ ์์ธ (Runtime Exception = Unchecked Exception)
-
โ2. ์ปดํ์ผ ์ ์ฒดํฌํ๋ ์์ธ (Checked Exception)
-
<์์ธ์ฒ๋ฆฌ>
-
โ1. try-catch-finally
-
โ2. throws Exception
-
โ์์ธ๋ ๋๊ธฐ๊ธฐ (throws)
-
โ์์ธ์ฒ๋ฆฌ์ ์ ํฉํ ๋ฐฉ๋ฒ
-
๐์ค์ต - ์ฌ๋ถ๋ฆ ์์ธ์ฒ๋ฆฌ
-
<์ฌ์ฉ์ ์ ์ ์์ธ>
-
๐์ค์ต - ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด ํ์ฉ - ๊ฐ๋จํ ์ํ ํ๋ก๊ทธ๋จ
-
โ์์ธ์ฒ๋ฆฌ๋ฅผ ์ ๋๋ก ํ์ง ์์ ๊ฒฝ์ฐ
-
<๋ค์ํ ์์ธ>
-
โError์ ์๋ธํด๋์ค
-
โ์ฌ์ฉ์ ์ ์ ์์ธ, ์์ธ๋ฐ์, ์์ธ ๋ ๋๊ธฐ๊ธฐ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ์ด์
-
โ์๋ ๋ฆฌ์์ค ๋ซ๊ธฐ
-
<์์ธ์ถ๋ ฅ ๋ฉ์๋>
-
โgetStackTrace()
-
โprintStackTrace()
๐ฆ๋ฉ์์ด์ฌ์์ฒ๋ผ ๋ฐฑ์๋ ๋ถํธ์บ ํ 13๊ธฐ ๐ฆ
TIL ํ๊ณ - [9]์ผ์ฐจ
๐ 9์ผ์ฐจ์์๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ ๊น๊ฒ ์์๋ณด๊ณ , ์ฌ์ฉ์ ์ ์ ์์ธ์ฒ๋ฆฌ์ ์๋ ๋ฆฌ์์ค ๋ซ๊ธฐ ๋ฑ ์๋ก์ด ๊ฐ๋ ๋ค์ ๋ฐฐ์ธ ์ ์์๋ค. ์ฌ์ฉ์ ์ ์ ์์ธ์ฒ๋ฆฌ์์ ์๋ฐ๊ฐ ์ ์ํ์ง ๋ชปํ ์์ธ๋ค์ ์ง์ ์์ฑํด์ค์ผ๋ก์จ ์์ธ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ ์ ์๊ฒ๋์๋ค.
์์ธ์ฒ๋ฆฌ์ ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ด์ฉ์ ํ ๋๋ก ์งํํ๋ ๋ฏธ๋ํ๋ก์ ํธ [์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ] ์ค์ต์ด ๊ฝค๋ ์ด๋ ค์ ๋ค.๐ฅฒ
<์์ธ๋ฐ์>
โ1. ์คํ ์ ๋ฐ์ํ๋ ์์ธ (Runtime Exception = Unchecked Exception)
public class ExceptionExam01 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4};
// IndexOutOfBoundsException ์ด ๋ฐ์ํ ์ ์๋ค.
// ์ด ์ค๋ฅ๋ ์ปดํ์ผ ์์ ์ฒดํฌํ์ง ์๋๋ค.
arr[5] = 10;
// ์ด ๊ฒฝ์ฐ ์์ฑํ ๋๋ถํฐ ์์ธ๊ฐ ๋ฐ์ ์ค
FileInputStream fis = null;
fis = new FileInputStream("test.txt");
}
}
- arr[5] = 10
RuntimeException์ ์์๋ฐ๊ณ ์์์ ํ์ธ ๊ฐ๋ฅ (Exception API) ์ด ์ค๋ฅ๋ ์ปดํ์ผ ์์ ์ฒดํฌํ์ง ์๋๋ค.
(์คํ ์์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ๋ค = ์ปดํ์ผ ์์๋ ๋์ด๊ฐ๋ค = ๊ฒฐ๊ตญ ์์ธ๋ ๋ฐ์ํ๋ค) - ์ด ๊ฒฝ์ฐ ์ปดํ์ผ ์ ๊ฐ์ ํ์ง ์๋๋ค. (= Unchecked Exception) (=Runtime Exception)

<์คํ ์ ์์ธ๋ฐ์ํ๋ RuntimeException์ ๊ฒฝ์ฐ - ์ฌ์ฉ์๊ฐ ์์ธ๋ฅผ ๋ฏธ๋ฆฌ ์์ธกํด์ ๋ง๋ฆ>
try{
arr[5] = 10;
}catch(Exception e){
System.out.println(e);
}
- FileInputStream fis = new FileInputStream(โtest.txtโ)
Unhandled Exception (์์ธ๋ฅผ ๋ค๋ฃจ์ง ์์๋ค๋ ํ์) - FileNotFoundException์ Runtime Exception์ ์์๋ฐ๊ณ ์์ง ์์
= Runtime Exception์ด ์๋ ์์ธ๋ค์ ์ปดํ์ผ ์์ ์์ธ ๋ฐ์ - ํด๊ฒฐ๋ฐฉ๋ฒ = ๐ก try-catch๋ก ๋ฌถ์ด์ค๋ค.
- ์ด ๊ฒฝ์ฐ ์์ธ๋ฅผ ๊ฐ์ ํ๋ค. (=Checked Exception)
<Runtime Exception์ ํน์ง>
- java.langํจํค์ง
- Exceptionํด๋์ค์ ์๋ธํด๋์ค
- ์ฃผ๋ก ์คํ ์ ๋ฐ์ํ๋ ์์ธ
- ๋น๊ฒ์ฌํ ์์ธ (Unckecked Exception)
Runtime Exception๊ณผ ๊ทธ ์๋ธ ํด๋์ค๋ ๋น๊ฒ์ฌํ ์์ธ๋ค๋ก ๋ถ๋ฅ๋์ด
์ปดํ์ผ ์์ ์ โ์ฒดํฌ๋์ง ์๊ณ โ ์ฃผ๋ก ํ๋ก๊ทธ๋๋จธ ์ค์๋ก ์ธํด ๋ฐ์
ex. ์๋ชป๋ ํ๋ณํ, ๋ฐฐ์ด์ ์๋ชป๋ ์ธ๋ฑ์ฑ ๋ฑ - ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ๊ธฐ ์๊ธฐ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํด์น์ง ์์
ํ์ง๋ง ์ฌ๊ฐํ ์ค๋ฅ๋ฅผ ๋ํ๋ผ ์๋ ์์ - ex. ArrayIndexOutOfBoundsException : ๋ฐฐ์ด์ ์ธ๋ฑ์ค ์๋ชป ์ ๊ทผ
NullPointerException : null ์ฐธ์กฐ์ ๋ํ ์ฐ์ฐ ์๋
ClassCastException : ์๋ชป๋ ํ๋ณํ ์๋
ArithmeticException : ์ํ์ ๋ถ๊ฐ๋ฅํ ์ฐ์ฐ ์๋ (0์ผ๋ก ๋๋๊ธฐ ๋ฑ)
โ2. ์ปดํ์ผ ์ ์ฒดํฌํ๋ ์์ธ (Checked Exception)
<์คํ ์ ์์ธ๋ฐ์์ค : ์ด ๊ฒฝ์ฐ๋ ๋ง๋ค์ด์ค์ผ๋ง ์์ธ๊ฐ ๋ฐ์ํ์ง ์์>
FileInputStream fis = null;
try{
fis = new FileInputStream("test.txt");
}catch (FileNotFoundException e){
System.out.println(e);
}

<Chekced Exception์ ํน์ง>
- ์ปดํ์ผ ์์ ์ ์ฒดํฌ๋๋ ์์ธ์ ํ
- Exceptionํด๋์ค์ ์๋ธํด๋์ค์ด์ง๋ง, Runtime Exception์ ์๋ธํด๋์ค๋ ์๋
- ์ฃผ๋ก ํ๋ก๊ทธ๋จ์ ์ธ๋ถ์์ธ์ ์ํด ๋ฐ์ํ ์ ์๋ ์์ธ์ํฉ
- ์ปดํ์ผ๋ฌ๊ฐ ์ฒดํฌํ ์ด ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์ค๋ฅ ๋ฐ์
try-catch๋ธ๋ก ์ฌ์ฉ ํน์ throws ํค์๋๋ฅผ ์ฌ์ฉํ ์์ธ๋ฅผ ํธ์ถํ ๋ฉ์๋๋ก ์ ํ - ์์ธก๊ฐ๋ฅํ ์์ธ : ํ๋ก๊ทธ๋จ ์ธ๋ถ ์์ธ, ํ์ผ ์์คํ ์ค๋ฅ, ๋คํธ์ํฌ ๋ฌธ์ , DB์ฐ๊ฒฐ ์ค๋ฅ ๋ฑ
- ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ํฅ์์ํค๊ธฐ์ํด ์ฌ์ฉ
- ๊ฐ๋ฐ์๋ ์์ธ์ํฉ์ ๋ํด ๋ช ์์ ์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํจ
- ํ๋ก๊ทธ๋จํ๋ฆ์ ์์ธก๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ๊ธฐํ๋ฅผ ์ ๊ณต
- ex. IOException : ํ์ผ ์
์ถ๋ ฅ ์ ๋ฐ์
SQLException : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ฐ์
FileNotFoundException : ์กด์ฌํ์ง ์๋ ํ์ผ์ ์ ๊ทผ์ ๋ฐ์
<์์ธ์ฒ๋ฆฌ>
โ1. try-catch-finally
- ๋ด๊ฐ ์ง์ ์์ธ๋ฅผ ํ๋จํ๊ณ ์ฒ๋ฆฌํด์ค๋ค.
โ2. throws Exception
- ์์ธ๋ฅผ ๋์ง๋ค.
- ์์ธ๋ฅผ ๋ฐ์ ์ชฝ์์ ์ฒ๋ฆฌํด์ผํ๋ค.
- main๋ฉ์๋์์ throws๋ก ๋์ง๋ค๋ฉด JVM์๊ฒ ์์ธ๋ฅผ ๋์ง๋ ๊ฒ
<throws Exception ์์ >
public static void main(String[] args) throws FileNotFoundException{
FileInputStream fis = new FileInputStream("abc");
}
โ์์ธ๋ ๋๊ธฐ๊ธฐ (throws)
- =์์ธ์ ํ
=Exception Propagation - ๋ฉ์๋๊ฐ ๋ฐ์์ํจ ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์๊ณ ๊ทธ ๋ฉ์๋๋ฅผ ํธ์ถํ ์์ ๋ฉ์๋์ ์์ธ์ฒ๋ฆฌ๋ฅผ โ์์ํ๋ ๋ฐฉ๋ฒโ
- ์ฑ ์์ ๋ถ๋ฆฌ : ๊ฐ ๋ฉ์๋๋ ํด๋์ค๋ ์์ธ์ฒ๋ฆฌ์๋ ๊ด๋ จ์์ด ์์ ์ ๊ธฐ๋ฅ์ ์ง์ค
- ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ ์ ์ง : ๋ฉ์๋ ๋ด ์์ธ์ฒ๋ฆฌ ์์๋ ๋ฉ์๋์ ์ฃผ๋ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ์์ด ์ฝ๋๊ฐ ์ถ๊ฐ
- ์ฌ์ฌ์ฉ์ฑ ๋ฐ ์ ์ง ๋ณด์์ฑ ํฅ์ : ์์ธ์ฒ๋ฆฌ ๋ก์ง์ ํน์ ๋ฉ์๋์์๋ง ๊ตฌํํ๋ฉด
๋ค๋ฅธ ์ํฉ์์ ๋์ผํ ์์ธ๋ฐ์ ์ ์ฝ๋ ์ค๋ณต ์์ฑํ๊ฒ๋จ - ํ๋ฆ ์ ์ด : ์์ธ๋ฐ์ ์ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์์๋ ๋ฒจ๋ก ์ฝ๊ฒ ์ด๋์์ผ ๋ ํจ๊ณผ์ ์ผ๋ก ์ ์ด ๊ฐ๋ฅ
- ์ ์ ํ ์์ธ์ฒ๋ฆฌ ์์น ๊ฒฐ์ : ๋ชจ๋ ์์ธ๋ค์ ๋ฐ์ํ ๊ณณ์์ ์ ์ ํ ์ฒ๋ฆฌ๋ ์ ์๋ ๊ฒ์ ์๋๋ฏ๋ก,
๋๋ก ์์๋ฉ์๋์์ ์์ธ๋ฅผ ๋ ์ ์ ํ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ - ๐ก์ค๋ฌด์์๋ ๋ด๊ฐ ์ฒ๋ฆฌํ๊ธฐ ํ๋ ๋ฌธ์ ๊ฐ ์์๋ ๋น ๋ฅด๊ฒ ๋ณด๊ณ ํ๋๊ฒ ๋ ๋์ ์ ์๋ค.
โถ๏ธ์์ - ์์ธ๋ฅผ ๋ฉ์๋ ๋ณ๋ก ์ฒ๋ฆฌ
// exceptionProcessA() : ์ด ๋ฉ์๋์์ ์์ธ๋ฅผ ์ง์ ์ฒ๋ฆฌํ๋ค.
public static void exceptionProcessA() {
try{
FileInputStream fis = new FileInputStream("abc");
}catch(Exception e){
System.out.println(e);
}
}
// exceptionProcessB() : ์ด ๋ฉ์๋์์๋ ํธ์ถํ ๊ณณ์ผ๋ก ์์ธ๋ฅผ ๋์ง๋ค
public static void exceptionProcessB() throws FileNotFoundException {
FileInputStream fis = new FileInputStream("abc");
}
public static void main(String[] args) {
// exceptionProcessA() ๋ฉ์๋์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ฃผ์๊ธฐ๋๋ฌธ์ ํธ์ถํ๊ธฐ๋ง ํ๋ ์
exceptionProcessA();
// exceptionProcessB()๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ๋๋ฌธ์ ์์ธ๋ฅผ ์ ๋ฌ๋ฐ์ ์ง์ ์ฒ๋ฆฌํด์ฃผ๋ ์
try{
exceptionProcessB();
}catch(FileNotFoundException e){
System.out.println(e);
}
}
- exceptionProcessA()
์ด ๋ฉ์๋์์ ์์ธ๋ฅผ ์ง์ ์ฒ๋ฆฌํ๋ค. - exceptionProcessB()
main๋ฉ์๋์์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ด ์์ธ๋ฅผ ๋ฐ๋๋ค.
= ํธ์ถํ ๊ณณ์์๋ ์์ธ๋ฅผ throws or ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผํ๋ค.
โถ๏ธ์ค์ต - throws๋ก Exception๊ณผ Runtime Exception์ ์ง์
// ๋ฉ์๋๊ฐ ์คํ๋๋ ๋์ ์์ธ๊ฐ ๋ฐ์ํ ์ ์์
// Runtime Exception์ ํด๋นํจ
public static void exceptionProcessC() throws RuntimeException{
}
// Exception์ Runtime Exception์ ์์๋ฐ์ง ์์ผ๋ฏ๋ก
// Checked Exception์ ํด๋นํจ
public static void exceptionProcessD() throws Exception{
}
public static void main(String[] args) {
// ์์ธ์ฒ๋ฆฌ๋ฅผ ์ง์ ํ์ง ์์๋ ์๋ฌ๊ฐ ํ์๋์ง ์์
exceptionProcessC();
// ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋์ ํด์ผ ์๋ฌ๊ฐ ์ฌ๋ผ์ง
exceptionProcessD();
}
exceptionProcessD()๋ฅผ ์์ธ์ฒ๋ฆฌํจ
public static void main(String[] args) {
// ์์ธ์ฒ๋ฆฌ๋ฅผ ์ง์ ํ์ง ์์๋ ์๋ฌ๊ฐ ํ์๋์ง ์์
exceptionProcessC();
// ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋์ ํด์ผ ์๋ฌ๊ฐ ์ฌ๋ผ์ง
try {
exceptionProcessD();
} catch (Exception e) {
System.out.println(e);
}
}
<์ด์ ๋ฆฌ์ฝ๋>
public static void exceptionProcessC() throws RuntimeException{
// 1) ์์ธ๋ฐ์ ์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ์ชฝ์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ๋๊น (๋งก๊น) - UnChecked Exception์ด ๋ฐ์
}
public static void exceptionProcessD() throws Exception{
// 2) ์์ธ๋ฐ์ ์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ์ชฝ์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ๋๊น (๋งก๊น) - Checked Exception์ด ๋ฐ์
}
public static void exceptionProcessE() {
// 3) ์์ธ๋ฐ์ ์, ์ด ๋ฉ์๋ ๋ด์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ ๊ฒฝ์ฐ
try{
}catch (Exception e){
System.out.println(e);
}
}
public static void main(String[] args) {
// 1) ์์ธ์ฒ๋ฆฌ๋ฅผ ์ง์ ํ์ง ์์๋ ์๋ฌ๊ฐ ํ์๋์ง ์์
exceptionProcessC();
// 2) ์์ธ์ฒ๋ฆฌ๋ฅผ [๋ฐ๋์] ํด์ผ ์๋ฌ๊ฐ ์ฌ๋ผ์ง
try {
exceptionProcessD();
} catch (Exception e) {
System.out.println(e);
}
// 3) ์์ธ๊ฐ ๋ฉ์๋ ๋ด์์ ์ฒ๋ฆฌ๋์์
exceptionProcessE();
}
โ์์ธ์ฒ๋ฆฌ์ ์ ํฉํ ๋ฐฉ๋ฒ
์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
- ์์ธ๋ฅผ ์์ํด๋์ค๋ก ๋์ง๋ฉด ์์ํด๋์ค์์ ํด๊ฒฐ๋ฒ์ ๋์์ค ์ ์๋ค. [์์ธ๋ฅผ ๋์ง]
์์ธ๋ฅผ ๋์ง๋ ๊ฒ์ด ๊ผญ ๋์์ง ์์ ๊ฒฝ์ฐ์ด๋ค. - ์์ธ๋ฅผ ๋ณธ์ธ์ด ๋ง์๋๋ก ์ฒ๋ฆฌํ๋ฉด ์ํ๋๋๋ง ๋ชปํ ์ ์๋ค. [์ค์ค๋ก ์์ธ์ฒ๋ฆฌ]
โCheckedException vs UnChecked Exception
1. Checked Exception
= Runtime Exception์ ์์๋ฐ์ง ์์ ์์ธ๋ค
- FileInputStream ๊ฐ์ ๊ฒฝ์ฐ throws๋ฅผ ๋์ ธ์ ์คํ ์ ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ผญ ํด์ผํจ
- ํ์ผ๋ช ์ด ์ ์ด์ ์์ผ๋ฉด ํ์ผ์ ๋ง๋ค์ง ๋ชปํ๋ฏ๋ก, ๊ทธ๋ฌํ ๊ฒฝ์ฐ
- Java IO๊ฐ ๊ฐ์ง๊ณ ์๋ ํด๋์ค๋ค์ ๋์ฒด๋ก Chekced Exception์ด ๋ง์ด ๋ฐ์ ๋์ฒด๋ก throws๋ก ๋์ ธ์ฃผ๊ณ ์์
- ๐กJava IO๋ ๋จ์ํ ์ฐ์ง ๋ชปํ๊ณ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ผญ ํด์ฃผ์ด์ผ โ๊ฐ์ฒด ์์ฑ์ด ์ ๋๋ก ๋จโ
- โญJava IO๋ ๋ฐ์ฝ๋ ์ดํฐ ํจํด์ ํ๋ ์ฌ์ฉํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋
๊ทธ ์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
โก๏ธ์์ฑ์ ์์ ์์ฑ์๊ฐ ์๋ ๊ฒฝ์ฐ (new InputStreamReader)
= ๋ฐ์ฝ๋ ์ดํฐ ํจํด : "๋ชฉ์ ์ง, ๊ทผ์์ง ๋ฑ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๊ฐ์ ธ๋ค๊ฐ ์ฝ๊ณ /์ฐ๊ณ ํ๋ ๊ฒ๋ค์ด ๋ฐ๋๋ ํจํด"
2. UnChecked Exception
= Runtime Exception์ ์์๋ฐ์ ์์ธ๋ค
- IndexOutOfBounds ๊ฐ์ ๊ฒฝ์ฐ ์ปดํ์ผ ์์๋ ๋ฌธ์ ์์ผ๋, ์คํํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํจ
๐์ค์ต - ์ฌ๋ถ๋ฆ ์์ธ์ฒ๋ฆฌ
- ๋ด๊ฐ ์์ธ๋ฅผ ์ง์ ์ฒ๋ฆฌํ์๋์
- ์์ธ๋ฅผ ๋๊ฒผ์๋๋ฅผ ์ค์ต
<์ฌ๋ถ๋ฆA()> - ์์ธ๋ฐ์ ์ ๋ด๊ฐ ์ง์ ์ฒ๋ฆฌ
// ์ฌ๋ถ๋ฆA() - ์์ธ ๋ฐ์ ์ ๋ด๊ฐ ์ง์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
public static void workingA(){
String call = "๊ณผ์์ฌ์๋ผ";
char[] calls = call.toCharArray();
try{
calls[6] = '!';
}catch(Exception e){
System.out.println(" : [A-์์ธ์ฒ๋ฆฌ] ํ๋ด์ง ๋ง์ธ์.");
}
System.out.println("[๋ด๊ฐ์ฒ๋ฆฌ] : ์์์ ์ฌ๊ฐ๊ฒ์\n");
}
<์ฌ๋ถ๋ฆB()> - ์์ธ๋ฐ์ ์ ์์ํด๋์ค๋ก ๋์ง๋ ๋ฐฉ์ throws
// ์ฌ๋ถ๋ฆB() - ์์ธ ๋ฐ์ ์ throwsํ๋ ๋ฐฉ์
public static void workingB() throws Exception{
String call = "๊ณผ์์ฌ์๋ผ";
char[] calls = call.toCharArray();
calls[6] = '!';
}
<main()> - ๋์ ธ์ง Exception์ try-catch๋ก ์ฒ๋ฆฌ
public static void main(String[] args) {
workingA();
try{
workingB();
}catch(Exception e){
System.out.println(" : [B-์์ธ์ฒ๋ฆฌ] ํ๋ด์ง ๋ง์ธ์");
System.out.println("[์์ธ๋๊น] : ๋ญ ์ฌ๊ฐ๊น์?");
}
}

<์์ธ์ฒ๋ฆฌ ๋ณ try-catch-finally ์คํ๋๋ ๋ถ๋ถ ํ๋จ>
public static void main(String[] args) {
// 1. ์์ธ๋ฐ์ ์ ์ด ์์ธ๋ฅผ ์ ์ฒ๋ฆฌํ์๋
// > try์ ์์ธ ๋ฐ์ ๋ฐ ๋ฌธ์ฅ์ด ์คํ๋์ง ์์
int[] arr = {1, 2, 3};
try{
System.out.println("try - start");
System.out.println(arr[3]);
System.out.println("try - end");
}catch(IndexOutOfBoundsException e){
System.out.println(e);
}
System.out.println("1. To-do");
System.out.println("2. To-do");
System.out.println("3. To-do");
System.out.println("๋");
}

- arr[3]์์ ์์ธ๊ฐ ๋ฐ์ํ์ฌ, IndexOutOfBoundsException์ผ๋ก ์ ์ฒ๋ฆฌํด์ฃผ์๊ธฐ๋๋ฌธ์
- catch๋ฌธ์ด ์คํ๋์๊ณ
- main์ ๋ฌธ์ฅ๋ ์คํ์ด ๋์๋ค.
// 2. ์์ธ๋ฐ์ ์ ์ด ์์ธ๋ฅผ ์ ์ฒ๋ฆฌํ์ง ๋ชปํ์๋
// > try์ ์์ธ ๋ฐ์ ๋ฐ ๋ฌธ์ฅ์ด ์์ ์คํ๋์ง ์์
int[] arr = {1, 2, 3};
try{
System.out.println("try - start");
int i = arr[2] / 0;
System.out.println(arr[3]);
System.out.println("try - end");
}catch(IndexOutOfBoundsException e){
System.out.println(e);
}
// ...

- int i = arr[2] / 0 ์์ ์์ธ๊ฐ ๋ฐ์๋์๋๋ฐ, ArithmeticException ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ๋ชปํ์ฌ
- try๋ฌธ์ ๊ทธ ๋ฐ ๋ฌธ์ฅ์ด ์คํ๋์ง ์๊ณ ,
- catch๋ฌธ์ ๋ฌธ์ฅ๋ ์คํ๋์ง ์์ผ๋ฉฐ
- main๋ฉ์๋์ ๋ฌธ์ฅ๋ ์คํ๋์ง ์๋๋ค.
// 3. ์์ธ๋ฐ์๊ฐ ๋ฐ์ํ์ง ์์์๋
// > ๋ชจ๋ ๋ฌธ์ฅ์ด ์คํ๋จ
// + finally๋ธ๋ญ ์ถ๊ฐ
int[] arr = {1, 2, 3};
try{
System.out.println("try - start");
int i = arr[2] / 1;
System.out.println(arr[2]);
System.out.println("try - end");
}catch(IndexOutOfBoundsException e){
System.out.println(e);
}finally{
System.out.println("๋ฐ๋์ ์คํ๋๋ ๋ธ๋ญ");
}
//...

์์ธ๊ฐ ๋ฐ์ํ์ง ์์์๋, try๋ฌธ ์์ ๋ชจ๋ ๋ฌธ์ฅ์ ๋ฌผ๋ก finally๋ฌธ์ฅ, main์ ๋ฌธ์ฅ๊น์ง ์คํ๋๋ค.
<์ฌ์ฉ์ ์ ์ ์์ธ>
1. ์ผ๋ฐ์ ์ผ๋ก๋
- ํ์ผ์ด ๋ค์ด์์ผํ๋๋ฐ ํ์ผ์ด ์๋ค.
- ๊ฐ๋ฆฌ์ผ์ผํ๋ ๊ฐ์ด ์๋ค ์ด๋ฐ ๊ฒ๋ค์ ๋ณดํธ์ ์ธ ์์ธ๋กํด์ โ์๋ฐ๊ฐ ์ด๋ฏธ ์ ์ํ๊ณ ์์โ
2. ์ด๋ ๊ฒ ์๋ฐ๊ฐ ์ ์ํ ๊ฒ๋ค์ ์ ์ธํ๊ณ
์ฌ์ฉ์๊ฐ ์ ์ํ๋ ์์ธ ์ฌ์ฉ์๊ด์ ์ ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์ํ์ ์๊ณ ๋ณด๋ค ๋ ํฐ ๊ธ์ก์ ์ถ๊ธํ๋ คํ ๋ โ ์์ธ๋ฅผ ์ฌ์ฉ์๊ฐ ์ง์ ๋ง๋ค์ด์ผํจ
- ์ฑ์ ์ด 0~100๊น์ง ๋ค์ด์์ผํ๋๋ฐ 101์ ์ด ๋ค์ด์ค๋ฉด ์๋๋ฏ๋ก ์ด๋ฌํ ๊ฒฝ์ฐ๋ ์๋ฐ๊ฐ ์ ์ํ ์ ์๊ณ ์ฌ์ฉ์๊ฐ ์ ์ํ ์ ์๋ค.
โถ๏ธ์์ - ์ฌ์ฉ์ ์ ์ ์์ธ - ์ฌ๋ฐ๋ฅธ ์ ์ ์ ๋ ฅ
public static void inputScore(int score){
// ๊ฐ์ ๋ฐ์๋ค์ผ๋, 101์ ์ด์์ด๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ ์ถ์
// 1. ์ผ๋ฐ์ ์ธ ๋ฌธ๊ตฌ์ถ๋ ฅ์ผ๋ก ๋ค์ ์
๋ ฅ์ ์๊ตฌํ๋ ์์
if(0 < score || score > 100){
System.out.println("[์ฌ์
๋ ฅ์๊ตฌ] : ์ ์๋ 0~100๊น์ง๋ง ์
๋ ฅํด์ฃผ์ธ์.");
return;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("์ ์๋ฅผ ์
๋ ฅํ์ธ์ : ");
inputScore(sc.nextInt());
}
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ ๋ ฅ์ ์๊ตฌํ์ฌ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ ์์
public static void inputScore(int score){
// ๊ฐ์ ๋ฐ์๋ค์ผ๋, 101์ ์ด์์ด๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ ์ถ์
// 2. ์ด ์ํฉ์ ์ฌ์ฉ์๊ฐ ์ ์ํ ์์ธ๋ก ํ๋จํ์ฌ ์์ธ๋ฅผ ๋ฐ์
if(0 < score || score > 100){
throw new Exception("[์์ธ๋ฐ์] : ์ ์๋ 0~100๊น์ง๋ง ์
๋ ฅํด์ฃผ์ธ์.");
}
System.out.println("ํ์์ ์ ์ : " + score + "์ ");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("์ ์๋ฅผ ์
๋ ฅํ์ธ์ : ");
inputScore(sc.nextInt());
}
- ์ฌ์ฉ์๊ฐ ์์ธ๋ฅผ ์ ์ํ์ฌ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ ์ด์ง๋ง

- ์ด์ฒ๋ผ ์๋ฌ๊ฐ ๋ฐ์ํ์๋ main์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ผํ ์ง,
๋ฉ์๋์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ผํ ์ง ํ๋จํด์ผํ๋ค. - ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ๋ฉ์๋์์๋ throws Exception ์ผ๋ก ์์ธ๋ฅผ ๋์ง๊ณ
์ฌ์ฉ์์๊ฒ ์ ๋ ฅ์ ๋ฐ๋ main๋ฉ์๋์์ try-catch ๋ธ๋ก์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ค.
public static void inputScore(int score) throws Exception{
// ๊ฐ์ ๋ฐ์๋ค์ผ๋, 101์ ์ด์์ด๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ ์ถ์
// 2. ์ด ์ํฉ์ ์ฌ์ฉ์๊ฐ ์ ์ํ ์์ธ๋ก ํ๋จํ์ฌ ์์ธ๋ฅผ ๋ฐ์
if(0 < score || score > 100){
throw new Exception("[์์ธ๋ฐ์] : ์ ์๋ 0~100๊น์ง๋ง ์
๋ ฅํด์ฃผ์ธ์.");
}
System.out.println("ํ์์ ์ ์ : " + score + "์ ");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("์ ์๋ฅผ ์
๋ ฅํ์ธ์ : ");
try{
inputScore(sc.nextInt());
}catch(Exception e){
System.out.println(e.getMessage());
}
}
โถ๏ธ์์ - ์์ธ๊ฐ์ฒด ์ง์ ๋ง๋ค๊ธฐ
= ์์ธ๊ฐ์ฒด๋ฅผ ์ง์ ์ค๊ณํ ์ ์๋ค.
// ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ์์ธ (์ง์ ์ด๋ฆ์ ์ง์ ์์ธ)
public class MyException extends Exception{
//...
}
- ์์ธ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ์ฒซ๋ฒ์งธ๋ Exception์ ์์๋ฐ์ผ๋ฉด ๋๋ค.
extends Exception - UnChekced Exception์ ๋ฐ์์ํค๊ณ ์ถ์ผ๋ฉด Runtime Exception์ ์์๋ฐ์ผ๋ฉด ๋๋ค.
extends RuntimeException - ์ด์ ์ฌ์ฉ์ ์ ์ ์์ธ๋ฅผ ๋ง๋ ํ ๋ค๋ฅธ ํด๋์ค์์ ์์ธ๋ฅผ ๋ฐ์์ํฌ๋
throw new MyException(); ์ฒ๋ผ ์จ์ฃผ๋ฉด ๋๋ค.
์์ธ๋ฐ์ ์ MyException์ผ๋ก ์์ธ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

- ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด์์๋ ๋ฉ์์ง๊ฐ ๋ฐ์ํ๋๋ก ํ ์ ์๋ค.
= ์์ฑ์๋ฅผ ๋ง๋ ๋ค.
// ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ์์ธ (์ง์ ์ด๋ฆ์ ์ง์ ์์ธ)
// ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ = Exception์ ์์๋ฐ๊ธฐ
public class MyException extends Exception{
// ๊ธฐ๋ณธ์์ฑ์์์๋ super๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌ ๊ฐ๋ฅ
public MyException() {
super("MyException ์์ธ");
}
// Exception๋ฐ์ ์ ๋ฉ์์ง๋ฅผ ๋ฃ๊ณ ์ถ์
public MyException(String message) {
super(message);
}
}
โถ๏ธ์ค์ต - ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด ํ์ฉ - ์ฌ๋ฐ๋ฅธ ๋ก๋ ๋ฒํธ
<inputLottoNumbers()> - ๋ก๋๋ฒํธ๋ฅผ ๊ฒ์ฌํ๋ ๋ฉ์๋
public static void inputLottoNumbers(int num) throws Exception{
if(1 > num || num > 45){
throw new MyException("์ฌ๋ฐ๋ฅธ ๋ก๋ ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์");
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("๋ก๋ ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ : ");
try{
inputLottoNumbers(sc.nextInt());
}catch(Exception e){
// ์ธ ์ข
๋ฅ์ ์์ธ ๋ฉ์์ง ์ถ๋ ฅ
System.out.println("e.getMessage() : " + e.getMessage());
e.printStackTrace();
System.out.println("e : " + e);
}
}
<MyExceptionํด๋์ค> - ์ง์ ์ ์ํ ์์ธ
// ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ์์ธ (์ง์ ์ด๋ฆ์ ์ง์ ์์ธ)
// ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ = Exception์ ์์๋ฐ๊ธฐ
public class MyException extends Exception{
// ๊ธฐ๋ณธ์์ฑ์์์๋ super๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌ ๊ฐ๋ฅ
public MyException() {
super("MyException ์์ธ");
}
// Exception๋ฐ์ ์ ๋ฉ์์ง๋ฅผ ๋ฃ๊ณ ์ถ์
public MyException(String message) {
super(message);
}
}

๐์ค์ต - ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด ํ์ฉ - ๊ฐ๋จํ ์ํ ํ๋ก๊ทธ๋จ
- ํต์ฅ ๊ฐ์ฒด
- ์ถ๊ธํ๋ค() : ์์ก๋ณด๋ค ๋ ๋ง์ ๊ธ์ก์ด ์ถ๊ธ๋๋ฉด ์์ธ๋ฐ์ (ex. BankException (์ฌ์ฉ์์ ์์์ธ๊ฐ์ฒด))
- ์ ๊ธํ๋ค()
<Accountํด๋์ค> - ํต์ฅ, ๊ณ์ข ํด๋์ค
private static int money; // ๊ณ์ข ์์ก
public int getMoney() {
return money;
}
// ์์ฑ๋ ๋ ๋๋คํ ๊ณ์ข ์์ก์ ์ค์ ํ๋๋ก ํจ
public Account() {
randomAccountMoney();
}
// 10000์๋ถํฐ 99000์๊น์ง ๊ณ์ข ์์ก์ ๋๋คํ๊ฒ ์ค์
public static void randomAccountMoney(){
money = ((int)(Math.random()*99+10)) * 1000;
}
- Getter๋ฉ์๋๋ก money๋ฅผ ๊ณ์ข ์์ก์ ๊ฐ์ ธ์ฌ ์ ์์
- Math.random()์ ์ด์ฉํ์ฌ 10~99๊น์ง ๋ฝ๊ณ ๊ทธ๊ฐ์ ์ ์ํ๋ณํ ํ ํ 1000์ ๊ณฑํ์ฌ 10000~99000๊น์ง์ ๋๋คํ
๊ณ์ข ์์ก์ ๋ง๋ค์ด๋
<main()> - ์ ๊ธ, ์ถ๊ธ์ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ , ํ๋ก๊ทธ๋จ ์คํ์ ๋ด๋น
// ์
๊ธํ๋ค()
public static void deposit(int money) throws Exception{
if(money < 0){ // ์
๊ธํ ๊ธ์ก์ด ์์์ผ ๊ฒฝ์ฐ ์์ธ์ฒ๋ฆฌ
throw new BankException("[์์์
๋ ฅ] : ์ฌ๋ฐ๋ฅด์ง ์์ ๊ฐ์
๋๋ค.");
}
System.out.println("์
๊ธ ์ ์์ก : " + userRandomMoney);
System.out.println("์
๊ธ ํ ์์ก : " + (userRandomMoney+money));
}
// ์ถ๊ธํ๋ค()
public static void withdrawal(int money) throws Exception{
if(userRandomMoney < money){ // ์ถ๊ธํ ๊ธ์ก์ด ๊ณ์ข์์ก๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ ์์ธ์ฒ๋ฆฌ
throw new BankException("์์ก์ด ๋ถ์กฑํฉ๋๋ค");
}
System.out.println("์ถ๊ธ ์ ์์ก : " + userRandomMoney);
System.out.println("์ถ๊ธ ํ ์์ก : " + (userRandomMoney-money));
}
- ์ ๊ธ์ ์์๊ฐ ์ ๋ ฅ๋๋ฉด BankException์ ๋ฐ์์ํด
- userRandomMoney๋ก ๊ฐ์ ๋ถ๋ฌ์์ ์ ๋ ฅ๋ฐ์ money๋ฅผ ๋ํ๊ฑฐ๋ ์ฐจ๊ฐ
- ์ถ๊ธ์ ๊ณ์ข ์์ก๋ณด๋ค ์ถ๊ธ ๊ธ์ก์ด ๋ง์ ๊ฒฝ์ฐ BankException์ ๋ฐ์์ํด
<BankException ํด๋์ค> - ์ํ๊ด๋ จ ์์ธ๋ฅผ ๋ฐ์ (์ฌ์ฉ์ ์ ์ ์์ธ์ฒ๋ฆฌ)
public class BankException extends Exception{
public BankException() {
super("[์ํ] ์์ธ๊ฐ ๋ฐ์ํ์์ต๋๋ค.");
}
public BankException(String message) {
super(message);
}
}
<main()> - ์ฌ์ฉ์์๊ฒ ๋ฉ๋ด๋ฅผ ์ ๋ ฅ๋ฐ์
int userMenu = sc.nextInt();
switch (userMenu){
case 1: // ์
๊ธ ์์คํ
์ ๋ฌ
System.out.print("์ผ๋ง๋ฅผ ์
๊ธํ์๊ฒ ์ต๋๊น? : ");
try{
deposit(sc.nextInt());
}catch(Exception e){
e.printStackTrace();
}
break outter;
case 2: // ์ถ๊ธ ์์คํ
์ ๋ฌ
System.out.print("์ผ๋ง๋ฅผ ์ถ๊ธํ์๊ฒ ์ต๋๊น? : ");
try{
withdrawal(sc.nextInt());
}catch(Exception e){
e.printStackTrace();
}
break outter;
default: // ์ฌ๋ฐ๋ฅด์ง ์์ ๋ฉ๋ด ์
๋ ฅ
System.out.println("๋ค์ ์
๋ ฅํด์ฃผ์ธ์.");
}
- ์ฌ์ฉ์์๊ฒ ๋ฉ๋ด๋ฅผ ์ ๋ ฅ๋ฐ์ switch๋ฌธ์ผ๋ก ์ฒ๋ฆฌ
- ๊ฐ๊ฐ์ ๋ฉ์๋๋ก ๋ณด๋ด๊ณ , try-catch๋ฌธ์ ํตํด ์์ธ์ฒ๋ฆฌ๋ฅผ ํจ




๐ ์ด๋ฒ ๊ฐ๋จํ ์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ์ค์ตํด๋ณด๋ฉฐ, ์ ๊ธ, ์ถ๊ธ ๊ธฐ๋ฅ๋ง๊ณ ๋ ๊ณ์ข ์์ฑ, ๊ณ์ข ํ์ธ, ์์ก ํ์ธ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ ๋ณต์กํ ๋ก์ง์ด ํ์ํ ๊ฒ ๊ฐ๋ค๊ณ ๋๊ผ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฐ๋๋์ง ์์ ์ด์ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์์ ๋ฐ์ดํฐ๋ค์ด ๋ด๊ธฐ๊ณ , ์ข ๋ฃ๋ ๋ ๋ชจ๋ ์ฌ๋ผ์ง๋ฏ๋ก
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ์ฌ ์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒ๋ ๋ฐฐ์์ผํ ๊ฒ ๊ฐ๋ค.
๊ฐ๋จํ ์ ๊ธ, ์ถ๊ธ ๊ธฐ๋ฅ์ ๊ฐ์ง ์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ด์ง๋ง ์ฌ์ฉ์ ์ ์ ์์ธ๋ก ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ์์์ ๋ ฅ, ์์ก๋ถ์กฑ ๋ฑ์ Exception๋ฌธ๊ตฌ๋ฅผ ์ถ๋ ฅํด๋ณผ ์ ์์๋ค.
โ์์ธ์ฒ๋ฆฌ๋ฅผ ์ ๋๋ก ํ์ง ์์ ๊ฒฝ์ฐ
- ํ๋ก๊ทธ๋จ์ ๋น์ ์์ ์ค๋จ
- ๋ฐ์ดํฐ์์ค
- ๋ณด์ ์ทจ์ฝ์
- ์ฌ์ฉ์ ๊ฒฝํ ์ ํ
- ์ ์ง๋ณด์์ ์ด๋ ค์
<๋ค์ํ ์์ธ>
= ์๋ฐ๊ฐ ๋ฏธ๋ฆฌ ์ ๊ณตํ๋ ์์ธ ํด๋์ค
java.langํจํค์ง์ java.ioํจํค์ง์ ๋๋ถ๋ถ ํฌํจ
โError์ ์๋ธํด๋์ค
- ์ด ์๋ฌ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์๋ฌ์ ์์ธ๋ ๋ค๋ฅด๋ค. ์๋ฌ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ป๊ฒ ํ ์ ์์ง๋ง, ์์ธ๋ ์ฐ๋ฆฌ๊ฐ ๋์ฒ๊ฐ๋ฅ
- OutOfMemoryError : JVM์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ ๋ฐ์
- StackOverflowError : ์คํ ์ค๋ฒํ๋ก์ฐ ๋ฐ์ (๋ฉ์๋ ํธ์ถ์ด ๊น์ด ๋๋ฌด ๋ง์ด ์ค์ฒฉ๋์์๋์ฌ์ฉ)
<JDK์์์ ์์ธ ๋ ๋๊ธฐ๊ธฐ ์ฌ๋ก>
- java.io.InputStream์ read()๋ฉ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์๋ ๋ฐ์ํ ์ ์๋
IOException์ ๋ ๋๊น (ํ์ผ์ด ์กด์ฌํ์ง ์์, ์ฝ๊ธฐ ๊ถํ ์์ ๋ฑ) - java.net.Socket์ ์์ฑ์ ๋คํธ์ํฌ ์ฐ๊ฒฐ๊ณผ ๊ด๋ จ๋ Socketํด๋์ค๋ ์์ธ๋ฅผ ๋ ๋๊น
Socket์ ์์ฑ์๋ ํธ์คํธ ์ฃผ์์ ํฌํธ๋ฅผ ์ฌ์ฉํด ์์ผ์ฐ๊ฒฐ์ ์๋ํ๋ฉฐ
์ด ๊ณผ์ ์์ ์ฌ๋ฌ ๋คํธ์ํฌ ๊ด๋ จ ์์ธ๋ฅผ ๋ฐ์์ํฌ ์ ์์ UnknowHostException๊ณผ IOException์ ๋ ๋๊น
public Socket(String host, int port) throws UnknownHostException, IOException;
- ์ด๋ฅผ ํตํด ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ฌธ์ ๋ ์ /์ถ๋ ฅ ๋ฌธ์ ๋ฐ์ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐํ ์ ๊ณต
โ์ฌ์ฉ์ ์ ์ ์์ธ, ์์ธ๋ฐ์, ์์ธ ๋ ๋๊ธฐ๊ธฐ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ์ด์
- ์ฌ์ฉ์ ์ ์ ์์ธ๋ ์๋ฐ๊ฐ ์ ๊ณตํ๋ ํ์ค ์์ธ๋ค๋ก๋ ํน์ ์ํฉ์ ๋ช
ํํ๊ฒ ํํํ๊ธฐ ์ด๋ ค์ธ๋,
์ค๋ฅ ์ํฉ์ ๋ ๊ตฌ์ฒด์ ์ด๊ณ ๋ช ํํ๊ฒ ์ ๋ฌ ๊ฐ๋ฅ - ์์ธ ๋ฐ์์ํค๊ธฐ๋ ํ๋ก๊ทธ๋จ์์ ์์์น ๋ชปํ ์ํฉ์ด๋ ์กฐ๊ฑด์ ๋ง๋ฌ์๋ ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ค
ํน์ ์กฐ๊ฑด์์ ํ๋ก๊ทธ๋จ์ ์คํ ์ค๋จ ๋ฐ ๋ฌธ์ ๋ฅผ ์๋ ค์ฃผ๊ฑฐ๋ ์ ์ ํ ์กฐ์น๋ฅผ ์ทจํ ์ ์์ - ์์ธ ๋ ๋๊ธฐ๊ธฐ๋ ๋ฐ์ํ ์์ธ๋ฅผ ํธ์ถํ ๋ฉ์๋๋ก ์ ๋ฌํ๋ ๊ฒ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง์
ํ์ฌ์ ๋ฉ์๋ ๋ ๋ฒจ์์ ๋ค๋ฃจ๊ธฐ ์ด๋ ค์ธ๋, ์์๋ ๋ฒจ๋ก ์์ํ๊ธฐ์ํด ์ฌ์ฉ
[์ค๋ฅ ์ฒ๋ฆฌ์ ์ฑ ์์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌ / ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ๋์]
โ์๋ ๋ฆฌ์์ค ๋ซ๊ธฐ
- 1. ์ผ๋ฐ์ ์ผ๋ก finally์์์ try-catch๋ฌธ ์ฒ๋ฆฌ๋ก ๋ซ์์ฃผ๋ ์์
// ์๋๋ฆฌ์์ค ๋ซ๊ธฐ ์์
// 1) ์ผ๋ฐ finally์์ try-catch๋ฌธ ์ฌ์ฉ
public class ExceptionFinally01 {
public static void main(String[] args) {
// ์ฐ๊ฒฐํ๋ฉด, ๋ฐ๋์ ๋ซ์์ผํ๋ ๊ฒ์ด ์ค์ = FildInputStream ๋ฑ
// ๋ฐ๋์ ๋ซ์์ผํ๋ ๊ธฐ๋ฅ์ finally์์ ๊ธฐ๋ฅ
FileInputStream fis = null;
System.out.println("-----1๋ฒ๋ฐฉ๋ฒ ๋ธ๋ก start");
try{
fis = new FileInputStream("abc");
}catch (Exception e){
System.out.println(e);
}finally{ // finally์์๋ try-catch๋ธ๋ก์ ํตํด ๋ฐ๋์ ๋ซ๋ ๊ธฐ๋ฅ close()๋ฅผ ์ํํ๊ณ
// ์ด๋์ ๋ฐ์ํ๋์ง๋ฅผ ์ ์ ์๋๋ก IOException์ ๋ฐ์ํ๋ e๋ฅผ catch๋ฌธ์ ์์ฑ
try{
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
System.out.println("-----1๋ฒ๋ฐฉ๋ฒ ๋ธ๋ก end");
}
}
- 2. โญJava 7๋ถํฐ ์ ๊ณตํ๋ try-with-resources๋ผ๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์๋๋ฆฌ์์ค ๋ซ๊ธฐ
// ์ฐ๊ฒฐํ๋ฉด, ๋ฐ๋์ ๋ซ์์ผํ๋ ๊ฒ์ด ์ค์ = FildInputStream ๋ฑ
FileInputStream fis = null;
System.out.println("-----2๋ฒ๋ฐฉ๋ฒ ๋ธ๋ก start");
// ์ด ๋ฆฌ์์ค๋ฅผ ์ธ๊ฒ์์ try()์์ ๋ฐ๋ก ์ ์ธ
try(FileInputStream fis2 = new FileInputStream("abc")){
}catch(Exception e){
e.printStackTrace();
}
System.out.println("-----2๋ฒ๋ฐฉ๋ฒ ๋ธ๋ก end");
// ์ด๊ตฌ๋ฌธ์ finally๋ก ๋ซ์์ค ๊ตฌ๋ฌธ๊ณผ ๋๊ฐ์ด ๋์ํจ
์ด ๊ตฌ๋ฌธ์ try( ) ์์ ๋ง๋ค์ด์ง ๋ฆฌ์์ค๋ค์ finally์์ ์๋์ผ๋ก close์์ผ์ค๋ค๋ ์๋ฏธ์ด๋ค.
โญ1๋ฒ๋ฐฉ๋ฒ์ ๋ธ๋ก๊ณผ 2๋ฒ๋ฐฉ๋ฒ์ ๋ธ๋ก์ ๋๊ฐ์ ๊ธฐ๋ฅ์ํ๋ค.
1๋ฒ๋ฐฉ๋ฒ๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ๋ณต์กํ๊ณ , ๋ฆฌ์์ค๋ฅผ ๋ซ๋ ๊ฒ์ ์์ด๋ฒ๋ฆฌ๋ ์ค์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
2๋ฒ๋ฐฉ๋ฒ์ฒ๋ผ ๊ฐ๊ฒฐํ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ , ๋ฆฌ์์ค ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ์ฝ๋๋ฅผ ๋ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ ์ ์๊ฒ๋๋ค.
๐ก์ด 2๋ฒ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ (try-with-resources)
๋ฆฌ์์ค ๊ฐ์ฒด๊ฐ AutoCloseable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผํ๊ณ ,
๋๋ถ๋ถ์ Javaํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฆฌ์์ค ํด๋์ค๋ค์ โญโญ์ด๋ฏธ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ค.
์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ง ์์ผ๋ฉด ์ด ํ์
์ ๊ฐ๋ฆฌํฌ ์ ์๋ค.
์๋ก FileInputStream API๋ฅผ ๊ฐ๋ณด๋ฉด

Implements์์ AutoCloseable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๊ณ ,
์ด AutoCloseable ์ธํฐํ์ด์ค๋ 1.7 ๋ถํฐ ์ ๊ณตํ๋ ๊ฒ์ ์ ์ ์๋ค.

โ์์ธ์ ๋ณด์ป๊ธฐ๊ฐ ํ์ํ ์ด์
- ์์ธ ๋ฐ์ ์ ์์ธ๊ณผ ์ํฉ์ ์ ํํ ํ์ ํ๊ณ ๊ฐ์ ์ค์๋ฅผ ๋ฐ๋ณตํ์ง ์๊ฒํจ
- ์ ํํ ๋๋ฒ๊น : ์์ธ์ ๋ณด์๋ ์์ธ๊ฐ ๋ฐ์ํ ์ฝ๋ ์์น (ํ์ผ๋ช , ๋ผ์ธ ๋ฒํธ ๋ฑ)๊ฐ ํฌํจ๋จ
- ํจ์จ์ ์ธ ๋ฌธ์ ํด๊ฒฐ : ์์ธ์ ์ข
๋ฅ์ ๋ฉ์์ง๋ฅผ ์ดํดํ ์ ์์,
์๋ก NullPointerException์ ๊ฐ์ฒด๊ฐ ์ด๊ธฐํํ์ง ์์์ผ๋ฏ๋ก ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ์ด๊ธฐํ์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ํ์ธํ ์ ์์
<์์ธ์ถ๋ ฅ ๋ฉ์๋>
โgetStackTrace()
์์ธ๋ฐ์ ์์น๋ฅผ ๋ฐํํ๋ค.
๐ก(โ์์ธ ๋ฐ์ ์์น : โ+ e.getStackTrace()[0]);
โprintStackTrace()
์์ธ๋ฐ์ ๋ฉ์์ง์ ์์น๋ฅผ ์ถ๋ ฅํ๋ค.
๐์ด ํ ๋จ์ ์๊ฐ์๋
์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ๋ฅผ ๋ฏธ๋ํ๋ก์ ํธ๋ก ์งํํ์๋ค. ์ฒ์์๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ค์ํ๊ฒ ์๊ฐํ์ง ์์์
๋จ์ํ ๊ธฐ๋ฅ๋ง ๊ตฌํํ๊ณ , ์ฌ๋ฐ๋ฅธ ์ ๋ ฅ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ while๋ฌธ์ ํตํด ์ฌ๋ฐ๋ฅธ ๊ฐ์ด ์ ๋ ฅ๋ ๋๊น์ง ๋ฌดํ ๋ฐ๋ณต ์์ผฐ๋ค๋ฉด
์์ธ์ฒ๋ฆฌ๋ฅผ ๋ฐฐ์ฐ๊ณ ๋์๋ ์ด๋์ ๋ try-catch๋ฌธ์ผ๋ก ๋ฌถ์ด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ๋ ๋ ๋ค.
์์ง๊น์ง ์ด ์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ณ ์์ง๋ง ์ฌ์ ํ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํด์ ๋ฃ๋ ๊ฒ์ด ์ด๋ ค์ ๋ค.
์ ๊ธ / ์ถ๊ธ / ๊ณ์ข๋ฑ๋ก / ๊ณ์ขํ์ธ / ์ด๋ฆ ์ค๋ณต ๊ธ์ง ๋ฑ ๊ฐ๊ฐ์ง ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๋ณด๋ ์์ธ์ฒ๋ฆฌ๋ ์ผ๋จ ์ ๊ปด๋๊ณ ๊ตฌํ์๋ง ํ์ฐ๊ณ ์์๋ค.
ํ๋ก์ ํธ ๊ตฌํ์ด ๋ง๋ฐ์ง๋ ๋์ฏค ์์ธ๋ฅผ ๋ฃ์ด๊ฐ๋ฉฐ ํ๋ํ๋ ์ฝ๋๋ฅผ ์์ ํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๐ก 9์ผ์ฐจ์์๋ ์ด๋ ๊ฒ ์์ธ์ฒ๋ฆฌ์ ๋ํด์ ๋ค์ํ๊ณ ๊น๊ฒ ๋ฐฐ์ฐ๊ณ , ์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ ํ๋ก์ ํธ๋ฅผ ํตํด ์์ธ์ฒ๋ฆฌ๋ฅผ ์ง์ ์ฌ์ฉํด๋ณด๊ณ ๊ธฐ๋ฅ๊ตฌํ๊ณผ ํจ๊ป ๊ฐ๋ฐํด๋๊ฐ๋ ๊ณผ์ ์ ๊ฒฝํํ ์ ์์๋ค.
๋จธ๋ฆฟ์์์ ๊ฐ์๊ธฐ ์๊ฐ๋์ ๋ง๋ค๊ณ ์ถ์ดํ ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ๋ค์ ํ ์ค ํ ์ค ์ฝ๋๊ฐ ์ ์จ์ก๋๋ฐ
์๊ตฌ์ฌํญ๊ณผ ์ ํด์ง ํด๋์ค, ๋ฉ์๋๋ฅผ ๋ณด๋ ๋จธ๋ฆฌ๋ ๋ณต์กํด์ง๊ณ ๊ฐ์ฒด์์ ๊ด๊ณ๋ฅผ ์ด๋ป๊ฒ ์ ์ํ ์ง๋ถํฐ ๋ง๋งํ๋ค.
์ด๋ฒ ๋ฏธ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋๋๊ฑด ํ๋ํ๋ ์ค๋ฅ ์ก์๊ฐ๋ฉด์ ์์ฑ์์ผ์ผ๊ฒ ๋ค๋ ์์ง๊ฐ ์๊ฒผ๋ค๋ ๊ฒ์ด๋ค!๐
๐ฆ๋ฉ์์ด์ฌ์์ฒ๋ผ ๋ฐฑ์๋ ๋ถํธ์บ ํ 13๊ธฐ ๐ฆ
TIL ํ๊ณ - [9]์ผ์ฐจ
๐ 9์ผ์ฐจ์์๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ ๊น๊ฒ ์์๋ณด๊ณ , ์ฌ์ฉ์ ์ ์ ์์ธ์ฒ๋ฆฌ์ ์๋ ๋ฆฌ์์ค ๋ซ๊ธฐ ๋ฑ ์๋ก์ด ๊ฐ๋ ๋ค์ ๋ฐฐ์ธ ์ ์์๋ค. ์ฌ์ฉ์ ์ ์ ์์ธ์ฒ๋ฆฌ์์ ์๋ฐ๊ฐ ์ ์ํ์ง ๋ชปํ ์์ธ๋ค์ ์ง์ ์์ฑํด์ค์ผ๋ก์จ ์์ธ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ ์ ์๊ฒ๋์๋ค.
์์ธ์ฒ๋ฆฌ์ ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ด์ฉ์ ํ ๋๋ก ์งํํ๋ ๋ฏธ๋ํ๋ก์ ํธ [์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ] ์ค์ต์ด ๊ฝค๋ ์ด๋ ค์ ๋ค.๐ฅฒ
<์์ธ๋ฐ์>
โ1. ์คํ ์ ๋ฐ์ํ๋ ์์ธ (Runtime Exception = Unchecked Exception)
public class ExceptionExam01 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4};
// IndexOutOfBoundsException ์ด ๋ฐ์ํ ์ ์๋ค.
// ์ด ์ค๋ฅ๋ ์ปดํ์ผ ์์ ์ฒดํฌํ์ง ์๋๋ค.
arr[5] = 10;
// ์ด ๊ฒฝ์ฐ ์์ฑํ ๋๋ถํฐ ์์ธ๊ฐ ๋ฐ์ ์ค
FileInputStream fis = null;
fis = new FileInputStream("test.txt");
}
}
- arr[5] = 10
RuntimeException์ ์์๋ฐ๊ณ ์์์ ํ์ธ ๊ฐ๋ฅ (Exception API) ์ด ์ค๋ฅ๋ ์ปดํ์ผ ์์ ์ฒดํฌํ์ง ์๋๋ค.
(์คํ ์์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ๋ค = ์ปดํ์ผ ์์๋ ๋์ด๊ฐ๋ค = ๊ฒฐ๊ตญ ์์ธ๋ ๋ฐ์ํ๋ค) - ์ด ๊ฒฝ์ฐ ์ปดํ์ผ ์ ๊ฐ์ ํ์ง ์๋๋ค. (= Unchecked Exception) (=Runtime Exception)

<์คํ ์ ์์ธ๋ฐ์ํ๋ RuntimeException์ ๊ฒฝ์ฐ - ์ฌ์ฉ์๊ฐ ์์ธ๋ฅผ ๋ฏธ๋ฆฌ ์์ธกํด์ ๋ง๋ฆ>
try{
arr[5] = 10;
}catch(Exception e){
System.out.println(e);
}
- FileInputStream fis = new FileInputStream(โtest.txtโ)
Unhandled Exception (์์ธ๋ฅผ ๋ค๋ฃจ์ง ์์๋ค๋ ํ์) - FileNotFoundException์ Runtime Exception์ ์์๋ฐ๊ณ ์์ง ์์
= Runtime Exception์ด ์๋ ์์ธ๋ค์ ์ปดํ์ผ ์์ ์์ธ ๋ฐ์ - ํด๊ฒฐ๋ฐฉ๋ฒ = ๐ก try-catch๋ก ๋ฌถ์ด์ค๋ค.
- ์ด ๊ฒฝ์ฐ ์์ธ๋ฅผ ๊ฐ์ ํ๋ค. (=Checked Exception)
<Runtime Exception์ ํน์ง>
- java.langํจํค์ง
- Exceptionํด๋์ค์ ์๋ธํด๋์ค
- ์ฃผ๋ก ์คํ ์ ๋ฐ์ํ๋ ์์ธ
- ๋น๊ฒ์ฌํ ์์ธ (Unckecked Exception)
Runtime Exception๊ณผ ๊ทธ ์๋ธ ํด๋์ค๋ ๋น๊ฒ์ฌํ ์์ธ๋ค๋ก ๋ถ๋ฅ๋์ด
์ปดํ์ผ ์์ ์ โ์ฒดํฌ๋์ง ์๊ณ โ ์ฃผ๋ก ํ๋ก๊ทธ๋๋จธ ์ค์๋ก ์ธํด ๋ฐ์
ex. ์๋ชป๋ ํ๋ณํ, ๋ฐฐ์ด์ ์๋ชป๋ ์ธ๋ฑ์ฑ ๋ฑ - ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ๊ธฐ ์๊ธฐ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํด์น์ง ์์
ํ์ง๋ง ์ฌ๊ฐํ ์ค๋ฅ๋ฅผ ๋ํ๋ผ ์๋ ์์ - ex. ArrayIndexOutOfBoundsException : ๋ฐฐ์ด์ ์ธ๋ฑ์ค ์๋ชป ์ ๊ทผ
NullPointerException : null ์ฐธ์กฐ์ ๋ํ ์ฐ์ฐ ์๋
ClassCastException : ์๋ชป๋ ํ๋ณํ ์๋
ArithmeticException : ์ํ์ ๋ถ๊ฐ๋ฅํ ์ฐ์ฐ ์๋ (0์ผ๋ก ๋๋๊ธฐ ๋ฑ)
โ2. ์ปดํ์ผ ์ ์ฒดํฌํ๋ ์์ธ (Checked Exception)
<์คํ ์ ์์ธ๋ฐ์์ค : ์ด ๊ฒฝ์ฐ๋ ๋ง๋ค์ด์ค์ผ๋ง ์์ธ๊ฐ ๋ฐ์ํ์ง ์์>
FileInputStream fis = null;
try{
fis = new FileInputStream("test.txt");
}catch (FileNotFoundException e){
System.out.println(e);
}

<Chekced Exception์ ํน์ง>
- ์ปดํ์ผ ์์ ์ ์ฒดํฌ๋๋ ์์ธ์ ํ
- Exceptionํด๋์ค์ ์๋ธํด๋์ค์ด์ง๋ง, Runtime Exception์ ์๋ธํด๋์ค๋ ์๋
- ์ฃผ๋ก ํ๋ก๊ทธ๋จ์ ์ธ๋ถ์์ธ์ ์ํด ๋ฐ์ํ ์ ์๋ ์์ธ์ํฉ
- ์ปดํ์ผ๋ฌ๊ฐ ์ฒดํฌํ ์ด ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์ค๋ฅ ๋ฐ์
try-catch๋ธ๋ก ์ฌ์ฉ ํน์ throws ํค์๋๋ฅผ ์ฌ์ฉํ ์์ธ๋ฅผ ํธ์ถํ ๋ฉ์๋๋ก ์ ํ - ์์ธก๊ฐ๋ฅํ ์์ธ : ํ๋ก๊ทธ๋จ ์ธ๋ถ ์์ธ, ํ์ผ ์์คํ ์ค๋ฅ, ๋คํธ์ํฌ ๋ฌธ์ , DB์ฐ๊ฒฐ ์ค๋ฅ ๋ฑ
- ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ํฅ์์ํค๊ธฐ์ํด ์ฌ์ฉ
- ๊ฐ๋ฐ์๋ ์์ธ์ํฉ์ ๋ํด ๋ช ์์ ์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํจ
- ํ๋ก๊ทธ๋จํ๋ฆ์ ์์ธก๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ๊ธฐํ๋ฅผ ์ ๊ณต
- ex. IOException : ํ์ผ ์
์ถ๋ ฅ ์ ๋ฐ์
SQLException : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ฐ์
FileNotFoundException : ์กด์ฌํ์ง ์๋ ํ์ผ์ ์ ๊ทผ์ ๋ฐ์
<์์ธ์ฒ๋ฆฌ>
โ1. try-catch-finally
- ๋ด๊ฐ ์ง์ ์์ธ๋ฅผ ํ๋จํ๊ณ ์ฒ๋ฆฌํด์ค๋ค.
โ2. throws Exception
- ์์ธ๋ฅผ ๋์ง๋ค.
- ์์ธ๋ฅผ ๋ฐ์ ์ชฝ์์ ์ฒ๋ฆฌํด์ผํ๋ค.
- main๋ฉ์๋์์ throws๋ก ๋์ง๋ค๋ฉด JVM์๊ฒ ์์ธ๋ฅผ ๋์ง๋ ๊ฒ
<throws Exception ์์ >
public static void main(String[] args) throws FileNotFoundException{
FileInputStream fis = new FileInputStream("abc");
}
โ์์ธ๋ ๋๊ธฐ๊ธฐ (throws)
- =์์ธ์ ํ
=Exception Propagation - ๋ฉ์๋๊ฐ ๋ฐ์์ํจ ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์๊ณ ๊ทธ ๋ฉ์๋๋ฅผ ํธ์ถํ ์์ ๋ฉ์๋์ ์์ธ์ฒ๋ฆฌ๋ฅผ โ์์ํ๋ ๋ฐฉ๋ฒโ
- ์ฑ ์์ ๋ถ๋ฆฌ : ๊ฐ ๋ฉ์๋๋ ํด๋์ค๋ ์์ธ์ฒ๋ฆฌ์๋ ๊ด๋ จ์์ด ์์ ์ ๊ธฐ๋ฅ์ ์ง์ค
- ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ ์ ์ง : ๋ฉ์๋ ๋ด ์์ธ์ฒ๋ฆฌ ์์๋ ๋ฉ์๋์ ์ฃผ๋ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ์์ด ์ฝ๋๊ฐ ์ถ๊ฐ
- ์ฌ์ฌ์ฉ์ฑ ๋ฐ ์ ์ง ๋ณด์์ฑ ํฅ์ : ์์ธ์ฒ๋ฆฌ ๋ก์ง์ ํน์ ๋ฉ์๋์์๋ง ๊ตฌํํ๋ฉด
๋ค๋ฅธ ์ํฉ์์ ๋์ผํ ์์ธ๋ฐ์ ์ ์ฝ๋ ์ค๋ณต ์์ฑํ๊ฒ๋จ - ํ๋ฆ ์ ์ด : ์์ธ๋ฐ์ ์ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์์๋ ๋ฒจ๋ก ์ฝ๊ฒ ์ด๋์์ผ ๋ ํจ๊ณผ์ ์ผ๋ก ์ ์ด ๊ฐ๋ฅ
- ์ ์ ํ ์์ธ์ฒ๋ฆฌ ์์น ๊ฒฐ์ : ๋ชจ๋ ์์ธ๋ค์ ๋ฐ์ํ ๊ณณ์์ ์ ์ ํ ์ฒ๋ฆฌ๋ ์ ์๋ ๊ฒ์ ์๋๋ฏ๋ก,
๋๋ก ์์๋ฉ์๋์์ ์์ธ๋ฅผ ๋ ์ ์ ํ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ - ๐ก์ค๋ฌด์์๋ ๋ด๊ฐ ์ฒ๋ฆฌํ๊ธฐ ํ๋ ๋ฌธ์ ๊ฐ ์์๋ ๋น ๋ฅด๊ฒ ๋ณด๊ณ ํ๋๊ฒ ๋ ๋์ ์ ์๋ค.
โถ๏ธ์์ - ์์ธ๋ฅผ ๋ฉ์๋ ๋ณ๋ก ์ฒ๋ฆฌ
// exceptionProcessA() : ์ด ๋ฉ์๋์์ ์์ธ๋ฅผ ์ง์ ์ฒ๋ฆฌํ๋ค.
public static void exceptionProcessA() {
try{
FileInputStream fis = new FileInputStream("abc");
}catch(Exception e){
System.out.println(e);
}
}
// exceptionProcessB() : ์ด ๋ฉ์๋์์๋ ํธ์ถํ ๊ณณ์ผ๋ก ์์ธ๋ฅผ ๋์ง๋ค
public static void exceptionProcessB() throws FileNotFoundException {
FileInputStream fis = new FileInputStream("abc");
}
public static void main(String[] args) {
// exceptionProcessA() ๋ฉ์๋์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ฃผ์๊ธฐ๋๋ฌธ์ ํธ์ถํ๊ธฐ๋ง ํ๋ ์
exceptionProcessA();
// exceptionProcessB()๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ๋๋ฌธ์ ์์ธ๋ฅผ ์ ๋ฌ๋ฐ์ ์ง์ ์ฒ๋ฆฌํด์ฃผ๋ ์
try{
exceptionProcessB();
}catch(FileNotFoundException e){
System.out.println(e);
}
}
- exceptionProcessA()
์ด ๋ฉ์๋์์ ์์ธ๋ฅผ ์ง์ ์ฒ๋ฆฌํ๋ค. - exceptionProcessB()
main๋ฉ์๋์์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ด ์์ธ๋ฅผ ๋ฐ๋๋ค.
= ํธ์ถํ ๊ณณ์์๋ ์์ธ๋ฅผ throws or ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผํ๋ค.
โถ๏ธ์ค์ต - throws๋ก Exception๊ณผ Runtime Exception์ ์ง์
// ๋ฉ์๋๊ฐ ์คํ๋๋ ๋์ ์์ธ๊ฐ ๋ฐ์ํ ์ ์์
// Runtime Exception์ ํด๋นํจ
public static void exceptionProcessC() throws RuntimeException{
}
// Exception์ Runtime Exception์ ์์๋ฐ์ง ์์ผ๋ฏ๋ก
// Checked Exception์ ํด๋นํจ
public static void exceptionProcessD() throws Exception{
}
public static void main(String[] args) {
// ์์ธ์ฒ๋ฆฌ๋ฅผ ์ง์ ํ์ง ์์๋ ์๋ฌ๊ฐ ํ์๋์ง ์์
exceptionProcessC();
// ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋์ ํด์ผ ์๋ฌ๊ฐ ์ฌ๋ผ์ง
exceptionProcessD();
}
exceptionProcessD()๋ฅผ ์์ธ์ฒ๋ฆฌํจ
public static void main(String[] args) {
// ์์ธ์ฒ๋ฆฌ๋ฅผ ์ง์ ํ์ง ์์๋ ์๋ฌ๊ฐ ํ์๋์ง ์์
exceptionProcessC();
// ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋์ ํด์ผ ์๋ฌ๊ฐ ์ฌ๋ผ์ง
try {
exceptionProcessD();
} catch (Exception e) {
System.out.println(e);
}
}
<์ด์ ๋ฆฌ์ฝ๋>
public static void exceptionProcessC() throws RuntimeException{
// 1) ์์ธ๋ฐ์ ์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ์ชฝ์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ๋๊น (๋งก๊น) - UnChecked Exception์ด ๋ฐ์
}
public static void exceptionProcessD() throws Exception{
// 2) ์์ธ๋ฐ์ ์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ์ชฝ์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ๋๊น (๋งก๊น) - Checked Exception์ด ๋ฐ์
}
public static void exceptionProcessE() {
// 3) ์์ธ๋ฐ์ ์, ์ด ๋ฉ์๋ ๋ด์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ ๊ฒฝ์ฐ
try{
}catch (Exception e){
System.out.println(e);
}
}
public static void main(String[] args) {
// 1) ์์ธ์ฒ๋ฆฌ๋ฅผ ์ง์ ํ์ง ์์๋ ์๋ฌ๊ฐ ํ์๋์ง ์์
exceptionProcessC();
// 2) ์์ธ์ฒ๋ฆฌ๋ฅผ [๋ฐ๋์] ํด์ผ ์๋ฌ๊ฐ ์ฌ๋ผ์ง
try {
exceptionProcessD();
} catch (Exception e) {
System.out.println(e);
}
// 3) ์์ธ๊ฐ ๋ฉ์๋ ๋ด์์ ์ฒ๋ฆฌ๋์์
exceptionProcessE();
}
โ์์ธ์ฒ๋ฆฌ์ ์ ํฉํ ๋ฐฉ๋ฒ
์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
- ์์ธ๋ฅผ ์์ํด๋์ค๋ก ๋์ง๋ฉด ์์ํด๋์ค์์ ํด๊ฒฐ๋ฒ์ ๋์์ค ์ ์๋ค. [์์ธ๋ฅผ ๋์ง]
์์ธ๋ฅผ ๋์ง๋ ๊ฒ์ด ๊ผญ ๋์์ง ์์ ๊ฒฝ์ฐ์ด๋ค. - ์์ธ๋ฅผ ๋ณธ์ธ์ด ๋ง์๋๋ก ์ฒ๋ฆฌํ๋ฉด ์ํ๋๋๋ง ๋ชปํ ์ ์๋ค. [์ค์ค๋ก ์์ธ์ฒ๋ฆฌ]
โCheckedException vs UnChecked Exception
1. Checked Exception
= Runtime Exception์ ์์๋ฐ์ง ์์ ์์ธ๋ค
- FileInputStream ๊ฐ์ ๊ฒฝ์ฐ throws๋ฅผ ๋์ ธ์ ์คํ ์ ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ผญ ํด์ผํจ
- ํ์ผ๋ช ์ด ์ ์ด์ ์์ผ๋ฉด ํ์ผ์ ๋ง๋ค์ง ๋ชปํ๋ฏ๋ก, ๊ทธ๋ฌํ ๊ฒฝ์ฐ
- Java IO๊ฐ ๊ฐ์ง๊ณ ์๋ ํด๋์ค๋ค์ ๋์ฒด๋ก Chekced Exception์ด ๋ง์ด ๋ฐ์ ๋์ฒด๋ก throws๋ก ๋์ ธ์ฃผ๊ณ ์์
- ๐กJava IO๋ ๋จ์ํ ์ฐ์ง ๋ชปํ๊ณ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ผญ ํด์ฃผ์ด์ผ โ๊ฐ์ฒด ์์ฑ์ด ์ ๋๋ก ๋จโ
- โญJava IO๋ ๋ฐ์ฝ๋ ์ดํฐ ํจํด์ ํ๋ ์ฌ์ฉํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋
๊ทธ ์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
โก๏ธ์์ฑ์ ์์ ์์ฑ์๊ฐ ์๋ ๊ฒฝ์ฐ (new InputStreamReader)
= ๋ฐ์ฝ๋ ์ดํฐ ํจํด : "๋ชฉ์ ์ง, ๊ทผ์์ง ๋ฑ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๊ฐ์ ธ๋ค๊ฐ ์ฝ๊ณ /์ฐ๊ณ ํ๋ ๊ฒ๋ค์ด ๋ฐ๋๋ ํจํด"
2. UnChecked Exception
= Runtime Exception์ ์์๋ฐ์ ์์ธ๋ค
- IndexOutOfBounds ๊ฐ์ ๊ฒฝ์ฐ ์ปดํ์ผ ์์๋ ๋ฌธ์ ์์ผ๋, ์คํํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํจ
๐์ค์ต - ์ฌ๋ถ๋ฆ ์์ธ์ฒ๋ฆฌ
- ๋ด๊ฐ ์์ธ๋ฅผ ์ง์ ์ฒ๋ฆฌํ์๋์
- ์์ธ๋ฅผ ๋๊ฒผ์๋๋ฅผ ์ค์ต
<์ฌ๋ถ๋ฆA()> - ์์ธ๋ฐ์ ์ ๋ด๊ฐ ์ง์ ์ฒ๋ฆฌ
// ์ฌ๋ถ๋ฆA() - ์์ธ ๋ฐ์ ์ ๋ด๊ฐ ์ง์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
public static void workingA(){
String call = "๊ณผ์์ฌ์๋ผ";
char[] calls = call.toCharArray();
try{
calls[6] = '!';
}catch(Exception e){
System.out.println(" : [A-์์ธ์ฒ๋ฆฌ] ํ๋ด์ง ๋ง์ธ์.");
}
System.out.println("[๋ด๊ฐ์ฒ๋ฆฌ] : ์์์ ์ฌ๊ฐ๊ฒ์\n");
}
<์ฌ๋ถ๋ฆB()> - ์์ธ๋ฐ์ ์ ์์ํด๋์ค๋ก ๋์ง๋ ๋ฐฉ์ throws
// ์ฌ๋ถ๋ฆB() - ์์ธ ๋ฐ์ ์ throwsํ๋ ๋ฐฉ์
public static void workingB() throws Exception{
String call = "๊ณผ์์ฌ์๋ผ";
char[] calls = call.toCharArray();
calls[6] = '!';
}
<main()> - ๋์ ธ์ง Exception์ try-catch๋ก ์ฒ๋ฆฌ
public static void main(String[] args) {
workingA();
try{
workingB();
}catch(Exception e){
System.out.println(" : [B-์์ธ์ฒ๋ฆฌ] ํ๋ด์ง ๋ง์ธ์");
System.out.println("[์์ธ๋๊น] : ๋ญ ์ฌ๊ฐ๊น์?");
}
}

<์์ธ์ฒ๋ฆฌ ๋ณ try-catch-finally ์คํ๋๋ ๋ถ๋ถ ํ๋จ>
public static void main(String[] args) {
// 1. ์์ธ๋ฐ์ ์ ์ด ์์ธ๋ฅผ ์ ์ฒ๋ฆฌํ์๋
// > try์ ์์ธ ๋ฐ์ ๋ฐ ๋ฌธ์ฅ์ด ์คํ๋์ง ์์
int[] arr = {1, 2, 3};
try{
System.out.println("try - start");
System.out.println(arr[3]);
System.out.println("try - end");
}catch(IndexOutOfBoundsException e){
System.out.println(e);
}
System.out.println("1. To-do");
System.out.println("2. To-do");
System.out.println("3. To-do");
System.out.println("๋");
}

- arr[3]์์ ์์ธ๊ฐ ๋ฐ์ํ์ฌ, IndexOutOfBoundsException์ผ๋ก ์ ์ฒ๋ฆฌํด์ฃผ์๊ธฐ๋๋ฌธ์
- catch๋ฌธ์ด ์คํ๋์๊ณ
- main์ ๋ฌธ์ฅ๋ ์คํ์ด ๋์๋ค.
// 2. ์์ธ๋ฐ์ ์ ์ด ์์ธ๋ฅผ ์ ์ฒ๋ฆฌํ์ง ๋ชปํ์๋
// > try์ ์์ธ ๋ฐ์ ๋ฐ ๋ฌธ์ฅ์ด ์์ ์คํ๋์ง ์์
int[] arr = {1, 2, 3};
try{
System.out.println("try - start");
int i = arr[2] / 0;
System.out.println(arr[3]);
System.out.println("try - end");
}catch(IndexOutOfBoundsException e){
System.out.println(e);
}
// ...

- int i = arr[2] / 0 ์์ ์์ธ๊ฐ ๋ฐ์๋์๋๋ฐ, ArithmeticException ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ๋ชปํ์ฌ
- try๋ฌธ์ ๊ทธ ๋ฐ ๋ฌธ์ฅ์ด ์คํ๋์ง ์๊ณ ,
- catch๋ฌธ์ ๋ฌธ์ฅ๋ ์คํ๋์ง ์์ผ๋ฉฐ
- main๋ฉ์๋์ ๋ฌธ์ฅ๋ ์คํ๋์ง ์๋๋ค.
// 3. ์์ธ๋ฐ์๊ฐ ๋ฐ์ํ์ง ์์์๋
// > ๋ชจ๋ ๋ฌธ์ฅ์ด ์คํ๋จ
// + finally๋ธ๋ญ ์ถ๊ฐ
int[] arr = {1, 2, 3};
try{
System.out.println("try - start");
int i = arr[2] / 1;
System.out.println(arr[2]);
System.out.println("try - end");
}catch(IndexOutOfBoundsException e){
System.out.println(e);
}finally{
System.out.println("๋ฐ๋์ ์คํ๋๋ ๋ธ๋ญ");
}
//...

์์ธ๊ฐ ๋ฐ์ํ์ง ์์์๋, try๋ฌธ ์์ ๋ชจ๋ ๋ฌธ์ฅ์ ๋ฌผ๋ก finally๋ฌธ์ฅ, main์ ๋ฌธ์ฅ๊น์ง ์คํ๋๋ค.
<์ฌ์ฉ์ ์ ์ ์์ธ>
1. ์ผ๋ฐ์ ์ผ๋ก๋
- ํ์ผ์ด ๋ค์ด์์ผํ๋๋ฐ ํ์ผ์ด ์๋ค.
- ๊ฐ๋ฆฌ์ผ์ผํ๋ ๊ฐ์ด ์๋ค ์ด๋ฐ ๊ฒ๋ค์ ๋ณดํธ์ ์ธ ์์ธ๋กํด์ โ์๋ฐ๊ฐ ์ด๋ฏธ ์ ์ํ๊ณ ์์โ
2. ์ด๋ ๊ฒ ์๋ฐ๊ฐ ์ ์ํ ๊ฒ๋ค์ ์ ์ธํ๊ณ
์ฌ์ฉ์๊ฐ ์ ์ํ๋ ์์ธ ์ฌ์ฉ์๊ด์ ์ ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์ํ์ ์๊ณ ๋ณด๋ค ๋ ํฐ ๊ธ์ก์ ์ถ๊ธํ๋ คํ ๋ โ ์์ธ๋ฅผ ์ฌ์ฉ์๊ฐ ์ง์ ๋ง๋ค์ด์ผํจ
- ์ฑ์ ์ด 0~100๊น์ง ๋ค์ด์์ผํ๋๋ฐ 101์ ์ด ๋ค์ด์ค๋ฉด ์๋๋ฏ๋ก ์ด๋ฌํ ๊ฒฝ์ฐ๋ ์๋ฐ๊ฐ ์ ์ํ ์ ์๊ณ ์ฌ์ฉ์๊ฐ ์ ์ํ ์ ์๋ค.
โถ๏ธ์์ - ์ฌ์ฉ์ ์ ์ ์์ธ - ์ฌ๋ฐ๋ฅธ ์ ์ ์ ๋ ฅ
public static void inputScore(int score){
// ๊ฐ์ ๋ฐ์๋ค์ผ๋, 101์ ์ด์์ด๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ ์ถ์
// 1. ์ผ๋ฐ์ ์ธ ๋ฌธ๊ตฌ์ถ๋ ฅ์ผ๋ก ๋ค์ ์
๋ ฅ์ ์๊ตฌํ๋ ์์
if(0 < score || score > 100){
System.out.println("[์ฌ์
๋ ฅ์๊ตฌ] : ์ ์๋ 0~100๊น์ง๋ง ์
๋ ฅํด์ฃผ์ธ์.");
return;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("์ ์๋ฅผ ์
๋ ฅํ์ธ์ : ");
inputScore(sc.nextInt());
}
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ ๋ ฅ์ ์๊ตฌํ์ฌ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ ์์
public static void inputScore(int score){
// ๊ฐ์ ๋ฐ์๋ค์ผ๋, 101์ ์ด์์ด๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ ์ถ์
// 2. ์ด ์ํฉ์ ์ฌ์ฉ์๊ฐ ์ ์ํ ์์ธ๋ก ํ๋จํ์ฌ ์์ธ๋ฅผ ๋ฐ์
if(0 < score || score > 100){
throw new Exception("[์์ธ๋ฐ์] : ์ ์๋ 0~100๊น์ง๋ง ์
๋ ฅํด์ฃผ์ธ์.");
}
System.out.println("ํ์์ ์ ์ : " + score + "์ ");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("์ ์๋ฅผ ์
๋ ฅํ์ธ์ : ");
inputScore(sc.nextInt());
}
- ์ฌ์ฉ์๊ฐ ์์ธ๋ฅผ ์ ์ํ์ฌ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ ์ด์ง๋ง

- ์ด์ฒ๋ผ ์๋ฌ๊ฐ ๋ฐ์ํ์๋ main์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ผํ ์ง,
๋ฉ์๋์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ผํ ์ง ํ๋จํด์ผํ๋ค. - ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ๋ฉ์๋์์๋ throws Exception ์ผ๋ก ์์ธ๋ฅผ ๋์ง๊ณ
์ฌ์ฉ์์๊ฒ ์ ๋ ฅ์ ๋ฐ๋ main๋ฉ์๋์์ try-catch ๋ธ๋ก์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ค.
public static void inputScore(int score) throws Exception{
// ๊ฐ์ ๋ฐ์๋ค์ผ๋, 101์ ์ด์์ด๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ ์ถ์
// 2. ์ด ์ํฉ์ ์ฌ์ฉ์๊ฐ ์ ์ํ ์์ธ๋ก ํ๋จํ์ฌ ์์ธ๋ฅผ ๋ฐ์
if(0 < score || score > 100){
throw new Exception("[์์ธ๋ฐ์] : ์ ์๋ 0~100๊น์ง๋ง ์
๋ ฅํด์ฃผ์ธ์.");
}
System.out.println("ํ์์ ์ ์ : " + score + "์ ");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("์ ์๋ฅผ ์
๋ ฅํ์ธ์ : ");
try{
inputScore(sc.nextInt());
}catch(Exception e){
System.out.println(e.getMessage());
}
}
โถ๏ธ์์ - ์์ธ๊ฐ์ฒด ์ง์ ๋ง๋ค๊ธฐ
= ์์ธ๊ฐ์ฒด๋ฅผ ์ง์ ์ค๊ณํ ์ ์๋ค.
// ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ์์ธ (์ง์ ์ด๋ฆ์ ์ง์ ์์ธ)
public class MyException extends Exception{
//...
}
- ์์ธ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ์ฒซ๋ฒ์งธ๋ Exception์ ์์๋ฐ์ผ๋ฉด ๋๋ค.
extends Exception - UnChekced Exception์ ๋ฐ์์ํค๊ณ ์ถ์ผ๋ฉด Runtime Exception์ ์์๋ฐ์ผ๋ฉด ๋๋ค.
extends RuntimeException - ์ด์ ์ฌ์ฉ์ ์ ์ ์์ธ๋ฅผ ๋ง๋ ํ ๋ค๋ฅธ ํด๋์ค์์ ์์ธ๋ฅผ ๋ฐ์์ํฌ๋
throw new MyException(); ์ฒ๋ผ ์จ์ฃผ๋ฉด ๋๋ค.
์์ธ๋ฐ์ ์ MyException์ผ๋ก ์์ธ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

- ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด์์๋ ๋ฉ์์ง๊ฐ ๋ฐ์ํ๋๋ก ํ ์ ์๋ค.
= ์์ฑ์๋ฅผ ๋ง๋ ๋ค.
// ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ์์ธ (์ง์ ์ด๋ฆ์ ์ง์ ์์ธ)
// ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ = Exception์ ์์๋ฐ๊ธฐ
public class MyException extends Exception{
// ๊ธฐ๋ณธ์์ฑ์์์๋ super๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌ ๊ฐ๋ฅ
public MyException() {
super("MyException ์์ธ");
}
// Exception๋ฐ์ ์ ๋ฉ์์ง๋ฅผ ๋ฃ๊ณ ์ถ์
public MyException(String message) {
super(message);
}
}
โถ๏ธ์ค์ต - ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด ํ์ฉ - ์ฌ๋ฐ๋ฅธ ๋ก๋ ๋ฒํธ
<inputLottoNumbers()> - ๋ก๋๋ฒํธ๋ฅผ ๊ฒ์ฌํ๋ ๋ฉ์๋
public static void inputLottoNumbers(int num) throws Exception{
if(1 > num || num > 45){
throw new MyException("์ฌ๋ฐ๋ฅธ ๋ก๋ ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์");
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("๋ก๋ ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ : ");
try{
inputLottoNumbers(sc.nextInt());
}catch(Exception e){
// ์ธ ์ข
๋ฅ์ ์์ธ ๋ฉ์์ง ์ถ๋ ฅ
System.out.println("e.getMessage() : " + e.getMessage());
e.printStackTrace();
System.out.println("e : " + e);
}
}
<MyExceptionํด๋์ค> - ์ง์ ์ ์ํ ์์ธ
// ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ์์ธ (์ง์ ์ด๋ฆ์ ์ง์ ์์ธ)
// ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ = Exception์ ์์๋ฐ๊ธฐ
public class MyException extends Exception{
// ๊ธฐ๋ณธ์์ฑ์์์๋ super๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌ ๊ฐ๋ฅ
public MyException() {
super("MyException ์์ธ");
}
// Exception๋ฐ์ ์ ๋ฉ์์ง๋ฅผ ๋ฃ๊ณ ์ถ์
public MyException(String message) {
super(message);
}
}

๐์ค์ต - ์ฌ์ฉ์ ์ ์ ์์ธ๊ฐ์ฒด ํ์ฉ - ๊ฐ๋จํ ์ํ ํ๋ก๊ทธ๋จ
- ํต์ฅ ๊ฐ์ฒด
- ์ถ๊ธํ๋ค() : ์์ก๋ณด๋ค ๋ ๋ง์ ๊ธ์ก์ด ์ถ๊ธ๋๋ฉด ์์ธ๋ฐ์ (ex. BankException (์ฌ์ฉ์์ ์์์ธ๊ฐ์ฒด))
- ์ ๊ธํ๋ค()
<Accountํด๋์ค> - ํต์ฅ, ๊ณ์ข ํด๋์ค
private static int money; // ๊ณ์ข ์์ก
public int getMoney() {
return money;
}
// ์์ฑ๋ ๋ ๋๋คํ ๊ณ์ข ์์ก์ ์ค์ ํ๋๋ก ํจ
public Account() {
randomAccountMoney();
}
// 10000์๋ถํฐ 99000์๊น์ง ๊ณ์ข ์์ก์ ๋๋คํ๊ฒ ์ค์
public static void randomAccountMoney(){
money = ((int)(Math.random()*99+10)) * 1000;
}
- Getter๋ฉ์๋๋ก money๋ฅผ ๊ณ์ข ์์ก์ ๊ฐ์ ธ์ฌ ์ ์์
- Math.random()์ ์ด์ฉํ์ฌ 10~99๊น์ง ๋ฝ๊ณ ๊ทธ๊ฐ์ ์ ์ํ๋ณํ ํ ํ 1000์ ๊ณฑํ์ฌ 10000~99000๊น์ง์ ๋๋คํ
๊ณ์ข ์์ก์ ๋ง๋ค์ด๋
<main()> - ์ ๊ธ, ์ถ๊ธ์ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ , ํ๋ก๊ทธ๋จ ์คํ์ ๋ด๋น
// ์
๊ธํ๋ค()
public static void deposit(int money) throws Exception{
if(money < 0){ // ์
๊ธํ ๊ธ์ก์ด ์์์ผ ๊ฒฝ์ฐ ์์ธ์ฒ๋ฆฌ
throw new BankException("[์์์
๋ ฅ] : ์ฌ๋ฐ๋ฅด์ง ์์ ๊ฐ์
๋๋ค.");
}
System.out.println("์
๊ธ ์ ์์ก : " + userRandomMoney);
System.out.println("์
๊ธ ํ ์์ก : " + (userRandomMoney+money));
}
// ์ถ๊ธํ๋ค()
public static void withdrawal(int money) throws Exception{
if(userRandomMoney < money){ // ์ถ๊ธํ ๊ธ์ก์ด ๊ณ์ข์์ก๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ ์์ธ์ฒ๋ฆฌ
throw new BankException("์์ก์ด ๋ถ์กฑํฉ๋๋ค");
}
System.out.println("์ถ๊ธ ์ ์์ก : " + userRandomMoney);
System.out.println("์ถ๊ธ ํ ์์ก : " + (userRandomMoney-money));
}
- ์ ๊ธ์ ์์๊ฐ ์ ๋ ฅ๋๋ฉด BankException์ ๋ฐ์์ํด
- userRandomMoney๋ก ๊ฐ์ ๋ถ๋ฌ์์ ์ ๋ ฅ๋ฐ์ money๋ฅผ ๋ํ๊ฑฐ๋ ์ฐจ๊ฐ
- ์ถ๊ธ์ ๊ณ์ข ์์ก๋ณด๋ค ์ถ๊ธ ๊ธ์ก์ด ๋ง์ ๊ฒฝ์ฐ BankException์ ๋ฐ์์ํด
<BankException ํด๋์ค> - ์ํ๊ด๋ จ ์์ธ๋ฅผ ๋ฐ์ (์ฌ์ฉ์ ์ ์ ์์ธ์ฒ๋ฆฌ)
public class BankException extends Exception{
public BankException() {
super("[์ํ] ์์ธ๊ฐ ๋ฐ์ํ์์ต๋๋ค.");
}
public BankException(String message) {
super(message);
}
}
<main()> - ์ฌ์ฉ์์๊ฒ ๋ฉ๋ด๋ฅผ ์ ๋ ฅ๋ฐ์
int userMenu = sc.nextInt();
switch (userMenu){
case 1: // ์
๊ธ ์์คํ
์ ๋ฌ
System.out.print("์ผ๋ง๋ฅผ ์
๊ธํ์๊ฒ ์ต๋๊น? : ");
try{
deposit(sc.nextInt());
}catch(Exception e){
e.printStackTrace();
}
break outter;
case 2: // ์ถ๊ธ ์์คํ
์ ๋ฌ
System.out.print("์ผ๋ง๋ฅผ ์ถ๊ธํ์๊ฒ ์ต๋๊น? : ");
try{
withdrawal(sc.nextInt());
}catch(Exception e){
e.printStackTrace();
}
break outter;
default: // ์ฌ๋ฐ๋ฅด์ง ์์ ๋ฉ๋ด ์
๋ ฅ
System.out.println("๋ค์ ์
๋ ฅํด์ฃผ์ธ์.");
}
- ์ฌ์ฉ์์๊ฒ ๋ฉ๋ด๋ฅผ ์ ๋ ฅ๋ฐ์ switch๋ฌธ์ผ๋ก ์ฒ๋ฆฌ
- ๊ฐ๊ฐ์ ๋ฉ์๋๋ก ๋ณด๋ด๊ณ , try-catch๋ฌธ์ ํตํด ์์ธ์ฒ๋ฆฌ๋ฅผ ํจ




๐ ์ด๋ฒ ๊ฐ๋จํ ์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ์ค์ตํด๋ณด๋ฉฐ, ์ ๊ธ, ์ถ๊ธ ๊ธฐ๋ฅ๋ง๊ณ ๋ ๊ณ์ข ์์ฑ, ๊ณ์ข ํ์ธ, ์์ก ํ์ธ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ ๋ณต์กํ ๋ก์ง์ด ํ์ํ ๊ฒ ๊ฐ๋ค๊ณ ๋๊ผ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฐ๋๋์ง ์์ ์ด์ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์์ ๋ฐ์ดํฐ๋ค์ด ๋ด๊ธฐ๊ณ , ์ข ๋ฃ๋ ๋ ๋ชจ๋ ์ฌ๋ผ์ง๋ฏ๋ก
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ์ฌ ์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒ๋ ๋ฐฐ์์ผํ ๊ฒ ๊ฐ๋ค.
๊ฐ๋จํ ์ ๊ธ, ์ถ๊ธ ๊ธฐ๋ฅ์ ๊ฐ์ง ์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ด์ง๋ง ์ฌ์ฉ์ ์ ์ ์์ธ๋ก ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ์์์ ๋ ฅ, ์์ก๋ถ์กฑ ๋ฑ์ Exception๋ฌธ๊ตฌ๋ฅผ ์ถ๋ ฅํด๋ณผ ์ ์์๋ค.
โ์์ธ์ฒ๋ฆฌ๋ฅผ ์ ๋๋ก ํ์ง ์์ ๊ฒฝ์ฐ
- ํ๋ก๊ทธ๋จ์ ๋น์ ์์ ์ค๋จ
- ๋ฐ์ดํฐ์์ค
- ๋ณด์ ์ทจ์ฝ์
- ์ฌ์ฉ์ ๊ฒฝํ ์ ํ
- ์ ์ง๋ณด์์ ์ด๋ ค์
<๋ค์ํ ์์ธ>
= ์๋ฐ๊ฐ ๋ฏธ๋ฆฌ ์ ๊ณตํ๋ ์์ธ ํด๋์ค
java.langํจํค์ง์ java.ioํจํค์ง์ ๋๋ถ๋ถ ํฌํจ
โError์ ์๋ธํด๋์ค
- ์ด ์๋ฌ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์๋ฌ์ ์์ธ๋ ๋ค๋ฅด๋ค. ์๋ฌ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ป๊ฒ ํ ์ ์์ง๋ง, ์์ธ๋ ์ฐ๋ฆฌ๊ฐ ๋์ฒ๊ฐ๋ฅ
- OutOfMemoryError : JVM์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ ๋ฐ์
- StackOverflowError : ์คํ ์ค๋ฒํ๋ก์ฐ ๋ฐ์ (๋ฉ์๋ ํธ์ถ์ด ๊น์ด ๋๋ฌด ๋ง์ด ์ค์ฒฉ๋์์๋์ฌ์ฉ)
<JDK์์์ ์์ธ ๋ ๋๊ธฐ๊ธฐ ์ฌ๋ก>
- java.io.InputStream์ read()๋ฉ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์๋ ๋ฐ์ํ ์ ์๋
IOException์ ๋ ๋๊น (ํ์ผ์ด ์กด์ฌํ์ง ์์, ์ฝ๊ธฐ ๊ถํ ์์ ๋ฑ) - java.net.Socket์ ์์ฑ์ ๋คํธ์ํฌ ์ฐ๊ฒฐ๊ณผ ๊ด๋ จ๋ Socketํด๋์ค๋ ์์ธ๋ฅผ ๋ ๋๊น
Socket์ ์์ฑ์๋ ํธ์คํธ ์ฃผ์์ ํฌํธ๋ฅผ ์ฌ์ฉํด ์์ผ์ฐ๊ฒฐ์ ์๋ํ๋ฉฐ
์ด ๊ณผ์ ์์ ์ฌ๋ฌ ๋คํธ์ํฌ ๊ด๋ จ ์์ธ๋ฅผ ๋ฐ์์ํฌ ์ ์์ UnknowHostException๊ณผ IOException์ ๋ ๋๊น
public Socket(String host, int port) throws UnknownHostException, IOException;
- ์ด๋ฅผ ํตํด ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ฌธ์ ๋ ์ /์ถ๋ ฅ ๋ฌธ์ ๋ฐ์ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐํ ์ ๊ณต
โ์ฌ์ฉ์ ์ ์ ์์ธ, ์์ธ๋ฐ์, ์์ธ ๋ ๋๊ธฐ๊ธฐ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ์ด์
- ์ฌ์ฉ์ ์ ์ ์์ธ๋ ์๋ฐ๊ฐ ์ ๊ณตํ๋ ํ์ค ์์ธ๋ค๋ก๋ ํน์ ์ํฉ์ ๋ช
ํํ๊ฒ ํํํ๊ธฐ ์ด๋ ค์ธ๋,
์ค๋ฅ ์ํฉ์ ๋ ๊ตฌ์ฒด์ ์ด๊ณ ๋ช ํํ๊ฒ ์ ๋ฌ ๊ฐ๋ฅ - ์์ธ ๋ฐ์์ํค๊ธฐ๋ ํ๋ก๊ทธ๋จ์์ ์์์น ๋ชปํ ์ํฉ์ด๋ ์กฐ๊ฑด์ ๋ง๋ฌ์๋ ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ค
ํน์ ์กฐ๊ฑด์์ ํ๋ก๊ทธ๋จ์ ์คํ ์ค๋จ ๋ฐ ๋ฌธ์ ๋ฅผ ์๋ ค์ฃผ๊ฑฐ๋ ์ ์ ํ ์กฐ์น๋ฅผ ์ทจํ ์ ์์ - ์์ธ ๋ ๋๊ธฐ๊ธฐ๋ ๋ฐ์ํ ์์ธ๋ฅผ ํธ์ถํ ๋ฉ์๋๋ก ์ ๋ฌํ๋ ๊ฒ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง์
ํ์ฌ์ ๋ฉ์๋ ๋ ๋ฒจ์์ ๋ค๋ฃจ๊ธฐ ์ด๋ ค์ธ๋, ์์๋ ๋ฒจ๋ก ์์ํ๊ธฐ์ํด ์ฌ์ฉ
[์ค๋ฅ ์ฒ๋ฆฌ์ ์ฑ ์์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌ / ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ๋์]
โ์๋ ๋ฆฌ์์ค ๋ซ๊ธฐ
- 1. ์ผ๋ฐ์ ์ผ๋ก finally์์์ try-catch๋ฌธ ์ฒ๋ฆฌ๋ก ๋ซ์์ฃผ๋ ์์
// ์๋๋ฆฌ์์ค ๋ซ๊ธฐ ์์
// 1) ์ผ๋ฐ finally์์ try-catch๋ฌธ ์ฌ์ฉ
public class ExceptionFinally01 {
public static void main(String[] args) {
// ์ฐ๊ฒฐํ๋ฉด, ๋ฐ๋์ ๋ซ์์ผํ๋ ๊ฒ์ด ์ค์ = FildInputStream ๋ฑ
// ๋ฐ๋์ ๋ซ์์ผํ๋ ๊ธฐ๋ฅ์ finally์์ ๊ธฐ๋ฅ
FileInputStream fis = null;
System.out.println("-----1๋ฒ๋ฐฉ๋ฒ ๋ธ๋ก start");
try{
fis = new FileInputStream("abc");
}catch (Exception e){
System.out.println(e);
}finally{ // finally์์๋ try-catch๋ธ๋ก์ ํตํด ๋ฐ๋์ ๋ซ๋ ๊ธฐ๋ฅ close()๋ฅผ ์ํํ๊ณ
// ์ด๋์ ๋ฐ์ํ๋์ง๋ฅผ ์ ์ ์๋๋ก IOException์ ๋ฐ์ํ๋ e๋ฅผ catch๋ฌธ์ ์์ฑ
try{
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
System.out.println("-----1๋ฒ๋ฐฉ๋ฒ ๋ธ๋ก end");
}
}
- 2. โญJava 7๋ถํฐ ์ ๊ณตํ๋ try-with-resources๋ผ๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์๋๋ฆฌ์์ค ๋ซ๊ธฐ
// ์ฐ๊ฒฐํ๋ฉด, ๋ฐ๋์ ๋ซ์์ผํ๋ ๊ฒ์ด ์ค์ = FildInputStream ๋ฑ
FileInputStream fis = null;
System.out.println("-----2๋ฒ๋ฐฉ๋ฒ ๋ธ๋ก start");
// ์ด ๋ฆฌ์์ค๋ฅผ ์ธ๊ฒ์์ try()์์ ๋ฐ๋ก ์ ์ธ
try(FileInputStream fis2 = new FileInputStream("abc")){
}catch(Exception e){
e.printStackTrace();
}
System.out.println("-----2๋ฒ๋ฐฉ๋ฒ ๋ธ๋ก end");
// ์ด๊ตฌ๋ฌธ์ finally๋ก ๋ซ์์ค ๊ตฌ๋ฌธ๊ณผ ๋๊ฐ์ด ๋์ํจ
์ด ๊ตฌ๋ฌธ์ try( ) ์์ ๋ง๋ค์ด์ง ๋ฆฌ์์ค๋ค์ finally์์ ์๋์ผ๋ก close์์ผ์ค๋ค๋ ์๋ฏธ์ด๋ค.
โญ1๋ฒ๋ฐฉ๋ฒ์ ๋ธ๋ก๊ณผ 2๋ฒ๋ฐฉ๋ฒ์ ๋ธ๋ก์ ๋๊ฐ์ ๊ธฐ๋ฅ์ํ๋ค.
1๋ฒ๋ฐฉ๋ฒ๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ๋ณต์กํ๊ณ , ๋ฆฌ์์ค๋ฅผ ๋ซ๋ ๊ฒ์ ์์ด๋ฒ๋ฆฌ๋ ์ค์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
2๋ฒ๋ฐฉ๋ฒ์ฒ๋ผ ๊ฐ๊ฒฐํ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ , ๋ฆฌ์์ค ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ์ฝ๋๋ฅผ ๋ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ ์ ์๊ฒ๋๋ค.
๐ก์ด 2๋ฒ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ (try-with-resources)
๋ฆฌ์์ค ๊ฐ์ฒด๊ฐ AutoCloseable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผํ๊ณ ,
๋๋ถ๋ถ์ Javaํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฆฌ์์ค ํด๋์ค๋ค์ โญโญ์ด๋ฏธ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ค.
์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ง ์์ผ๋ฉด ์ด ํ์
์ ๊ฐ๋ฆฌํฌ ์ ์๋ค.
์๋ก FileInputStream API๋ฅผ ๊ฐ๋ณด๋ฉด

Implements์์ AutoCloseable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๊ณ ,
์ด AutoCloseable ์ธํฐํ์ด์ค๋ 1.7 ๋ถํฐ ์ ๊ณตํ๋ ๊ฒ์ ์ ์ ์๋ค.

โ์์ธ์ ๋ณด์ป๊ธฐ๊ฐ ํ์ํ ์ด์
- ์์ธ ๋ฐ์ ์ ์์ธ๊ณผ ์ํฉ์ ์ ํํ ํ์ ํ๊ณ ๊ฐ์ ์ค์๋ฅผ ๋ฐ๋ณตํ์ง ์๊ฒํจ
- ์ ํํ ๋๋ฒ๊น : ์์ธ์ ๋ณด์๋ ์์ธ๊ฐ ๋ฐ์ํ ์ฝ๋ ์์น (ํ์ผ๋ช , ๋ผ์ธ ๋ฒํธ ๋ฑ)๊ฐ ํฌํจ๋จ
- ํจ์จ์ ์ธ ๋ฌธ์ ํด๊ฒฐ : ์์ธ์ ์ข
๋ฅ์ ๋ฉ์์ง๋ฅผ ์ดํดํ ์ ์์,
์๋ก NullPointerException์ ๊ฐ์ฒด๊ฐ ์ด๊ธฐํํ์ง ์์์ผ๋ฏ๋ก ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ์ด๊ธฐํ์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ํ์ธํ ์ ์์
<์์ธ์ถ๋ ฅ ๋ฉ์๋>
โgetStackTrace()
์์ธ๋ฐ์ ์์น๋ฅผ ๋ฐํํ๋ค.
๐ก(โ์์ธ ๋ฐ์ ์์น : โ+ e.getStackTrace()[0]);
โprintStackTrace()
์์ธ๋ฐ์ ๋ฉ์์ง์ ์์น๋ฅผ ์ถ๋ ฅํ๋ค.
๐์ด ํ ๋จ์ ์๊ฐ์๋
์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ๋ฅผ ๋ฏธ๋ํ๋ก์ ํธ๋ก ์งํํ์๋ค. ์ฒ์์๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ค์ํ๊ฒ ์๊ฐํ์ง ์์์
๋จ์ํ ๊ธฐ๋ฅ๋ง ๊ตฌํํ๊ณ , ์ฌ๋ฐ๋ฅธ ์ ๋ ฅ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ while๋ฌธ์ ํตํด ์ฌ๋ฐ๋ฅธ ๊ฐ์ด ์ ๋ ฅ๋ ๋๊น์ง ๋ฌดํ ๋ฐ๋ณต ์์ผฐ๋ค๋ฉด
์์ธ์ฒ๋ฆฌ๋ฅผ ๋ฐฐ์ฐ๊ณ ๋์๋ ์ด๋์ ๋ try-catch๋ฌธ์ผ๋ก ๋ฌถ์ด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ๋ ๋ ๋ค.
์์ง๊น์ง ์ด ์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ณ ์์ง๋ง ์ฌ์ ํ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํด์ ๋ฃ๋ ๊ฒ์ด ์ด๋ ค์ ๋ค.
์ ๊ธ / ์ถ๊ธ / ๊ณ์ข๋ฑ๋ก / ๊ณ์ขํ์ธ / ์ด๋ฆ ์ค๋ณต ๊ธ์ง ๋ฑ ๊ฐ๊ฐ์ง ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๋ณด๋ ์์ธ์ฒ๋ฆฌ๋ ์ผ๋จ ์ ๊ปด๋๊ณ ๊ตฌํ์๋ง ํ์ฐ๊ณ ์์๋ค.
ํ๋ก์ ํธ ๊ตฌํ์ด ๋ง๋ฐ์ง๋ ๋์ฏค ์์ธ๋ฅผ ๋ฃ์ด๊ฐ๋ฉฐ ํ๋ํ๋ ์ฝ๋๋ฅผ ์์ ํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๐ก 9์ผ์ฐจ์์๋ ์ด๋ ๊ฒ ์์ธ์ฒ๋ฆฌ์ ๋ํด์ ๋ค์ํ๊ณ ๊น๊ฒ ๋ฐฐ์ฐ๊ณ , ์ํ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ ํ๋ก์ ํธ๋ฅผ ํตํด ์์ธ์ฒ๋ฆฌ๋ฅผ ์ง์ ์ฌ์ฉํด๋ณด๊ณ ๊ธฐ๋ฅ๊ตฌํ๊ณผ ํจ๊ป ๊ฐ๋ฐํด๋๊ฐ๋ ๊ณผ์ ์ ๊ฒฝํํ ์ ์์๋ค.
๋จธ๋ฆฟ์์์ ๊ฐ์๊ธฐ ์๊ฐ๋์ ๋ง๋ค๊ณ ์ถ์ดํ ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ๋ค์ ํ ์ค ํ ์ค ์ฝ๋๊ฐ ์ ์จ์ก๋๋ฐ
์๊ตฌ์ฌํญ๊ณผ ์ ํด์ง ํด๋์ค, ๋ฉ์๋๋ฅผ ๋ณด๋ ๋จธ๋ฆฌ๋ ๋ณต์กํด์ง๊ณ ๊ฐ์ฒด์์ ๊ด๊ณ๋ฅผ ์ด๋ป๊ฒ ์ ์ํ ์ง๋ถํฐ ๋ง๋งํ๋ค.
์ด๋ฒ ๋ฏธ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋๋๊ฑด ํ๋ํ๋ ์ค๋ฅ ์ก์๊ฐ๋ฉด์ ์์ฑ์์ผ์ผ๊ฒ ๋ค๋ ์์ง๊ฐ ์๊ฒผ๋ค๋ ๊ฒ์ด๋ค!๐