Context context를 매개변수로 받는 기본 생성자 이외에
xml에서 태그로 정의해 컴포넌트를 선언할 수 있게
<ClassName>(Context context, AttributSet attrs) 생성자 또한 구현해야 한다.
아이폰 프로그래밍에서 nib 파일에 아카이빙된 객체가 초기화될 때 별도 메서드를 호출하는 것처럼
안드로이드에서도 Inflater를 통해 초기화되는 클래스는 이 클래스 생성자를 통해서만 초기화되고
이 클래스 생성자를 명시적으로 구현하지 않으면 예외가 발생한다.
물론 커스텀 컴포넌트를 직접 코드로 초기화한다면 저 생성자를 호출하지 않겠지만
컴포넌트를 어떻게 사용할지 모르므로 항상 두 생성자 메서드를 명시적으로 구현하는
습관을 들이는 게 좋다.
이런 식으로 커스텀 컴포넌트를 레이아웃 xml에서 사용하면 컴포넌트를 매번 재사용하기가 쉽고
고유 아이디를 매번 일일이 생각하지 않아도 되므로 편하며
컴포넌트 단위로 기능을 캡슐화할 수 있어서 좋다.
이 경우 커스텀 컴포넌트가 컨테이너라면 내부에 있는 컴포넌트의 참조는
커스텀 컨테이너의 공개 API를 통해 (필요한 것들만) 접근할 수 있게 해주면 된다.
Posted by joshy21


