있잖아 (일렉기타 Version)

이렇게 언제 쳐보나... ^^;;;

있잖아 (일렉기타 Version)

by 너굴너굴 | 2010/12/01 13:46 | tUnE uP yO mP3 | 트랙백

Dev. Tips : 초기화의 두 가지 형태 (Lazy or Eager)

간단한 클래스가 있습니다.

Class CVal
{
    public:
        void Run();
    private:
        A m_A;
}

이 클래스를 구현할 때, 두 가지 초기화 형태에 대해 고민을 합니다.


▶ 1번
CVal:: CVal()

    m_A = new A();
}

void CVal ::Run()
{
    // m_A를 바로 사용...
}

▶ 2번
CVal:: CVal()
{
    // 초기화 하지 않음
}

void CVal ::Run()
{
    if(m_A == NULL)
        m_A = new A();

}


Q. 1번과 2번 중 어느 형태가 좋을까요?

저의 경우, 2번 형태를 사용하는 이유는
"버그를 잡다보니..." 혹은 "혹시 모르니 보험을 들자.." 둘 중 하나 였습니다.

결국 수정하는 부분에 대해 확신 할 수 없는 경우 이런 형태를 사용하게 되었습니다.

또한, 2번 형태로 코딩할 때, "어느 책에 절대로!! 2번 형태로 코딩하지마라" 라고 써있는 건 아닐까?" 걱정도 됐습니다.

최근 이에 대한 조언을 해준 사람이 있었는데, 바로 "켄트 백"이네요. ^^


[호칭]
    1번 형태 : Eager Initialize (열성적 초기화)
    2번 형태 : Lazy Initialize (게으른 초기화)


[장점]
    Eager : 디버깅이 쉽다
    Lazy : 남용하면 디버깅이 어려워 질 수 있다.(권장)

[그럼 언제써?]
    Eager : 초기화가 퍼포먼스에 무리를 주기 않는 환경일 때
    Lazy : 초기 구동시간을 줄이거나, 특별히 퍼포먼스에 집중해야 할 때

[예를 들어봐]
    VS2005, Netscape, Photoshop 들의 공통점이 있다. 초기 구동시간이 오래걸려서 참으로 지루하다!!
    반면, 최근의 Eclipse. 초기 구동시간이 예전에 비해 엄청 빨라졌다.

[결론]
    "반드시" 해야할 것들만 남기고, "게으른 초기화"를 사용하면,
    초기구동시간을 줄일 수 있을 까~ 하는 생각이 듭니다. ^^
    문제를 대충 해결하려는 목적으로 쓰지 말고, 고민 좀 해서 잘 사용하면, 좀 더 훌륭한 어플을 만들 수 있겠네요.

▶ 참고문헌 : 켄트 벡의 구현 패턴 / 켄트 벡저 / 전동환 역 / 에이콘출판사

by 너굴너굴 | 2009/10/28 15:45 | nUgURi_GURU | 트랙백

wWw wOrLd #2 (Guitar Lesson)

Riff Of the Week™
    http://www.daveweiner.com

by 너굴너굴 | 2009/07/29 11:21 | wWw wOrLd | 트랙백

Stop motion with wolf and pig.

우아!!

반짝반짝 아이디어, 열정 그리고 재력 고개를 숙이다!!

by 너굴너굴 | 2009/07/15 12:57 | fReE nOtE | 트랙백

광고 ^^

이런 광고 너무 좋아!

by 너굴너굴 | 2009/07/09 17:50 | 트랙백

◀ 이전 페이지다음 페이지 ▶