'테스트 주도 개발' 예제 중에 질문입니다.

greathj의 이미지

어제 '테스트 주도 개발'을 구입해서 읽고 있습니다.
8장에 보면 Money, Dollar, Franc 클래스를 이용하여 아래와 같은 자바 예제가 나옵니다.

Money는 Dollar, Franc의 부모클래스입니다. 그런데 Money안에서 static factory method를 아래와 같이 구현해서 사용합니다.

Money
static Dollar dollar(int amount) {
return new Dollar(amount);
}

Money
static Franc franc(int amount) {
return new Franc(amount);
}

위와 같이 부모클래스에서 자식클래스의 인스턴스를 생성하도록 하는 것이 일반적인 방법인지요? 참고로 저는 C++만 사용해온지라 자바에 대해서는 잘 모르는 상황입니다. C++로도 Dollar, Franc을 Money앞에 전방선언 해놓으면 유사하게 구현은 가능할 것 같은데 이런 식의 구현은 사용해본 기억이 없어서 질문드립니다. 부모클래스가 자식클래스에 대하여 의존성을 갖게 되는 문제가 생길 것 같은데 이를 감안할 만한 장점이 많이 있는 것인가요? 좀더 유연할 것 같긴한데... 역시 상황에 따른 선택의 문제인가요?^^;

hayarobi의 이미지

팩토리 메써드 패턴을 응용한 예제로 알고 있습니다. 별개의 팩토리 클래스를 만들어 인스턴스 생성을 담당하게 할 수도 있지만 저런 식으로 공통 인터페이스를 가진 클래스에서 생성을 담당할 수도 있죠. 어느 쪽이든 Money클래스의 서브클래스가 추가되면 팩토리 역할을 하는 클래스도 메써드가 추가가 되어야 하는 것은 마찬가지겠죠.

저기서 의존성은 생성자 하나가 걸리네요.

---------- 시그 *****
저도 세벌식을 씁니다.
M$윈도우즈, 리눅스, 맥 오에스 텐, 맥 오에스 클래식을 모두 엔드유저 수준으로 쓴답니다.
http://psg9.egloos.com

=================
잠못자는 한솔아빠

rhheo의 이미지

저두

Money클래스 추상클래스로 하고
 Dollar클래스
 Franc클래스

를 상속받게 할 것 같습니다.
MoneyFactory클래스에서 원하는 돈을 만들어 주고요 ++;

아마 책에서는 클래스를 좀 줄이고 싶었나 모르겠네요.

이런 경우에는 유효할 지도 모르겠습니다.

Money에
Money.getTotalDollar()
Money.getTotalFranc()
Money.getTotalMoney()
같은 간단한 활용이 필요한 경우 Money안으로 모두 넣어 버릴 수도 있을 것 같기도 하군요.

복잡해 진다면 역시 클래스들을 다시 생각해서 나눠야 할 것 같고요.
여튼 최대한 심플하게 만들면서
어떤 시점에서 대상을 바라 보느냐에 따라서
유동적으로 클래스 구성을 하는 경우가 많은 것 같습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.