Notice
Recent Posts
Recent Comments
Link
관리 메뉴

설.현.아빠

Chapter 3 - 1 ] throw , throws 이해하기. 본문

교재 & 강좌/시작하세요! 안드로이드 프로그래밍

Chapter 3 - 1 ] throw , throws 이해하기.

설.현.아빠 2011. 2. 11. 11:55




 

<?xml version="1.0" encoding="utf-8"?>

 

<!-- AndroidManifest.xml -->

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.MyFirstAndroidApp"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name"
       android:debuggable="true">
        <activity android:name=".MyFirstAndroidApp"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="8" />

</manifest>

 

 

// MyFirstAndroidApp

 

package com.android.MyFirstAndroidApp;

import android.app.Activity;
import android.os.Bundle;

public class MyFirstAndroidApp extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        forceError();
    }
    public void forceError() {
     if(true) {
      throw new Error("Whoops");
     }
    }
}

 

 

기초부터 시작하는 마음으로!!ㅋ

이번장에서는 강제로 Error를 발생시켜서 DDMS로 Debug를 해볼 수 있도록 도와주고 있다.

매번 Log만 사용해서 Debugging을 했는데...앞으로도 그래야겠다.

난 그냥 마냥 불편하기만 하다.

 

알아두기 1 :

 

throw를 첫 사용해보다.

먼저 throw는 함수내에서 예외 개체를 던지며 throws는 함수의 예외를 외부로 던지는 것이다.

즉, throw는 메소드내에서 상위 블럭으로 예외를 던지는 것이고, throws는 현재 메소드의 상위 메소드로 예외를 던진다고 생각하면 된다. throw는 억지로 에러를 발생시킬때도 사용되지만 현재 메소드의 에러를 처리한 후에 상위 메소드에 에러 정보를 줌으로써 상위 메소드에서도 에러가 발생한 것을 감지할수 있습니다.

간단히 정리하자면 throw는 메소드 내부에서 Exception을 던지는 거고..throws는 메소드명 옆에 쓰며 상위 메소드로 Exception을 던지는 거라고 생각하자.

 

아래 두개 소스를 비교해보자. 핵심은 상위메소드가 하위메소드에서 에러가 발생한것을 아느냐 모르느냐이다.

 

package com.android.MyFirstAndroidApp;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MyFirstAndroidApp extends Activity {
    /** Called when the activity is first created. */
    @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  try {
   forceError();
   Log.d("Log", "Success.");
  } catch (Exception e) {
   Log.d("Log", "Error-1");
  }

 }

 public void forceError(){
  try {
   int i = 1 / 0; //에러를 발생시킨다.
  } catch (Exception e) {
   Log.d("Log", "Error-2");
  }
 }
}

 

11-10 09:26:55.413: DEBUG/Log(5060): Error-2
11-10 09:26:55.413: DEBUG/Log(5060): Success.

 

package com.android.MyFirstAndroidApp;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MyFirstAndroidApp extends Activity {
    /** Called when the activity is first created. */
    @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  try {
   forceError();
   Log.d("Log", "Success.");
  } catch (Exception e) {
   Log.d("Log", "Error-1");
  }

 }

 public void forceError() throws Exception{
  try {
   int i = 1 / 0; //에러를 발생시킨다.
  } catch (Exception e) { 
   Log.d("Log", "Error-2");

   throw e;
  }
 }
}

 

11-10 09:26:55.413: DEBUG/Log(5060): Error-2
11-10 09:26:55.413: DEBUG/Log(5060): Error-1

 

 

 

알아두기 2 :

 

단말에서 디버깅하기. 방법은 알고 있었지만 이번기회를 바탕으로 확인해보았다.

확인방법은 Break Point를 이용해서 확인할 수 있다.

먼저 AndroidManifest.xml에 아래 소스를 추가하자.

<application ... android:debuggable="true">

그런 뒤 소스상에서 Ctrl + Shift + B를 통해 BP를 걸어 두고, 실행 시키면 BP를 건 시점에서 동작이 멈춘다.

하지만 위 소스를 추가하지 않은 상태에서는 BP를 무시하고 넘어가게 된다.

 

 

 

알아두기 3 :

 

Log.e() 오류를 기록한다.

Log.w() 경고를 기록한다.

Log.i() 정보성 메시지를 기록한다.

Log.d() 디버그 메시지를 기록한다.

Log.v() 상세 메시지를 기록한다.

Comments