반응형

 

우선 Context를 말하기 전에 아래와 같은 코드를 보자.

 

    public CommentItemView(Context context) {
        super(context);
        init(context);
    }

    public CommentItemView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    private void init(Context context){
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.comment_item, this, true);

        userId = (TextView) findViewById(R.id.tv_comment_user_id);
        time = (TextView) findViewById(R.id.tv_comment_time);
        ratingBar = (RatingBar) findViewById(R.id.rb_comment_rating_bar);
        comment = (TextView) findViewById(R.id.tv_comment);
        recommendationCount = (TextView) findViewById(R.id.tv_comment_recommendation_count);
    }

 

우리는 안드로이드 코딩을하며 수도없이 함수 속 파라미터에서 Context context라는 것을 봐왔을 것이다.

 

그냥 Context라는 객체를 context라고 적은건데 곰곰이 생각해보면 저 Context가 도대체 무엇을 하는 건지,

 

어떤 의미로 바라보면 좋을지에 대해 정확하게 모른 채 코딩에 급급했을지도 모른다.

 

 

Context란?

 

Context라는게 어떤 의미일지 좋은 비유가 됐으면 하는 바람으로 한번 이야기해보고자 한다.

지금부터 Chrome을 App이라 생각해보자.

 

그러면 App 속에 우리는 Crocus, Naver, Youtube 액티비티가 있다고 생각할 수 있고

 

현재 Crocus만 onResume 상태이고 나머지는 onPause 상태임을 알 수 있다.

 

 

 

위의 두 그림에서 알 수 있듯이 해당 탭에 마우스를 우클릭 하면 항상 같은 내용이 나타나게 된다.

 

이렇게 팝업되어 나타나는 메뉴를 Context 메뉴라고 부른다.

 

이때 항상 항목들은 동일하게 존재하지만,

여기서 Crocus의 새 탭을 누르면 Crocus의 정보가 담긴 탭을 새로 열어줄 것이고

Naver의 새 탭을 누르면 Naver의 정보가 담긴 탭을 새로 열어줄 것이다.

 

이러한 것처럼 보여주는 내용들은 동일하지만 그 액티비티가 담고있는 정보는 다른데,

이러한 정보(속성)들을 담아 놓은 것이 Context이다.

 

Interface to global information about an application environment.

This is an abstract class whose implementation is provided by the Android system.

It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

https://developer.android.com/reference/android/content/Context

말 그대로 Android Document에서 말하듯이 Context App 환경에 대한 다양한 정보를 담고있는 인터페이스이다.

 

 

"즉, 어떤 Activity, application 인가에 대해서 구별하는 정보가 context라고 이해할 수 있다."

 

 

추가적으로 내 자신이 Activity라면 신분증은 Context가 된다.

 

 

 

 

실제로 Android에서 사용되는 Methods

View.getContext()

현재 실행되고 있는 View의 context를 return 하는데 보통은 현재 활성화된 activity의 context가 된다.

 

Activity.getApplicationContext()

어플리케이션의 Context가 return된다. 현재 activiy의 context 뿐만 아니라 application의 lifeCycle에 해당하는 Context가 사용된다.

 

ContextWrapper.getBaseContext()

자신의 Context가 아닌 다른 Context를 access하려 할 때 사용한다. ContextWrapper는 getBaseContext()를 경유해서 Context를 참조할 수 있다.

 

this

View.getContext()와 같다.

반응형