-
[Java] μλ° μμΈμ²λ¦¬Android/Java 2021. 2. 1. 23:01λ°μν
- μ΄ κΈμ "μλ° μ¨λΌμΈ μ€ν°λ" 곡λΆνμ¬ μμ±ν κΈμ λλ€.
Error(μλ¬) vs Exception(μμΈ)
μλ°μ μμΈμ²λ¦¬λ₯Ό μ€λͺ νκΈ° μ΄μ μ μλ¬μ μμΈλ₯Ό ꡬλ³ν νμ μ€λͺ νλλ‘ νκ² μ΅λλ€.
μ λν μλ¬λ μμΈλ₯Ό ꡬλ³νμ§ μκ³ λκ°λ€λΌλ μκ°μ νμλλ° μ΄λ² μ€ν°λλ₯Ό ν΅ν΄ μκ² λμμ΅λλ€.Error(μλ¬)
- μλ¬λ μ»΄ν¨ν° νλμ¨μ΄ μ€λμ λλ κ³ μ₯μΌλ‘ μΈν΄μ μμ©νλ‘κ·Έλ¨μ μ€λ₯κ° λ°μνκ±°λ, JVM μ€νμ λ¬Έμ κ° μκ²Όμ κ²½μ°μ λ°μν©λλ€.
- λ°νμ μ λ°μλλ©° μ λΆ μμΈ‘ λΆκ°λ₯ν UnChecked Error μ λλ€. κ·Έλμ κ°λ°μκ° λμ²νλ λ°©λ²μλ μ νμ μΌ μλ°μ μμ΅λλ€.
Exception(μμΈ)
- λ¨μν κ°λ°μμ μλͺ»λ μ½λ©μΌλ‘ μΈν΄ λ°μν νλ‘κ·Έλ¨ μ€λ₯λ₯Ό λ§ν©λλ€.
- μμΈλ κ°λ°μμ μ²λ¦¬λ‘ μΈν΄μ λ€μν λμ²λ°©λ²μ΄ μ‘΄μ¬ν©λλ€.
- Exceptionμ μ’ λ₯λ ν¬κ² 2κ°μ§λ‘ μμΈ‘κ°λ₯ν Checked Exceptionκ³Ό UnChecked Exceptionμ΄ μμ΅λλ€.
μλ° Exception κ³μΈ΅κ΅¬μ‘°
- Checked Exceptionμ μ»΄νμΌμ ν κ²½μ°μ μμΈ‘κ°λ₯ν μμΈλ‘ ClassNotFoundException, FileNotFoundException λ±μ΄ μμ΅λλ€.
- UnChecked Exceptionμ λ°νμ μ λ°μν μλ μκ³ λ°μνμ§ μμ μ μλ μμΈλ‘ ArithmeticException, NullpointerException λ±μ΄ μμ΅λλ€.
μλ° μμΈμ²λ¦¬
- νλ‘κ·Έλλ°μ νλ©΄μ μλ¬μ μμΈλ νμ°μ μΌλ‘ λ§λκ² λλ μ‘΄μ¬μ λλ€.
- μλͺ»λ μ½λ©μΌλ‘ μΈν΄ μμΈκ° λ°μνλλΌλ 무μνκ³ λ€μ μ½λλ₯Ό μ€ννκ±°λ λ€λ₯Έ λ©μλλ₯Ό νΈμΆνλ κ²μ²λΌ λ€μνκ² μ¬μ©μκ° μνλ μμΈμ²λ¦¬λ₯Ό ν μ μμ΅λλ€.
- try, catch, finally, throw, throws λ€μ ν€μλλ₯Ό μ΄μ©νμ¬ μμΈμ²λ¦¬λ₯Ό ν©λλ€.
try, catch
public class ExceptionTest { public static void main(String[] args) { int num = 4/0; System.out.println(num); } }
λ€μ μ½λλ₯Ό ꡬνν ν μ€ννλ€λ©΄ 4λ₯Ό 0μΌλ‘ λλ μ μκΈ° λλ¬Έμ ArithmeticExceptionμ΄ λ°μν κ²°κ³Όλ₯Ό νμΈν μ μμ΅λλ€. μ΄λ₯Ό ν΄κ²°νλ λ°©λ²μΌλ‘ try, catch ꡬ문μ μ¬μ©ν©λλ€.
public class ExceptionTest { public static void main(String[] args) { try{ int num = 4/0; System.out.println(num); }catch (ArithmeticException e){ System.out.println("ArithmeticExceptionμ΄ λ°μνμ΅λλ€."); } } }
try ꡬ문 μμ λ€μ΄μλ μ½λμ λν΄μ μλ¬ λ°μ μ¬λΆλ₯Ό νμΈν©λλ€. λ§μ½, catch κ΄νΈ μμ μλ ArithmeticException μ΄ λ°μνλ€λ©΄ λ μ΄μ tryꡬ문μ μ€ννμ§ μκ³ catch λ¬ΈμΌλ‘ κ°μ μ€ννκ² λ©λλ€.
μ΄μ κ°μ λ°©λ²μΌλ‘ catch λ¬Έμ λ°μν κ² κ°μ μμΈλ₯Ό μ€μ νμ¬ μ²λ¦¬ν μ μμ΅λλ€.finally
μμΈκ° λ°μν κ²½μ°μ try, catchλ₯Ό μ¬μ©νμ¬ try ꡬ문μ λ μ΄μμ μ€ννμ§ μκ³ catch κ΅¬λ¬Έλ§ μ€ννκ² λ©λλ€.
νμ§λ§ try λ¬Έμ 무쑰건μ μΌλ‘ μ€νν΄μΌ νλ μ½λκ° μμ κ²½μ°λ μμ΅λλ€. finally ν€μλλ‘ ν΄κ²°ν μ μμ΅λλ€.public class ExceptionTest { public static void main(String[] args) { int num = 5; try{ num = 4/0; // System.out.println(num); }catch (ArithmeticException e){ System.out.println("ArithmeticExceptionμ΄ λ°μνμ΅λλ€."); }finally { System.out.println(num); } } }
μ«μ numμ 무쑰건 μΆλ ₯μ ν΄μΌνλ μν©μμ ArithmeticExceptionμΌλ‘ μΈν΄ System.out.println(num) μ½λλ μ€νν μκ° μμ΅λλ€.
무쑰건 μ€νν΄μΌνλ μ½λκ° μλ€λ©΄ tryλ¬Έμ΄ μλ finally λ¬Έμμ μ½λλ₯Ό ꡬννμ¬ μμΈκ° λ°μνλλΌλ μ€νν μ μμ΅λλ€.throw
public class ExceptionTest { public void checkArithmetic(int a,int b){ if(b==0){ throw new ArithmeticException(); } System.out.println("checkArithmetic methodκ° μ€ννμ΅λλ€"); System.out.println(a/b); } public static void main(String[] args) { int num = 5; ExceptionTest test = new ExceptionTest(); test.checkArithmetic(num,0); } }
μ΄μ μ κ²°κ³Όμ λμΌνκ² ArithmeticExceptionμ΄ λ°μν©λλ€. νμ§λ§ μ½λ© μμμ ArithmeticExceptionμ λ°μνκ² νλ μ½λλ μμ΅λλ€.
throw ν€μλλ₯Ό ν΅ν΄ κ°λ°μκ° μ§μ bλΌλ λ³μκ° 0μΌ κ²½μ°μλ ArithmeticExceptionμ λ°μνλλ‘ κ΅¬ννμμ΅λλ€.
μ΄μ²λΌ throw ν€μλλ μμΈλ₯Ό λ°μνκ² νλ ν€μλλΌκ³ μκ°νμλ©΄ λ©λλ€.public class ExceptionTest { public void checkArithmetic(int a,int b){ try{ if(b==0){ throw new ArithmeticException(); } System.out.println(a/b); }catch (ArithmeticException e){ System.out.println("ArithmeticExceptiondl λ°μνμ΅λλ€"); } finally { System.out.println("checkArithmetic methodκ° μ€ννμ΅λλ€"); } } public static void main(String[] args) { int num = 5; ExceptionTest test = new ExceptionTest(); test.checkArithmetic(num,0); } }
μ΄μ μ½λλ‘ κ΅¬νν κ²½μ° λ©μλκ° μ€νλμλ€λ μΆλ ₯λ©μμ§λ₯Ό μΆλ ₯νμ§ λͺ»νκ² λ©λλ€. λ€μ μ½λμ²λΌ try, catch λ¬ΈμΌλ‘ μμΈμ²λ¦¬λ₯Ό ν ν νμμ μΌλ‘ μΆλ ₯ν΄μΌνλ μ½λλ finally ν€μλλ₯Ό μ΄μ©νλ λͺ¨μ΅μ νμΈν μ μμ΅λλ€.
throws
throw ν€μλλ₯Ό ν΅ν΄ μμΈλ₯Ό λ°μμν€λ©΄ λ©μλ λ΄λΆμμ λ°μνκ² λ©λλ€.
λ©μλ λ΄λΆκ° μλ λ©μλλ₯Ό νΈμΆν λΆλΆμμ μμΈλ₯Ό λ°μμν€κΈ° μν΄μλ throws ν€μλλ₯Ό μ΄μ©νλ©΄ λ©λλ€.public class ExceptionTest { public void checkArithmetic(int a,int b) throws ArithmeticException{ if(b==0){ throw new ArithmeticException(); } System.out.println("checkArithmetic methodκ° μ€ννμ΅λλ€"); } public static void main(String[] args) { int num = 5; try{ ExceptionTest test = new ExceptionTest(); test.checkArithmetic(num,0); }catch (ArithmeticException e){ System.out.println("ArithmeticExceptionμ΄ λ°μνμ΅λλ€"); } } }
throws ν€μλλ μμΈμ²λ¦¬λ₯Ό λ€λ‘ 미루λ κ°λ μΌλ‘ μ¬μ©λμ΄μ§λ©° try, catchλ¬Έμ΄ λ©μλ λ΄λΆκ° μλ λ©μλλ₯Ό νΈμΆν λΆλΆμμ μ΄λ€μ§κ² λ©λλ€.
RuntimeException vs Exception
- μμμλ κ³μ μ€λͺ μ νμ§λ§ Exceptionμ ν¬κ² λ κ°μ§λ‘ λΆλ₯ν μ μμ΅λλ€.
- RuntimeExceptionμ μ€ν μ λ°μνλ μμΈμ΄κ³ , Exceptionμ μ»΄νμΌ μ λ°μνλ μμΈμ λλ€.
- μ¦, 컀μ€ν ν μμΈλ₯Ό λ§λ€ λ Exceptionμ νλ‘κ·Έλ¨ μμ± μ μ΄λ―Έ μμΈ‘κ°λ₯ν μμΈλ₯Ό μμ±ν λ μ¬μ©νκ³ , RuntimeException λ°μν μλ μκ³ λ°μνμ§ μμ κ²½μ°μ μ¬μ©ν©λλ€.
- Exceptionμ Checked Exception, RuntimeExceptionμ UnChecked Exceptionμ΄λΌκ³ λΆλ¦ λλ€.
- μ°Έμ‘°(https://wikidocs.net/229)
컀μ€ν ν μμΈ λ§λλ λ°©λ²
- Exceptionκ³Ό RuntimeExceptionμ μμλ°μ μλ‘μ΄ μμΈ ν΄λμ€λ₯Ό μμ±ν μ μμ΅λλ€.
- RuntimeExcetionμ μμλ°μ ν΄λμ€λ μ£Όλ‘ λ°νμ μ μ€λ₯κ° λ°μνκ±°λ νμ§ μμ κ²½μ°λ μμ΅λλ€.
- Exceptionμ μμλ°μ ν΄λμ€λ μμΈ‘ κ°λ₯ν μμΈμ΄κΈ° λλ¬Έμ μ»΄νμΌ μ€λ₯κ° λ°μν©λλ€. try, catch λ¬Έμ μ¬μ©νμ¬ μμΈμ²λ¦¬λ₯Ό ν΄μΌ ν©λλ€.
RuntimeException μμ
public class ExceptionTest { public void checkArithmetic(int a,int b){ if(b==0){ throw new CustomRuntimeException(); } System.out.println("checkArithmetic methodκ° μ€ννμ΅λλ€"); } public static void main(String[] args) { int num = 5; ExceptionTest test = new ExceptionTest(); test.checkArithmetic(num,0); } } class CustomRuntimeException extends RuntimeException{ }
λ€μ μ½λμ²λΌ RuntimeExceptionμ μμλ°μ κ²½μ°μλ μ μμ μΌλ‘ μ»΄νμΌμ λ©λλ€. νμ§λ§ bμ κ°μ λ°λΌ μμΈλ₯Ό λ°μν μλ μκ³ λ°μνμ§ μμ κ°λ₯μ±μ΄ μμ΅λλ€.
Exception μμ
public class ExceptionTest { public void checkArithmetic(int a,int b){ try{ if(b==0){ throw new CustomException(); } }catch (Exception e){ System.out.println("CustomeExceptionμ΄ λ°μνμ΅λ"); } System.out.println("checkArithmetic methodκ° μ€ννμ΅λλ€"); } public static void main(String[] args) { int num = 5; ExceptionTest test = new ExceptionTest(); test.checkArithmetic(num,0); } } class CustomException extends Exception{ }
Exceptionμ μμνλ ν΄λμ€λ₯Ό μ¬μ©ν κ²½μ° try, catch λ¬Έμ μ°μ§ μκ³ μλ μ»΄νμΌ μ€λ₯λ‘ μΈν΄ μ€νμ‘°μ°¨ λμ§ μμ΅λλ€.
λ°μν'Android > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μλ° μ°λ λ μν, μ°μ μμ(State, Priority) (0) 2021.02.05 [Java] μλ° μ°λ λ μμ±(Thread, Runnable) (4) 2021.02.02 [Java] μλ° μΈν°νμ΄μ€(Interface) μ¬μ© (0) 2021.01.24 [Java] μλ° ν¨ν€μ§λ? (0) 2021.01.19 [Java] μΆμ ν΄λμ€, Dispatch, final, Object ν΄λμ€ (0) 2021.01.18