버전 관리 용이한 클래스 디자인 소개 부탁드립니다.

bloody의 이미지

버전 관리 용이한 객체지향 디자인(클래스 디자인, 디자인패턴) 소개 부탁드립니다.

현재 프로그램 버전이 0.2 라고 한다면...0.3버전을 개발할 때에는 0.2 버전의 기능들을 유지하면서
0.3 버전의 추가적인 기능이나 변경된 기능들을 사용하고 싶은데요

예를들어 파일관리하는 프로그램이라고 치고 0.2 버전에서 설계된 클래스들을 유지하면서 0.3 버전이 개발되어도
하위 버전들에서 호환성에 문제가 없도록 하고 싶습니다.

가장 전형적인 방법은 (MS가 워드 프로그램 만들때 섰던 방법이라고 하던데...)
0.2 버전으로 만들어진 클래스를 0.3버전에서 상속해서 사용하는 방법이 되겠는데요.
그러면 나중에 5.323 버전 쯤 됬을 경우는 상속이 도대체 몇번 되어져야 한다는 건가요?
몇십번 몇백번의 상속이 이루어져야 할것 같은데...그건 좀 아닌것 같고요

하위버전 호환성을 유지하면서 매끈하게 프로그램을 짤러면 클래스 디자인이 어떻게 되야 할지 궁금합니다.

klara의 이미지

보통 5.323 버전이면 0.2 버전은 지원 안하죠.

익명 사용자의 이미지

그런 디자인 방법은 없습니다
없다고 하니 시도할까봐 그러는데
누군가 안해서 없는게 아니라 할 가치가 없기때문에 안하는겁니다
일층집에 철골 구조물 덧댄다고 63빌딩 지을 수 있을리가 없죠

mirheekl의 이미지


(개인적인 생각입니다.)

가령 프로그램 버전 1.0이 사용하는 라이브러리 A,B가 버전1이라면, 2.0을 개발하기 시작할 때 이걸 따로 브랜치해버립니다.

그리고 버전 2.0이 사용하는 라이브러리도 별개의 버전, 즉 2.0으로 가는거죠. 2.0에선 원하는대로 자유롭게 구조를 바꾸면 되고요.

이렇게 하지 않으면 설계를 그럴싸하게 한다 하더라도 나중에 결국 문제가 생깁니다.

버그픽스같은건 브랜치별로 각각 병합하면 되니까 의미없는 반복작업에 대해선 크게 걱정하지 않으셔도 됩니다.

--

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.