2011. 4. 9. 02:37


*여기에 나와있는 예제는 코드로 제공되지 않습니다*

 
1. 캡슐화 되있지 않은 뷰의 문제
안드로이드의 뷰는 비주얼프로그래밍에서 컨트롤에 해당 합니다.
그런데 아무래도 비주얼프로그래밍툳들은 컨트롤에 관한 기본적인 코드들은 자동으로 생성해주기 때문에 상대적으로 편하게 컨트롤을 생성해서 사용할 수 있습니다만 안드로이드프로그래밍을 할때 주로 쓰는 이클립스에서는 그런 기능까지는 지원해주지 않는다.(SDK선상에서 그런것 같습니다.)
덕분에 뷰와 리스너의 연결은 둘째 치고라도 해당 뷰를 사용하기 위해서는 소속그룹을 뒤저서 변수 선언해서 저장해 두어야 하저
이런 방식이 나쁘다는 것은 아니지만 코드상으로는 상당이 지저분해 질수 밖에 없는건 사실이저-_-;;;;;


불러도 대답없는 뷰(열심이 더블클릭중)

연결 자체는 별문제가 되지 않습니다.
진짜 문제는 컨트롤이 범람 하면서 발생하저.


슬슬 컨트롤이 늘어난다-_-;;;;

예제에서는 버튼을 사용해서 그렇지만 생성과 동시에 초기화 해주어야 할 항목들이 많이 뷰의 경우 난잡해 지는 코드를 막을 방법은 습니다.-_-;
같은 동작을 하는 뷰가 늘어날때는 그나마 사정이 나은게 배열을 통해서 관리를 할수 있기 때문이저. 문제는 항상 프로젝트가 그렇게 진행될리가 없다는게...-_-; 

 

 
2. 안드로이드만의 문제인가?
사실 이문제는 안드로이드 문제가 아니라 툴에서 제공하는 표준 컨트롤을 사용할수 없을때 항상 발생하는 문제이저 ㅎㅎㅎ
그렇기때문에 비주얼프로그래밍에서도 표준컨트롤을 사용할수 없는 상황(다이랙트 드로우를 이용한 게임을 만든다거나 표준컨트롤에 원하는 동작을 하는 컨트롤이 없을때)에서는 같은 현상이 발생합니다. 

 
3. 해결방법
해결방법은 간단합니다.
클래스를 만들고. 원하는 동작을 하게 하면 되저.
ㅎㅎㅎ

 
 
4. 일반적인 예제


자동완성택스트뷰가 3개를 만들어 봅시다.

일반적인 자동완성 텍스트뷰 설정방법


이것이 일반적으로 자동완성텍스트뷰를 세팅하는 방법입니다.
여기에 특정동작(택스트를 입력할때 연결할 데이터를 DB에서 그때그때 불러온다던가 )추가하면 메인 엑티비티는 안드로 메다로 날아가기 시작하저.


 
5. 캡슐화
claAutoCompleteTextView라는 클래스를 만들고 4번 예제에서 공통적으로 들어간 코드를 생성자에 넣고 클래스로 만들면 아래와 같이 사용할수 있습니다.


확실이 4번예제보다 코드가 심플하지만 4번과 완전이 같은 동작을 합니다.

이렇게 코드가 심플해지면 가독성도 높아질뿐만 아니라 유지보수에도 도움이 되저.
물론 저 자동완성택스트뷰가 각각 다른동작을 해야 한다면 거기에 대한 클래스를 새로 생성해야 한다는 단점이 있습니다,
뭐 객체지향에 따른 상속이나 인터페이스를 통해서 이문제는 어느정도 해소가 가능하긴 합니다.(재량이저 ㅡ.-;)


 
6. 나의 캡슐화 규칙
클래스와 뷰를 따로 생성하는 불편함을 피하기 위해 뷰객체를 클래스안에 저장합니다.
클래스에 저장된 뷰를 가저오기 위해서 GetOvject()라는 메소드를 구현해야 합니다.
최대한 상속이나 인터페이스를 받지 않고 사용한다. 이것은 최대한 표준 형태로 캡슐화된 뷰를 제공하여 나중에 사용할 사람이 커스텀하기 좋게 하기 위함입니다.
캡슐화된 뷰를 사용하기위하여 클래스추가 이외의 동작은 없어야 합니다.


다음 글 부터는 직접적인 캡슐화를 해보겠습니다.


p.s. 사실 컨트롤(뷰)를 직접 구현할것도 아닌데 이렇게 까지 하게 될줄은 ㅡ,.ㅡ;;
p.s. 이 캡슐화에 효율성 문제는 각자가 판단하여 사용할 문제입니다. 저는 여러가지 설계방법중 이 방법을 선호하는 것 뿐이저