๐ ๋ค์ด๊ฐ๋ฉฐ
๊ฐ๋ฐ์ ํ ๋ ๊ฐ์ฅ ์ค์ํ ์์ ์ค ํ๋๋ฅผ ๋ฝ์ผ๋ผ๋ฉด '์์ธ์ฒ๋ฆฌ' ๋ฅผ ๋ค ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋ ๊ฐ๋ฐ์ ํ๋ ๊ณผ์ ์์ ์์ธ Exception์ด ๋ฐ์ํ ์ ์๊ณ ํด๋น Exception์ ์ผ๋ง๋ ์ธ๋ถํ ํด์ ์ฒ๋ฆฌํ๋์ง ๋๋ Exception์ด ๋ฐ์ํ์ ๋ ์ด๋ป๊ฒ ๋์ฒํ ๊ฒ ์ธ์ง๋ฅผ ์ ํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํ ์์ ์ค ํ๋๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ค๋ ํฌ์คํ ์์๋ Java์์ Exception์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง์ ๋ํด ์ ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ ์์ธ ์ฒ๋ฆฌํ๊ธฐ
์์ธ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ํ๋๋ try - catch ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ ๋ค๋ฅธ ํ๋๋ Exception ์ throw(์์ธ ๋์ง๊ธฐ) ํ๋ ๊ฒ์ ๋๋ค.
try {
...
} catch(์์ธ1) {
...
} catch(์์ธ2) {
...
}
try ๋ฌธ์์ ์ํํ ๋ฌธ์ฅ๋ค์์ ์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ฉด catch๋ฌธ์ ์ํ ๋ฌธ์ฅ๋ค์ ์ํ๋์ง ์์ต๋๋ค. ํ์ง๋ง try ๋ฌธ์์ ๋ฌธ์ฅ์ ์ํํ๋ ๋์ค์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์์ธ์ ํด๋น๋๋ catch๋ฌธ์ด ์ํ๋ฉ๋๋ค. ์ซ์๋ฅผ 0์ผ๋ก ๋๋์์ ๋ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
int c;
try {
c = 4 / 0;
} catch(ArithmeticException e) {
log.error("์์ธ๊ฐ ๋ฐ์ํ์์ผ๋ฏ๋ก c์ -1 ๊ฐ์ ํ ๋นํ๋น๋ค.")
c = -1; // ์์ธ๊ฐ ๋ฐ์ํ์ฌ ์ด ๋ฌธ์ฅ์ด ์ํ๋๋ค.
}
ArithmeticException์ด ๋ฐ์ํ๋ฉด c์ -1์ ๋์ ํ๋๋ก ์์ธ๋ฅผ ์ฒ๋ฆฌํ ๊ฒ์ ๋๋ค. ArithmeticException e์์ e๋ ArithmeticException ํด๋์ค์ ๊ฐ์ฒด, ์ฆ ์ค๋ฅ ๊ฐ์ฒด์ ํด๋นํฉ๋๋ค. ์ด ์ค๋ฅ ๊ฐ์ฒด๋ฅผ ํตํด ํด๋น ์์ธ ํด๋์ค์ ๋ณ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ์๋ ์์ต๋๋ค. ๋๋ try ๊ตฌ๋ฌธ์์ ์ํํ ๋ก์ง์ rollback ํ๋ ํจ์๋ฅผ ํธ์ถํ ์๋ ์์ต๋๋ค.
try - catch ๊ตฌ๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ finally๋ ์์ธ๊ฐ ๋ฐ์ํ์์์๋ ๋ถ๊ตฌํ๊ณ
๋ฐ๋์ ์ํ๋์ด์ผ ํ๋ ๋ก์ง์ ํธ์ถํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
public class Sample {
public void shouldBeRun() {
System.out.println("ok thanks.");
}
public static void main(String[] args) {
Sample sample = new Sample();
int c;
try {
c = 4 / 0;
} catch (ArithmeticException e) {
c = -1;
} finally {
sample.shouldBeRun(); // ์์ธ์ ์๊ด์์ด ๋ฌด์กฐ๊ฑด ์ํ
}
}
}
๐ Exception ๊ณผ Runtime Exception
์๋ฐ์์์ Exception์ checked Exception ๊ณผ unchecked Exception์ผ๋ก ๊ตฌ๋ถ๋๋๋ฐ
์์ ์ด๋ฏธ์ง์ ๊ฐ์ต๋๋ค.
RuntimeException์ ์คํ์ ๋ฐ์ํ๋ ์์ธ์ด๊ณ
Exception์ ์ปดํ์ผ์ ๋ฐ์ํ๋ ์์ธ์ ๋๋ค.
์ฆ, Exception์ ํ๋ก๊ทธ๋จ ์์ฑ์ ์ด๋ฏธ ์์ธก๊ฐ๋ฅํ ์์ธ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๊ณ
RuntimeException์ ๋ฐ์ ํ ์๋ ๋ฐ์ ์ ํ ์๋ ์๋ ๊ฒฝ์ฐ์ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋์ Exception์ Checked Exception, RuntimeException์ Unchecked Exception ์ด๋ผ๊ณ ๋ ํฉ๋๋ค.
RuntimeException
runtime Exception์ ์์๋ฐ๋ custom ํ exception์ ๋ฐ์์์ผ ๋ณด๊ฒ ์ต๋๋ค.
class FoolException extends RuntimeException {
}
class FoolException extends RuntimeException {
}
public class Sample {
public void sayNick(String nick) {
if("fool".equals(nick)) {
throw new FoolException();
}
System.out.println("๋น์ ์ ๋ณ๋ช
์ "+nick+" ์
๋๋ค.");
}
public static void main(String[] args) {
Sample sample = new Sample();
sample.sayNick("fool");
sample.sayNick("genious");
}
}
์ด์ ์ด ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด "fool"์ด๋ผ๋ ์ ๋ ฅ๊ฐ์ผ๋ก sayNick ๋ฉ์๋ ์คํ์
๋ค์๊ณผ ๊ฐ์ custom ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
Exception in thread "main" FoolException
at Sample.sayNick(Sample.java:7)
at Sample.main(Sample.java:14)
Exception
๊ทธ๋ ๋ค๋ฉด ์ด๋ฒ์๋ FoolException์ด Exception์ ์์๋ฐ๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
class FoolException extends Exception {
}
์ด๋ ๊ฒ ํ๋ฉด Sample ํด๋์ค์์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ ๋๋ค.
์์ธก ๊ฐ๋ฅํ Checked Exception์ด๊ธฐ ๋๋ฌธ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํด์ผ ์ ์์ ์ผ๋ก ์ปดํ์ผ๋ฉ๋๋ค.
class FoolException extends Exception {
}
public class Sample {
public void sayNick(String nick) {
try {
if("fool".equals(nick)) {
throw new FoolException();
}
System.out.println("๋น์ ์ ๋ณ๋ช
์ "+nick+" ์
๋๋ค.");
}catch(FoolException e) {
System.err.println("FoolException์ด ๋ฐ์ํ์ต๋๋ค.");
}
}
public static void main(String[] args) {
Sample sample = new Sample();
sample.sayNick("fool");
sample.sayNick("genious");
}
}
์์ ์ฝ๋์์ Exception์ ์ด๋์ ๋ฐ์์ํค๊ณ
์ด๋์ ์ฒ๋ฆฌํ ์ง์ ๋ฐ๋ผ ๋ก์ง ์ํ์ด ์์ ํ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
๋จผ์ ํ ์ํ์ฒ๋ผ sayNick ๋ฉ์๋์์ Exception์ ์ฒ๋ฆฌํ ๊ฒฝ์ฐ
sample.sayNick("fool");
sample.sayNick("genious");
๋ค์์ ๋ ํจ์๊ฐ ๋ชจ๋ ์ํ๋ฉ๋๋ค.
ํ์ง๋ง main ๋ฉ์๋์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒฝ์ฐ์๋
๋๋ฒ ์งธ ๋ฌธ์ฅ์ธ sample.sayNick("genious");๊ฐ ์ํ๋์ง ์์ต๋๋ค.
์๋ํ๋ฉด ์ด๋ฏธ ์ฒซ๋ฒ ์งธ ๋ฌธ์ฅ์์ ์์ธ๊ฐ ๋ฐ์ํ์ฌ catch ๋ฌธ์ผ๋ก ๋น ์ ธ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋๋ค.
try {
sample.sayNick("fool");
sample.sayNick("genious"); // ์ด ๋ฌธ์ฅ์ ์ํ๋์ง ์๋๋ค.
}catch(FoolException e) {
System.err.println("FoolException์ด ๋ฐ์ํ์ต๋๋ค.");
}
class FoolException extends Exception {
}
public class Sample {
public void sayNick(String nick) throws FoolException { //Exception ์ฒ๋ฆฌ๋ฅผ ์๋ก ๋ฏธ๋ฃจ๊ธฐ
if("fool".equals(nick)) {
throw new FoolException();
}
System.out.println("๋น์ ์ ๋ณ๋ช
์ "+nick+" ์
๋๋ค.");
}
public static void main(String[] args) {
Sample sample = new Sample();
try {
sample.sayNick("fool");
sample.sayNick("genious");
} catch (FoolException e) {
System.err.println("FoolException์ด ๋ฐ์ํ์ต๋๋ค.");
}
}
}
์ด๋ฌํ ์ด์ ๋ก ํ๋ก๊ทธ๋๋ฐ์ Exception์ ์ฒ๋ฆฌํ๋ ์์น๋ ๋๋จํ ์ค์ํฉ๋๋ค.
ํ๋ก๊ทธ๋จ์ ์ํ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ธฐ๋ ํ๊ณ ํธ๋์ญ์ ์ฒ๋ฆฌ์๋ ๋ฐ์ ํ ๊ด๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๐ํธ๋์ญ์
ํธ๋์ญ์ ๊ณผ ์์ธ์ฒ๋ฆฌ๋ ๋งค์ฐ ๋ฐ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค.
์ผํ๋ชฐ์ "์ํ๋ฐ์ก"์ด๋ผ๋ ํธ๋์ญ์ ์ ๊ฐ์ ํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
"์ํ๋ฐ์ก" ์ด๋ผ๋ ํธ๋์ญ์ ์๋ ๋ค์๊ณผ ๊ฐ์ ์์ ๋ค์ด ์์ ์ ์์ต๋๋ค.
- ํฌ์ฅ
- ์์์ฆ ๋ฐํ
- ๋ฐ์ก
์ผํ๋ชฐ์ ์ด์์๋ ์ด 3๊ฐ์ง ์ผ๋ค ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด 3๊ฐ์ง ๋ชจ๋ ์ทจ์ํ๊ณ
"์ํ๋ฐ์ก" ์ ์ ์ํ๋ก ๋๋ ค์ผ ํฉ๋๋ค.
์ํ๋ฐ์ก() {
ํฌ์ฅ();
์์์ฆ๋ฐํ();
๋ฐ์ก();
}
ํฌ์ฅ() {
...
}
์์์ฆ๋ฐํ() {
...
}
๋ฐ์ก() {
...
}
๋ค์๊ณผ ๊ฐ์ด ํฌ์ฅ, ์์์ฆ๋ฐํ, ๋ฐ์ก ๋ฉ์๋์์๋ ์์ธ๋ฅผ throwํ๊ณ
์ํ๋ฐ์ก ๋ฉ์๋์์ throw๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋ชจ๋ ์ทจ์ํ๋ ๊ฒ์ด ์๋ฒฝํ ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๋๋ค.
์ํ๋ฐ์ก() {
try {
ํฌ์ฅ();
์์์ฆ๋ฐํ();
๋ฐ์ก();
}catch(์์ธ) {
๋ชจ๋์ทจ์(); // ํ๋๋ผ๋ ์คํจํ๋ฉด ๋ชจ๋ ์ทจ์ํ๋ค.
}
}
ํฌ์ฅ() throws ์์ธ {
...
}
์์์ฆ๋ฐํ() throws ์์ธ {
...
}
๋ฐ์ก() throws ์์ธ {
...
}
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์์ ๊ฐ์ด ์ฒ๋ฆฌํ์ง ์๊ณ ์๋์ ๊ฐ์ด ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค๋ฉด
๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ํฌ๊ฒ ํ๋ค๋ฆด ์ ์์ต๋๋ค.
์ํ๋ฐ์ก() {
ํฌ์ฅ();
์์์ฆ๋ฐํ();
๋ฐ์ก();
}
ํฌ์ฅ(){
try {
...
}catch(์์ธ) {
ํฌ์ฅ์ทจ์();
}
}
์์์ฆ๋ฐํ() {
try {
...
}catch(์์ธ) {
์์์ฆ๋ฐํ์ทจ์();
}
}
๋ฐ์ก() {
try {
...
}catch(์์ธ) {
๋ฐ์ก์ทจ์();
}
}
์ฐธ๊ณ :
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ ์ ๋ฉค๋ฒ์ Static (0) | 2023.11.09 |
---|---|
[Mockito & JUnit] @Mock ๊ณผ @InjectMock (0) | 2023.03.28 |
[Java] ์ ๊ทผ ์ ํ์๋ ๋ฌด์์ธ๊ฐ (0) | 2023.03.08 |
์๋ฐ์ ์๋ฃ๊ตฌ์กฐ - ์ปฌ๋ ์ ํ๋ ์์ํฌ(Collection Framework) (0) | 2023.02.05 |
[Java] extends ์ implements ์ ์ฐจ์ด (0) | 2023.01.10 |