안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요
ContentProver에 대한 예제 소스를 보다가 위의 클래스를 보았는데
머리를 굴려봐도 도무지 무슨 클래스이며 왜 사용하는지를 모르겠습니다.
선언도 희안하게
private static final UriMatcher uriMatcher;
{
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(PROVIDER_NAME, "scores", SCORES);
uriMatcher.addURI(PROVIDER_NAME, "scores/#", SCORES_ID);
}
이런식으로 되어있는데
기본 지식이 짧아서 그런데 세미콜론(;)이후에 { } 하는 용도가 뭔가요?
그리고 static { } 하면 그냥 { } 하고 차이가 뭔가요?
수고하십시오
2010.03.05 09:19:06
(추천:
1 / 0)
ContentProvider로 들어오는 요청에 대해, 요청이 ContentProvider에게 무엇을 원하는지를 파악하기 위해 사용됩니다.
그걸 파악하기 위해서는, ContentProvider로 들어오는 URI가 어떻게 생겨먹었는지를 분석할 필요가 있습니다.
그걸 알아서(?) 해주는 것이 UriMatcher입니다.
uriMatcher.addURI 메서드에 보면 두번째 파라미터가 URI의 패턴을 적어주는 것이고, 세번째 파라미터는, 요청으로 들어온 URI가 패턴과 일치할 경우, uriMatcher가 반환하게 될 정수를 할당해주는 것입니다.
만약 해당 ContentProvider로 들어오는 요청의 URI가 "어쩌구저쩌구/scores로 끝날 경우, uriMatcher.matches(uri)는 SCORES 값을 반환하게 되고, "어쩌구저쩌구/scores/2"와 같은 식으로 끝날 경우, uriMatcher.matches(uri)는 SCORES_ID를 반환하게 되죠.
uriMatcher.matches 메서드가 반환하는 값을 가지고, "아~ resolver가 뭘 원하는구나~" 할 수 있는 것입니다.
그리고 static final로 변수(여기서는 상수겠네요)를 선언하는 것은... 그다지 강제적인 것은 아니지만, Java 개발에서, 특정 인스턴스(클래스의 변수)와 상관이 없으며, 한번 정의되면 절대 변할 일이 없을 것들에 대해서는 대체로 static final을 사용합니다.
그리고 코드 블록에 (중괄호 열고 닫는 거) static을 선언해준 것은, static 초기화라고 해서, static 변수에 대한 초기화를 해주는 것입니다.
보통 constructor(생성자)에서 해주는 경우도 많은데, static final로 선언된 것에 대해서는 선언과 동시에 값을 할당하거나, static 초기화 블록을 통해서 값을 할당해주어야만 합니다.
흑흑... 제가 개발자 게시판에서 답변을 할 수가 있다니... 감격스럽습니다~ 흑흑 ㅠ_ㅠ