Google Singleton Detector

Posted 2007. 8. 30. 16:27
구글이 Google Singleton Detector(이하 GSD)라는 재미있는 프로젝트를 내놨더군요. GSD는 자바 바이트코드를 분석해 싱글톤 패턴을 찾아주는 프로그램입니다. 싱글톤을 식별해 내고, 싱글톤에 의존적인 클래스를 그래프 형태로 뿌려주기 때문에 프로그램 내의 글로벌 상태와 이에 의존적인 코드를 쉽게 찾아낼 수 있게 됩니다.

GSD는 싱글톤을 타입에 따라서 Singleton(우리가 일반적으로 알고 있는 자바의 singleton 패턴), Hingleton(helper 클래스를 이용하면 singleton), Mingleton(method signleton), Fingleton(public static field 사용하는 field singleton)으로 구분하고 있습니다. 관련된 내용은 Understanding the Graph를 참고하세요.

이 프로그램의 목적은 싱글톤 패턴을 찾아서 제거하려는 데 있습니다. 구글에서는 싱글톤 패턴을 제거해야 하는 아주 해로운 패턴으로 판단했나 봅니다. 프로젝트 페이지를 읽어보시면, 싱글톤은 테스트를 어렵게 만들고, 디자인의 문제를 숨기는 역할을 한다고 이야기하고 있습니다. 사실 싱글톤 패턴은 처음 디자인 패턴을 접한 분들이 이해하기도 쉽고, 기존 코드에 적용하기도 쉬워서 애용(혹은 오용) 되어 왔는데, 이제는 자동화된 도구를 만들어서라도 제거하려는 안티 패턴(anti pattern)이 되고 말았군요.

결국 어떤 패턴이던지 어떻게 사용하느냐의 문제인데, xxxManager, xxxRegistry 등의 클래스가 범람하고 모든 클래스가 싱글톤이 되어서 복잡하게 얽혀 있으면 전역 변수 사용과 다를 바가 없겠지요. 반대로 정말 시스템이 하나만 존재해야 하는 인스턴스의 경우 싱글톤이 필요할 것입니다. Bruce Eckel은 자신의 웹로그에 남긴 Singleton Considered Harmful?이라는 글에서 싱글톤 패턴 자체는 나쁘지 않다는 견해를 밝혔군요.

어쨌거나, 자바로 프로젝트 하시는 분들은 한 번 돌려보시고, 프로그램 내에 전역 변수가 어떻게 얽혀 있는지 한 번 보시는 것도 좋을 것 같습니다.



  1. 전광식

    | 2007.08.30 22:44 | PERMALINK | EDIT | REPLY |

    Singleton은 정말 나쁜 것으로 생각합니다. 패턴에서도 빼야죠. 어떻게 C도 배우지 않은 초보 자바 개발자들이 static method만 으로 프로그램을 짤 수 있는지 놀랍습니다.

    하지만, Java와 같은 순수 OOP 언어에서는 기술적으로 없앨 수 없다고 생각합니다.

    얼마 전에 본 Python Pattern 강좌에서 Java의 Helper method들은 Python에서 module의 function으로 처리할 수 있다는 것을 보고 충격을 받았습니다. (너무 당연해서 생각을 잠시 못한 것이 부끄러워서 ^^)

    오용이 많다는 점 하나만으로도 anti-pattern으로 처리하는 것이 옳다고 생각합니다.

  2. 서광열

    | 2007.08.30 23:34 | PERMALINK | EDIT |

    얼마 전에 보신 파이썬 패턴 강좌는 어떤 것인가요? 저도 한 번 보게요 :)

  3. 전광식

    | 2007.08.31 00:24 | PERMALINK | EDIT |

    http://video.google.com/videoplay?docid=-3035093035748181693

  4. Favicon of http://mate4u.com BlogIcon 함대식

    | 2007.08.31 13:50 | PERMALINK | EDIT | REPLY |

    재미있는 프로젝트네요.
    서브시스템을 구현하거나
    말 그대로 인스턴스를 제한할 때는 여전히 유용한 패턴이라고 생각하지만
    어쨌거나 부작용이 문제군요.
    하지만 초보 개발자들이 삽질한다는 이유로 나쁘다는건 좀 .. ^^
    그러면 C++같은 언어는 없어져야;;

  5. 서광열

    | 2007.08.31 15:02 | PERMALINK | EDIT |

    그렇지. C++ 언어는 없어져야...ㅎㅎㅎㅎ

  6. Favicon of http://blog.naver.com/smiler82 BlogIcon 서상원

    | 2007.09.02 01:03 | PERMALINK | EDIT | REPLY |

    static 변수가 남용되고 있는 것은 정말 문제가 좀 있는 것 같습니다. 그러고 보니 제가 짠 클래스에도 불필요할 정도로 xxxManager, xxxRegistry 란 클래스가 참 많은것 같네요.^^

Write your message and submit
« PREV : 1 : ··· : 90 : 91 : 92 : 93 : 94 : 95 : 96 : 97 : 98 : ··· : 244 : NEXT »