Whiteship's Note

'callback'에 해당되는 글 1건

  1. 2007.02.20 CallBack 사용해 보기 (2)

CallBack 사용해 보기

모하니?/Coding : 2007.02.20 17:08


영회형의 최신글에서 JDBC 노가다를 CallBack을 사용해서 멋지게 처리하는 글을 보고 이런 형태로 개선하면 좋을 것 같은 부분들이 떠올랐습니다.

IO를 할 때 try-catch 블락이 계속 중복 되는데요. 아래의 코드를 보겠습니다.
첫번째 메소드만 중간에 뭐가 한 문장이 추가 됩니다. 다른 두 개의 메소드는 빨간색 글씨 아래로는 완전히 같은 코드입니다. 빨간 글씨 아래의 큰 덩어리를 다른 메소드로 분리해 내고 싶었지만 첫번째 메소드 처럼 중간에 connection에 뭔가를 추가해야할 일이 생길 수도 때문에 그렇게 하지 못하고 조금씩 묶어서 다른 메소드로 빼냈습니다.

그랬더니 코드가 아래처럼 됐습니다.
물론 메소드들이 다이어트를 해서 조금 보긴 괜찮은데 그래도 try-catch가 자꾸 중복되서 나오는게 보기 싫어졌습니다. CallBack을 만들어서 써보고 싶어졌습니다. 결국 코드는 아래처럼 변했습니다.

흠.. interface로 해두니까 꼭 구현을 해야 되서 아래 두 개의 메소드에서는 구현할 필요가 없는데 구현을 해야만 하는 상황이 생겼네요. 그래서 interface를 class로 바꾸고 빈 메소드로 만들어 두었습니다.

으~ 어렵습니다... 마지막 코드도 별로 좋아보이지 않는데요. 흠...좀 더 공부하다 보면 좋은 방법이 생기겠죠.

'모하니? > Coding' 카테고리의 다른 글

TDD Helper 만들었습니다.  (4) 2007.02.23
5. version 0.9  (0) 2007.02.22
4. 화면과 모델 통합에서의 갈등  (0) 2007.02.22
3. 작업 분류 2  (0) 2007.02.22
3. 작업 분류  (0) 2007.02.22
TDD Helper 화면 Version 0.5  (4) 2007.02.21
2. 작업 소요 시간 측정  (0) 2007.02.21
1. 작업 리스트 관리(CRUD)  (0) 2007.02.20
TDD 연습용 프로그램  (4) 2007.02.20
CallBack 사용해 보기  (2) 2007.02.20
spring 코딩 할 때  (0) 2006.11.06
top

TAG ,
  1. Favicon of http://toby.tistory.com BlogIcon Toby 2007.03.06 21:51 신고 PERM. MOD/DEL REPLY

    파라메터가 없는 sendRequest()를 하나만드시고 거기서 빈 콜백인스턴스를 만드는 코드를 만들어서 원래 sendRequest(ConnectionCallBack)을 호출하도록 하면 어떨까요?

    첫번째 경우도 자주등장하는 케이스라면 구지 callback을 일일히 사용하지 않고 setRequestProperty()의 파라메터만 받아서 미리만들어진 콜백을 이용하는 메소드를 추가하는 것도 좋은 방법일 것입니다.

    Spring의 HibernateTemplate 같은 경우는 직접 callback을 사용하지않고 대부분의 작업이 가능하도록 다양한 convenient methods가 만들어져있죠.

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2007.03.06 23:32 PERM MOD/DEL

    아.. HibernateTemplate 클래스를 보면서 생각해 보니 어떤 말씀이신지 알 것 같습니다.

    두번째와 세번째 케이스는

    sendRequest(new ConnectionCallBack(){});
    이 부분이
    sendRequest();
    이렇게 바뀔 것이고..

    음.. 첫번째 케이스를 위한 convenient 메소드를 추가하면

    sendRequest(new ConnectionCallBack(){
    public void doSomethingWithConnection(HttpURLConnection connection) {
    connection.setRequestProperty("Authorization", "Basic " +
    new sun.misc.BASE64Encoder().encode(new String(id + ":" + password).getBytes()));
    }
    });
    이 부분이
    sendRequest(id, passwd);
    이렇게 훨씬 깔끔해 지겠네요.

    우와.. 감사합니다. :)

Write a comment.