Upgrade to Pro — share decks privately, control downloads, hide ads and more …

웹 어플리케이션 설계와 구현 II - 소프트웨어 설계에 관하여

웹 어플리케이션 설계와 구현 II - 소프트웨어 설계에 관하여

Manjong Han

July 31, 2018
Tweet

More Decks by Manjong Han

Other Decks in Programming

Transcript

  1. ਢ য೒ܻா੉࣌ ࢸ҅৬ ҳഅ II
    - ࣗ೐౟ਝয ࢸ҅ী ҙೞৈ
    2018.07.31

    @ೠࣁࢎ੉ߡࠁউҊ١೟Ү

    ൤ٚ౟ۑ CTO ೠ݅ઙ

    View full-size slide

  2. ࣗ೐౟ਝয ѐߊ੉ۆ?
    • ױ҅੸ ೐۽ࣁझ

    - ࣗ೐౟ਝয ޙઁܳ ৈ۞ ױ҅۽ ա־য ೧Ѿೞח ߑध
    ਃҳࢎ೦ ࠙ࢳ
    ࢸ҅
    ҳഅ
    పझ౟
    ਬ૑ࠁࣻ
    ҅ദ

    View full-size slide

  3. ਃҳࢎ೦ ࠙ࢳ
    • ё୓૑ೱ ࠙ࢳ(Object Oriented Analysis, OOA)

    - ࢎਊ੗੄ ਃҳࢎ೦ਸ ࠙ࢳೞৈ ਃҳػ ޙઁ৬ ҙ۲ػ ݽٚ ௿ېझ(ё୓), ҙ۲ ࣘࢿ
    ߂ ো࢑, ё୓ р੄ ҙ҅١ਸ ੿੄ೞৈ ݽ؛݂ೞח Ѫ

    - ޙઁ ৔৉ীࢲ ё୓ա ѐ֛ٜਸ ଺ইࢲ ӝࣿೞחؘ ઺੼ਸ ك׮.

    View full-size slide

  4. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ҳઑ੸ SW ѐߊ ߑߨۿ

    - ҳઑ੸ ࠙ࢳ(Structured Analysis)

    - ҳઑ੸ ࢸ҅(Structured Design)

    - ҳઑ੸ ೐۽Ӓې߁(Structured
    Programming)
    • ё୓૑ೱ SW ѐߊ ߑߨۿ

    - ё୓૑ೱ ࠙ࢳ(Object Oriented
    Analysis, OOA)

    - ё୓૑ೱ ࢸ҅(Object Oriented
    Design, OOD)

    - ё୓૑ೱ ೐۽Ӓې߁(Object
    Oriented Programming, OOP)

    View full-size slide

  5. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    - ҳઑ੸ ߑߨۿ੄ ޙઁ੼ਸ ೧Ѿೞӝ ਤ೧ ੋр੉ അप ࣁ҅ܳ ੉೧ೞח ߑधਵ۽ द
    झమਸ ѐߊೞ۰ח ֢۱ਵ۽ ఍ࢤ

    - “ؘ੉ఠ৬ ೐۽ࣁझܳ ܻ࠙ೞ૑ ঋҊ ё୓۽ ݽ؛݂”: “ੋр੉ ࢎҊೞח ߑध”

    - അप ࣁ҅ী ઓ੤ೞח ѐ֛ਸ ӝ߈ਵ۽ ೠ ё୓ۄח ة݀ػ ױਤ۽ दझమਸ ҳࢿೞ
    Ҋ, п ё୓ח ݫद૑ܳ ా೧ ࢚ഐ੘ਊ

    View full-size slide

  6. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    - ё୓(object)
    ‣ data + operation on data

    ‣ instance of class

    - ௿ېझ(class)
    ‣ description, abstraction

    - ݫࣁ૑(message)
    ‣ ё୓ р ࢚ഐ ੘ਊ(ݫࣗ٘ ഐ୹) ࣻױ

    View full-size slide

  7. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    - ё୓(object)
    ‣ അप ࣁ҅ী ઓ੤ೞח ѐ֛੉ա ޛ୓۽ աఋյ ࣻ ੓ח ױਤ

    ‣ ؘ੉ఠ: ௿ېझ੄ ࣘࢿী ׸ӝח ё୓੄ ࢚కܳ աఋղח ੿ࠁ

    ‣ ؘ੉ఠী ҙೠ ઑ੘(ݫࣗ٘): ё୓о ୊ܻೡ ࣻ ੓ח ӝמ. ё୓੄ ࢚కܳ ߸҃
    <ࣘࢿ>: <ؘ੉ఠ>
    <ݫࣗ٘>
    ݫद૑ ਽׹

    View full-size slide

  8. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    - ௿ېझ(class)
    ‣ ё୓ܳ ࢤࢿೡ ࣻ ੓ח ҳઑ, ౣ, మ೒݁

    ‣ ё୓ܳ “௿ېझ੄ ੋझఢझ(instance)”ۄҊ ܴࠗ

    ‣ ௿ېझܳ “ё୓੄ ఋੑ(type)”੉ۄҊ ܴࠗ

    ‣ ࢚ਤ ఋੑਵ۽ ୶࢚ചೡ ࣻ ੓ח ؀࢚

    View full-size slide

  9. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    - ݫࣁ૑(message)
    ‣ ё୓ р ࢚ഐ ੘ਊೡ ٸ ࢎਊغח ࣻױ

    ‣ ׮ܲ ё୓ীࢲ ౠ੿ ё୓ܳ ߸҃ೞӝ ਤೠ ਃ୒ नഐ

    ‣ ࣻन੗ ё୓ ੉ܴ, ࣻ೯ೡ ݫࣗ٘ ੉ܴ, ੋ੗۽ ҳࢿ

    ‣ ݫद૑ܳ ࣻन߉਷ ё୓ח ೧׼ೞח ݫࣗ٘ܳ ࣻ೯ೞৈ ਽׹ ߈ജ

    View full-size slide

  10. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    - ୶࢚ച(abstraction)
    ‣ ࢚ࣁೠ ղਊਸ ऀӝҊ ೨ब੸ੋ ࠗ࠙(ౠ૚)ਸ ъઑೞৈ ݽ؛ച

    - ஭ङച(encapsulation)
    ‣ ੿ࠁ ਷ץਸ ా೧ ё୓ р Ѿ೤بܳ хࣗदெ ਬ૑ࠁࣻ ਊ੉, ੤ࢎਊࢿ ૐ؀

    - ࢚ࣘࢿ(inheritance)
    ‣ ೞਤ ఋੑীࢲ ࢚ਤ ఋੑ੄ ӝמਸ ࢎਊೞৈ ഛ੢ೡ ࣻ ੓ب۾ ೲਊ

    - ׮ഋࢿ(polymorphism)
    ‣ ೞਤ ఋੑীࢲ ࢚ਤ ఋੑ੉ ઁҕೞח ߑߨਸ ా೧ Ҋਬೠ ز੘ਸ ࣻ೯ оמ

    View full-size slide

  11. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    - ୶࢚ച(abstraction)
    ‣ ё୓ р ҕాػ ࣘࢿ੉ա ೯ਤܳ ୶୹ೞৈ ޘח Ѫ

    ‣ ઺ਃೞ૑ ঋѢա ઱ ҙब ؀࢚੉ ইצ ੗ࣁೠ ࠗ࠙਷ х୶ח Ѫ

    ‣ झಖҗ ҳഅਸ ܻ࠙ೞӝ ਤೠ ݾ੸ਵ۽ ࢎਊ

    View full-size slide

  12. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    - ஭ङച(encapsulation)
    ‣ ࢲ۽ ҙ۲ ੓ח ؘ੉ఠ৬ ੉ܳ ઑ੘ೡ ࣻ ੓ח ݫࣗ٘ܳ ೠ ޘ਺ਵ۽ ୊ܻ

    ‣ ੽Ӕ૑੿੗ܳ ాೠ ੿ࠁ ਷ץਵ۽ ղࠗ ؘ੉ఠܳ ৻ࠗ ੽Ӕਵ۽ࠗఠ ࠁഐ

    ‣ ё୓ р ࢚ഐ੘ਊਸ ݫद૑݅ਵ۽ оמೞѱ ೣ

    View full-size slide

  13. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    - ࢚ࣘࢿ(inheritance)
    ‣ Is-A ҙ҅۽ࢲ ӝઓ ௿ېझ۽ࠗఠ੄ ഛ੢ਸ ਊ੉ೞѱ ೣ

    ‣ ӝઓ ௿ېझܳ ੤ࢎਊೡ ࣻ ੓Ҋ, ઺ࠂغח ࠗ࠙ਸ ઁѢೡ ࣻ ੓਺

    View full-size slide

  14. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    - ׮ഋࢿ(polymorphism)
    ‣ زੌೠ ੉ܴ੄ ݫࣗ٘о ௿ېझী ٮۄ ׮ܰѱ ੿੄ؼ ࣻ ੓਺

    ‣ Overloading

    زੌೠ ੉ܴ੄ ݫࣗ٘о ೞਤ ఋੑীࢲ ׮ܲ ࢎনਵ۽ ੿੄ؼ ࣻ ੓਺

    ‣ Overriding

    زੌೠ ݫࣗ٘о ೞਤ ఋੑীࢲ ׮ܲ ز੘ਸ ೞب۾ ੤੿੄ೡ ࣻ ੓਺

    View full-size slide

  15. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ࠙ࢳ(Object Oriented Analysis, OOA)

    • ё୓૑ೱ ࢸ҅(Object Oriented Design, OOD)

    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)

    View full-size slide

  16. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ࠙ࢳ(Object Oriented Analysis, OOA)

    • ё୓૑ೱ ࢸ҅(Object Oriented Design, OOD)

    • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)
    What
    How

    View full-size slide

  17. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    ё୓૑ೱ ࠙ࢳҗ ࢸ҅(Object Oriented Analysis/Design, OOA/D)
    “ё୓(object)੄ ଼੐ਸ ݺഛ൤ ೞח Ѫ”
    “ё୓ܳ ੿੄ೞҊ যڌѱ ࢲ۽ ҙ҅ܳ ݛѱ ೡ Ѫੋо”

    View full-size slide

  18. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ࠙ࢳ(Object Oriented Analysis, OOA)

    - ࢎਊ੗੄ ਃҳࢎ೦ਸ ࠙ࢳೞৈ ਃҳػ ޙઁ৬ ҙ۲ػ ݽٚ ௿ېझ(ё୓), ҙ۲ ࣘࢿ
    ߂ ো࢑, ё୓ р੄ ҙ҅١ਸ ੿੄ೞৈ ݽ؛݂ೞח Ѫ

    - ޙઁ ৔৉ীࢲ ё୓ա ѐ֛ٜਸ ଺ইࢲ ӝࣿೞחؘ ઺੼ਸ ك׮. (ѐ֛ ੿੄)

    View full-size slide

  19. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ё୓૑ೱ ࢸ҅(Object Oriented Design, OOD)

    - ё୓੄ ѐ֛ਸ ష؀۽ ੿੄ ߂ ҳ୓ചೠ׮. (଼੐ ೡ׼)

    - п ё୓ٜ р ࢲ۽ যڌѱ ҙ҅ܳ ݛѱ ೡ Ѫੋоܳ Ѿ੿ೠ׮. (message)

    View full-size slide

  20. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    بݫੋ ѐ֛(ஶࣆ) بݫੋ दпച(಴ӝ) ҳഅ
    Car
    - name

    - color

    - vendor

    - owner
    + openWindow()

    + lockDoor()

    + start()
    class Car {

    String name;

    String color;

    Vendor vendor;

    Person owner;

    void openWindow() {}

    void lockDoor() {}

    void start() {}

    }

    View full-size slide

  21. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    <ࢎਊࢎ۹ ੿੄>
    UseCase ׮੉যӒ
    ۔ਸ ా೧ दझమਸ
    ࢎਊೞח ઱୓৬ दझ
    మ੄ ӝמਸ ౵ঈ
    <بݫੋ ݽ؛ ੿੄>
    दझమ ࢎਊ ઱୓ ߂
    दझమ੄ ӝמ੉ ز੘
    ೞӝ ਤ೧ ೙ਃೠ ਃ
    ٜࣗਸ ё୓۽ ಴അ
    <࢚ഐ੘ਊ ׮੉যӒ
    ۔ ੿੄>
    दझమ ࢎਊ ઱୓о
    п بݫੋҗ যڃ ࢚
    ഐ੘ਊਸ ా೧ࢲ ӝמ
    ਸ ੉ਊೞѱ غח૑
    ౵ঈ
    <ࢸ҅ ௿ېझ ੿੄>
    दझమ ࢎਊ ઱୓о
    दझమ੄ ӝמਸ ࢎਊ
    ೞӝ ਤ೧ ೙ਃೠ ਃ
    ٜࣗ݅ ё୓۽ ಴അ

    View full-size slide

  22. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • UML(Unified Modeling Language)

    - Rumbaugh੄ OMT, Booch੄ OOD, Jacobson੄ OOSE ١ ׮নೠ ё୓૑ೱ
    ࠙ࢳ ߑߨۿ੉ ઓ੤೮Ҋ, ੉ܳ ా೤ೞӝ ਤ೧ UML ١੢

    - ё୓૑ೱ ࠙ࢳ ߂ ࢸ҅ܳ ਤೠ ಴ળചػ ё୓૑ೱ ݽ؛݂ ঱য

    - ୨ 14о૑੄ ׮੉যӒ۔ ઙܨ ઓ੤ (ҳઑ ׮੉যӒ۔ 7ѐ, ೯ز ׮੉যӒ۔ 7ѐ)

    View full-size slide

  23. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ઱ࢎਤ ѱ੐ ৘ઁ

    - ف ࢎۈ੄ ҃ӝ੗ח 2ѐ੄ ઱ࢎਤܳ ҷ۰ ف ࣻܳ ঳ب۾ ਃ୒ೠ׮.

    - दझమ਷ ف ࢎۈ੄ Ѿҗܳ ࠺Үೞৈ, ׮਺੄ ӏ஗ਵ۽ थಁܳ Ѿ੿ೞৈ ୹۱ೠ׮.

    ‣ ف ࣻо эਵݴ, ֫਷ ं੗ੌ ҃਋ थܻ

    ‣ ف ࣻ੄ ೤੉ ؊ ௾ ҃਋ थܻ

    View full-size slide

  24. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ઱ࢎਤ ѱ੐ ৘ઁ

    - 1. ࢎਊ ࢎ۹ ੿੄
    ઱ࢎਤܳ ؍૓׮
    ੤ب੹ೠ׮
    ҃ӝ੗

    View full-size slide

  25. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ઱ࢎਤ ѱ੐ ৘ઁ

    - 2. بݫੋ ݽ؛ ੿੄
    Player Die
    - name - faceValue
    Game
    2 2
    Rolls
    Plays
    2
    1
    Includes
    2
    1

    View full-size slide

  26. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ઱ࢎਤ ѱ੐ ৘ઁ

    - 3. ࢚ഐ੘ਊ ׮੉যӒ۔ ੿੄
    : Game d1: Die d2: Die
    ҃ӝ੗
    play()
    roll()
    getFaceValue()
    roll()
    getFaceValue()

    View full-size slide

  27. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ
    • ઱ࢎਤ ѱ੐ ৘ઁ

    - 4. ࢸ҅ ௿ېझ ੿੄
    2
    1
    Die
    - faceValue : int
    + roll()

    + getFaceValue(): int
    Game
    - die1: Die

    - die2: Die
    + play()

    View full-size slide

  28. ࢸ҅
    • ୶࢚ച (abstraction)

    - ࣁࠗ੸ੋ ҳഅ਷ х୶Ҋ, ੄بܳ աఋղח ӝמਸ ֢୹ೠ׮.

    - ೨ब/ҕా੸ੋ ࠗ࠙ਸ ࢚ਤ ఋੑ(௿ېझ/ੋఠಕ੉झ)ਵ۽ ݽਵח Ѫ

    - ࢚ਤ ఋੑਸ ా೧ ੄ب(ӝמ)ܳ աఋյ ࣻ ੓Ҋ, ੉ܳ ৻ࠗ ݽٕীࢲ ࢎਊ оמ

    View full-size slide

  29. ࢸ҅
    • ֫਷ ਽૘ب, ծ਷ Ѿ೤ب (high cohension, low coupling)

    - ਽૘ب: ೞա੄ ݽٕ(௿ېझ)੉ ੗न੄ ӝמ(଼੐)ਸ ৡ੹ೞѱ ׸׼ೞח ੿ب

    - Ѿ೤ب: ৈ۞ ݽٕ(௿ېझ) рী ଵઑೞҊ ੓ח ҙ҅(੄ઓࢿ)о ъೠ ੿ب

    - ਽૘بо ֫ইঠ ੤ࢎਊࢿ੉ ֫ই૑Ҋ, Ѿ೤بо ծইঠ ਬ૑ࠁࣻо ਊ੉೧૗.

    View full-size slide

  30. ࢸ҅
    • ইఃఫ୛(architecture) ࢸ҅

    - Multitier ইఃఫ୛ (N-tier ইఃఫ୛, Multilayered ইఃఫ୛)

    - MVC (Model-View-Controller) ٣੗ੋ ಁఢ

    - بݫੋ ઱ب ѐߊ (Domain Driven Development)

    - Representational state transfer (REST)

    View full-size slide

  31. ࢸ҅
    • ؘ੉ఠ߬੉झ(database) ࢸ҅

    - ҙ҅ഋ DBMS (Relational Database Management System)

    - ERD (Entity-Relationship Diagram)

    - ؘ੉ఠ߬੉झ ੿ӏച (Database Normalization)

    - ؘ੉ఠ߬੉झ ࠙ೡ (Database Partitioning)

    View full-size slide

  32. Reference

    https://en.wikipedia.org/wiki/Unified_Modeling_Language

    http://contents.kocw.or.kr/document/lec/2011/33/04/Ch01.pdf

    http://byul124.cafe24.com/blog/wp-content/uploads/1/1059072550.pdf

    http://cjmyun.tripod.com/Knowledgebase/ConceptsOfObjectOriented.htm

    View full-size slide