[완료]top-down 프로그램 설계 방식의 핵심은 무엇일까요??

copower의 이미지

프로그램 설계 방식에 여러가지가 존재하고 개념적으로 쉽게 접근 할 수 있다고 생각된것이..
탑다운 방식과 바텀업방식의 설계방식이라고 생각하고있습니다.
그중에서 탑다운에 관련된 공부때문에 자료를 찾아보고 모아보고 있습니다.
문제는 개념적으로 설명되어있거나....예를 들자면 큰 덩어리(프로그램)를 작은 덩어리(기능)로 나누어서 설계하는 방식이다....라던지, 전체적인 프로그램의 기능을 다이어그램으로 구성하는것만으로는..
"이것이 탑다운이다"라고 스스로 정의를 내리기에 애매모호한것 같습니다.
(확실히, 프로그램 설계에 대한 경험이 부족한것은 인정합니다...)

추천해주실만한 책이나 포럼, 정리되어진 개인 블로그와 같은 정보를 가지고 계시다면 도와주세요..!!

추가적인 질문으로는 탑다운이던, 바텀업이던, 혹은 그외에 존재하는 다양한 프로그램 설계 방식에 있어서 클라이언트와 대화를 통해서 사전 지식 정보를 얻거나 필수 기능들을 도출하는 과정이 반드시 필요하다고 생각합니다. 하지만, 제 멘토분께서는 그런 사전 지식이나 질의없이도 탑다운 디자인은 구상이 될수있고, 또, 그렇게 해야만 한다고 말씀하셨습니다. 제가 의미를 잘못파악하고 있을수도 있지만 멘토분께서는 탑다운방식의 궁극적인 방향을 설명하신것 같은데요. 이런 정보는 어디서 찾을 수 있는지 궁금합니다.

혹시...프로그램 설계에서 논하는(다른 분야에서도 탑다운 방식을 사용함으로..) 탑다운 방식의 창시자가 누군지 아시는분 계신가요? 책이나 게시글이라도 알려주시면 열심히 공부하겠습니다.

oosap의 이미지

탑다운 방식과 바텀업방식의 설계방식이라고 생각하고있습니다.
"이것이 탑다운이다"라고 스스로 정의를 내리기에 애매모호한것 같습니다.

여기서 말씀하시는 탑다운과 바툼업방식이라는 용어의 출처는 무엇인가요? 명확한 정의가 없는 용어인가요? 용어 의미가 불분명해서 질문이 와닿지가 않습니다.

클라이언트와 대화를 통해서 사전 지식 정보를 얻거나 필수 기능들을 도출하는 과정이 반드시 필요하다고 생각합니다. 하지만, 제 멘토분께서는 그런 사전 지식이나 질의없이도 탑다운 디자인은 구상이 될수있고, 또, 그렇게 해야만 한다고 말씀하셨습니다. 제가 의미를 잘못파악하고 있을수도 있지만 멘토분께서는 탑다운방식의 궁극적인 방향을 설명하신것 같은데요. 이런 정보는 어디서 찾을 수 있는지 궁금합니다.

이 이야기를 보면 멘티 되시는 님께서는 요구분석의 중요성을 말씀하셨고 멘토 되시는 분께서는 요구변화를 염두에둔 일반적인 설계방식을 말씀하신 것 같아요. 이 얘기로 보면 디자인패턴이 떠오르네요. 디자인패턴이 바로 자주 등장하는 설계 목적을 달성하기 위한 해결책들을 모아둔 것이니까요.

탑다운이 디자인패턴이라면 혹은 디자인패턴이 탑다운이라면 디자인 패턴의 창시자가는 패턴랭귀지라는 책을 쓴 크리스토퍼 알렉산더인 것 같습니다.

http://jpub.tistory.com/tag/%ED%8C%A8%ED%84%B4%EB%9E%AD%EA%B7%80%EC%A7%80

크리스토퍼 알렉산더를 검색해보니 블로그 하나가 보이네요..

제가 요즘 답글을 너무 많이 다는 것 같아요.. 좀 글 쓰기를 자제해야 할 듯... 합니다.
제 글이 도움이 될까 모르겠습니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

ifree의 이미지

폴 그래험이 그의 저서 On Lisp 에서 한 말을 요약해 보면:
톱다운 방식은 plan and implementation 방식으로서, 프로그램에 대한 전반적인 설계를 먼저 구체적으로 하고 이를 모듈별로 나누어 구현하는 방식입니다. 하지만 처음에 만든 디자인이 완전한 경우는 거의 없기 때문에 계획이 수정되면서 이의 구현이 계속 변화해야 하고, 최악의 경우에는 처음부터 다시 시작해야 하는 일도 생기게 됩니다.
이에 반해 바텀업 방식은 프로그램의 목표에 맞추어 언어를 재설계하고(LISP 의 마크로 기능을 말하는 듯) 이를 기반으로 융통성있게 프로그램을 만들어 나가는 방식을 의미합니다.
바텀업 방식은 단순히 프로그램 제작 순서를 거꾸로 하는 것이 아니며 프로그램 언어와 목표하는 프로그램의 유기적인 상호관계를 바탕으로 재사용 가능한 코드를 생산하는 것입니다.
톱다운 방식은 프로그램 크기가 커질 수록 참여하는 개개 프로그래머의 역할이 작아지지만, 바텀업 방식에서는 오히려 각 프로그래머의 역할이 커질 수도 있다고 합니다.

copower의 이미지

우선 제가 궁금했었던 내용은 단순히 탑다운 방식의 핵심이 무엇이냐 였습니다.. 개념적설명은 많이들어서 알고있었지만 실제로 설계를하다보니 괴리감? 이랄까요 경험이 부젹한 제게는 그 프로그램을 모듈별로 나누어서 개발한다는것이 어렵게 느껴지네요...
프로그램 개발론에서 탑다운방식의 시초는 누구인지 찾기어려운걸까요... 검색해도 잘 안보이
네요... 아니면 제 검색 방식이 이상할수도 있겠네요 ..;;;

DarkSide의 이미지

대부분의 프로그래밍 책이 프로그래밍 방식은 당연히 탑다운이라는 전제 하에 쓰여져 있습니다.
때문에 탑다운이라는 개념 자체가 별도로 정립되지 않는거죠.
대부분의 디자인 패턴이나 Code Complete 같은 책들이 결국은 탑다운 프로그래밍 방법론이라는...

moldycake의 이미지

class 개념을 깊게 이해해 보시는것도....

copower의 이미지

역시 원론적인 이야기도 좋지만 스스로 연습을 많이해봐야겠네요... 이런 프로그랩이라면 어떨게 탑다운으로 디자인해야할까....그리고 그리고 그려보는게 정답인것 같네요:)
아참그리고 지금 유니티 3D 부트캠프에 와있는데 재미나네요 오홍오홍

copower의 이미지

몇일동안 검색해서 안나오신것이... 이리도 허무한 검색어에 걸려서 나오네요....
제가 검색을 그동안 잘못하고 있었나봅니다...
혹시 어느분께서 검색하시다가 이글은 본다면, 도움이 되실수도....있겠지요??
p.s: 아무리 글을 읽어봐도 원문이 잘못 번역된 부분도 있는것 같습니다. 원문은 못찾아서 어설프게 번역된 부분을 찾아서 올려놓습니다. 최초 제안자는 확실한것 같으니까요:)

-톱 다운 설계는1970연대에IBM의 연구자 하-런·밀스(와)과니크라우스·비르트하지만 제안했다.밀스는구조화 프로그래밍(을)를 실용화해,1969해에뉴욕·타임즈종이의 자료 검색의 자동화 프로젝트로 실천하고 성과를 올렸다.이것으로부터, 톱 다운 설계가IBM(이)나 다른 컴퓨터 기업에서 넓게 채용되게 되었다.비르트는Pascal언어의 개발자이며,Program Development by Stepwise Refinement 그렇다고 하는 논문이 업계에 영향을 주었다.톱 다운 설계는1980연대에객체 지향프로그래밍하지만 대두해 올 때까지 가장 지지를 받은 수법이었다.

copower의 이미지

Top-down design was promoted in the 1970s by IBM researcher Harlan Mills and Niklaus Wirth. Mills developed structured programming concepts for practical use and tested them in a 1969 project to automate the New York Times morgue index. The engineering and management success of this project led to the spread of the top-down approach through IBM and the rest of the computer industry. Among other achievements, Niklaus Wirth, the developer of Pascal programming language, wrote the influential paper Program Development by Stepwise Refinement. Since Niklaus Wirth went on to develop languages such as Modula and Oberon (where one could define a module before knowing about the entire program specification), one can infer that top down programming was not strictly what he promoted. Top-down methods were favored in software engineering until the late 1980s, and object-oriented programming assisted in demonstrating the idea that both aspects of top-down and bottom-up programming could be utilized.

댓글 달기

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