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

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

Ece15b53ae1e0272f01dec83255af7cb?s=128

Manjong Han

July 31, 2018
Tweet

Transcript

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

    @ೠࣁࢎ੉ߡࠁউҊ١೟Ү ൤ٚ౟ۑ CTO ೠ݅ઙ
  2. ࣗ೐౟ਝয ѐߊ੉ۆ? • ױ҅੸ ೐۽ࣁझ - ࣗ೐౟ਝয ޙઁܳ ৈ۞ ױ҅۽

    ա־য ೧Ѿೞח ߑध ਃҳࢎ೦ ࠙ࢳ ࢸ҅ ҳഅ పझ౟ ਬ૑ࠁࣻ ҅ദ
  3. ਃҳࢎ೦ ࠙ࢳ • ё୓૑ೱ ࠙ࢳ(Object Oriented Analysis, OOA) - ࢎਊ੗੄

    ਃҳࢎ೦ਸ ࠙ࢳೞৈ ਃҳػ ޙઁ৬ ҙ۲ػ ݽٚ ௿ېझ(ё୓), ҙ۲ ࣘࢿ ߂ ো࢑, ё୓ р੄ ҙ҅١ਸ ੿੄ೞৈ ݽ؛݂ೞח Ѫ - ޙઁ ৔৉ীࢲ ё୓ա ѐ֛ٜਸ ଺ইࢲ ӝࣿೞחؘ ઺੼ਸ ك׮.
  4. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ҳઑ੸ SW ѐߊ ߑߨۿ - ҳઑ੸

    ࠙ࢳ(Structured Analysis) - ҳઑ੸ ࢸ҅(Structured Design) - ҳઑ੸ ೐۽Ӓې߁(Structured Programming) • ё୓૑ೱ SW ѐߊ ߑߨۿ - ё୓૑ೱ ࠙ࢳ(Object Oriented Analysis, OOA) - ё୓૑ೱ ࢸ҅(Object Oriented Design, OOD) - ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)
  5. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) -

    ҳઑ੸ ߑߨۿ੄ ޙઁ੼ਸ ೧Ѿೞӝ ਤ೧ ੋр੉ അप ࣁ҅ܳ ੉೧ೞח ߑधਵ۽ द झమਸ ѐߊೞ۰ח ֢۱ਵ۽ ఍ࢤ - “ؘ੉ఠ৬ ೐۽ࣁझܳ ܻ࠙ೞ૑ ঋҊ ё୓۽ ݽ؛݂”: “ੋр੉ ࢎҊೞח ߑध” - അप ࣁ҅ী ઓ੤ೞח ѐ֛ਸ ӝ߈ਵ۽ ೠ ё୓ۄח ة݀ػ ױਤ۽ दझమਸ ҳࢿೞ Ҋ, п ё୓ח ݫद૑ܳ ా೧ ࢚ഐ੘ਊ
  6. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) -

    ё୓(object) ‣ data + operation on data ‣ instance of class - ௿ېझ(class) ‣ description, abstraction - ݫࣁ૑(message) ‣ ё୓ р ࢚ഐ ੘ਊ(ݫࣗ٘ ഐ୹) ࣻױ
  7. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) -

    ё୓(object) ‣ അप ࣁ҅ী ઓ੤ೞח ѐ֛੉ա ޛ୓۽ աఋյ ࣻ ੓ח ױਤ ‣ ؘ੉ఠ: ௿ېझ੄ ࣘࢿী ׸ӝח ё୓੄ ࢚కܳ աఋղח ੿ࠁ ‣ ؘ੉ఠী ҙೠ ઑ੘(ݫࣗ٘): ё୓о ୊ܻೡ ࣻ ੓ח ӝמ. ё୓੄ ࢚కܳ ߸҃ <ࣘࢿ>: <ؘ੉ఠ> <ݫࣗ٘> ݫद૑ ਽׹
  8. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) -

    ௿ېझ(class) ‣ ё୓ܳ ࢤࢿೡ ࣻ ੓ח ҳઑ, ౣ, మ೒݁ ‣ ё୓ܳ “௿ېझ੄ ੋझఢझ(instance)”ۄҊ ܴࠗ ‣ ௿ېझܳ “ё୓੄ ఋੑ(type)”੉ۄҊ ܴࠗ ‣ ࢚ਤ ఋੑਵ۽ ୶࢚ചೡ ࣻ ੓ח ؀࢚
  9. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) -

    ݫࣁ૑(message) ‣ ё୓ р ࢚ഐ ੘ਊೡ ٸ ࢎਊغח ࣻױ ‣ ׮ܲ ё୓ীࢲ ౠ੿ ё୓ܳ ߸҃ೞӝ ਤೠ ਃ୒ नഐ ‣ ࣻन੗ ё୓ ੉ܴ, ࣻ೯ೡ ݫࣗ٘ ੉ܴ, ੋ੗۽ ҳࢿ ‣ ݫद૑ܳ ࣻन߉਷ ё୓ח ೧׼ೞח ݫࣗ٘ܳ ࣻ೯ೞৈ ਽׹ ߈ജ
  10. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) -

    ୶࢚ച(abstraction) ‣ ࢚ࣁೠ ղਊਸ ऀӝҊ ೨ब੸ੋ ࠗ࠙(ౠ૚)ਸ ъઑೞৈ ݽ؛ച - ஭ङച(encapsulation) ‣ ੿ࠁ ਷ץਸ ా೧ ё୓ р Ѿ೤بܳ хࣗदெ ਬ૑ࠁࣻ ਊ੉, ੤ࢎਊࢿ ૐ؀ - ࢚ࣘࢿ(inheritance) ‣ ೞਤ ఋੑীࢲ ࢚ਤ ఋੑ੄ ӝמਸ ࢎਊೞৈ ഛ੢ೡ ࣻ ੓ب۾ ೲਊ - ׮ഋࢿ(polymorphism) ‣ ೞਤ ఋੑীࢲ ࢚ਤ ఋੑ੉ ઁҕೞח ߑߨਸ ా೧ Ҋਬೠ ز੘ਸ ࣻ೯ оמ
  11. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) -

    ୶࢚ച(abstraction) ‣ ё୓ р ҕాػ ࣘࢿ੉ա ೯ਤܳ ୶୹ೞৈ ޘח Ѫ ‣ ઺ਃೞ૑ ঋѢա ઱ ҙब ؀࢚੉ ইצ ੗ࣁೠ ࠗ࠙਷ х୶ח Ѫ ‣ झಖҗ ҳഅਸ ܻ࠙ೞӝ ਤೠ ݾ੸ਵ۽ ࢎਊ
  12. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) -

    ஭ङച(encapsulation) ‣ ࢲ۽ ҙ۲ ੓ח ؘ੉ఠ৬ ੉ܳ ઑ੘ೡ ࣻ ੓ח ݫࣗ٘ܳ ೠ ޘ਺ਵ۽ ୊ܻ ‣ ੽Ӕ૑੿੗ܳ ాೠ ੿ࠁ ਷ץਵ۽ ղࠗ ؘ੉ఠܳ ৻ࠗ ੽Ӕਵ۽ࠗఠ ࠁഐ ‣ ё୓ р ࢚ഐ੘ਊਸ ݫद૑݅ਵ۽ оמೞѱ ೣ
  13. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) -

    ࢚ࣘࢿ(inheritance) ‣ Is-A ҙ҅۽ࢲ ӝઓ ௿ېझ۽ࠗఠ੄ ഛ੢ਸ ਊ੉ೞѱ ೣ ‣ ӝઓ ௿ېझܳ ੤ࢎਊೡ ࣻ ੓Ҋ, ઺ࠂغח ࠗ࠙ਸ ઁѢೡ ࣻ ੓਺
  14. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) -

    ׮ഋࢿ(polymorphism) ‣ زੌೠ ੉ܴ੄ ݫࣗ٘о ௿ېझী ٮۄ ׮ܰѱ ੿੄ؼ ࣻ ੓਺ ‣ Overloading
 زੌೠ ੉ܴ੄ ݫࣗ٘о ೞਤ ఋੑীࢲ ׮ܲ ࢎনਵ۽ ੿੄ؼ ࣻ ੓਺ ‣ Overriding
 زੌೠ ݫࣗ٘о ೞਤ ఋੑীࢲ ׮ܲ ز੘ਸ ೞب۾ ੤੿੄ೡ ࣻ ੓਺
  15. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ࠙ࢳ(Object Oriented Analysis, OOA) •

    ё୓૑ೱ ࢸ҅(Object Oriented Design, OOD) • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP)
  16. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ࠙ࢳ(Object Oriented Analysis, OOA) •

    ё୓૑ೱ ࢸ҅(Object Oriented Design, OOD) • ё୓૑ೱ ೐۽Ӓې߁(Object Oriented Programming, OOP) What How
  17. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ ё୓૑ೱ ࠙ࢳҗ ࢸ҅(Object Oriented Analysis/Design, OOA/D) “ё୓(object)੄

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

    ࢎਊ੗੄ ਃҳࢎ೦ਸ ࠙ࢳೞৈ ਃҳػ ޙઁ৬ ҙ۲ػ ݽٚ ௿ېझ(ё୓), ҙ۲ ࣘࢿ ߂ ো࢑, ё୓ р੄ ҙ҅١ਸ ੿੄ೞৈ ݽ؛݂ೞח Ѫ - ޙઁ ৔৉ীࢲ ё୓ա ѐ֛ٜਸ ଺ইࢲ ӝࣿೞחؘ ઺੼ਸ ك׮. (ѐ֛ ੿੄)
  19. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ё୓૑ೱ ࢸ҅(Object Oriented Design, OOD) -

    ё୓੄ ѐ֛ਸ ష؀۽ ੿੄ ߂ ҳ୓ചೠ׮. (଼੐ ೡ׼) - п ё୓ٜ р ࢲ۽ যڌѱ ҙ҅ܳ ݛѱ ೡ Ѫੋоܳ Ѿ੿ೠ׮. (message)
  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() {} }
  21. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ <ࢎਊࢎ۹ ੿੄> UseCase ׮੉যӒ ۔ਸ ా೧ दझమਸ

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

    Booch੄ OOD, Jacobson੄ OOSE ١ ׮নೠ ё୓૑ೱ ࠙ࢳ ߑߨۿ੉ ઓ੤೮Ҋ, ੉ܳ ా೤ೞӝ ਤ೧ UML ١੢ - ё୓૑ೱ ࠙ࢳ ߂ ࢸ҅ܳ ਤೠ ಴ળചػ ё୓૑ೱ ݽ؛݂ ঱য - ୨ 14о૑੄ ׮੉যӒ۔ ઙܨ ઓ੤ (ҳઑ ׮੉যӒ۔ 7ѐ, ೯ز ׮੉যӒ۔ 7ѐ)
  23. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ઱ࢎਤ ѱ੐ ৘ઁ - ف ࢎۈ੄

    ҃ӝ੗ח 2ѐ੄ ઱ࢎਤܳ ҷ۰ ف ࣻܳ ঳ب۾ ਃ୒ೠ׮. - दझమ਷ ف ࢎۈ੄ Ѿҗܳ ࠺Үೞৈ, ׮਺੄ ӏ஗ਵ۽ थಁܳ Ѿ੿ೞৈ ୹۱ೠ׮. ‣ ف ࣻо эਵݴ, ֫਷ ं੗ੌ ҃਋ थܻ ‣ ف ࣻ੄ ೤੉ ؊ ௾ ҃਋ थܻ
  24. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ઱ࢎਤ ѱ੐ ৘ઁ - 1. ࢎਊ

    ࢎ۹ ੿੄ ઱ࢎਤܳ ؍૓׮ ੤ب੹ೠ׮ ҃ӝ੗
  25. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ઱ࢎਤ ѱ੐ ৘ઁ - 2. بݫੋ

    ݽ؛ ੿੄ Player Die - name - faceValue Game 2 2 Rolls Plays 2 1 Includes 2 1
  26. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ઱ࢎਤ ѱ੐ ৘ઁ - 3. ࢚ഐ੘ਊ

    ׮੉যӒ۔ ੿੄ : Game d1: Die d2: Die ҃ӝ੗ play() roll() getFaceValue() roll() getFaceValue()
  27. ё୓૑ೱ ࣗ೐౟ਝয ѐߊ • ઱ࢎਤ ѱ੐ ৘ઁ - 4. ࢸ҅

    ௿ېझ ੿੄ 2 1 Die - faceValue : int + roll() + getFaceValue(): int Game - die1: Die - die2: Die + play()
  28. ࢸ҅ • ୶࢚ച (abstraction) - ࣁࠗ੸ੋ ҳഅ਷ х୶Ҋ, ੄بܳ աఋղח

    ӝמਸ ֢୹ೠ׮. - ೨ब/ҕా੸ੋ ࠗ࠙ਸ ࢚ਤ ఋੑ(௿ېझ/ੋఠಕ੉झ)ਵ۽ ݽਵח Ѫ - ࢚ਤ ఋੑਸ ా೧ ੄ب(ӝמ)ܳ աఋյ ࣻ ੓Ҋ, ੉ܳ ৻ࠗ ݽٕীࢲ ࢎਊ оמ
  29. ࢸ҅ • ֫਷ ਽૘ب, ծ਷ Ѿ೤ب (high cohension, low coupling)

    - ਽૘ب: ೞա੄ ݽٕ(௿ېझ)੉ ੗न੄ ӝמ(଼੐)ਸ ৡ੹ೞѱ ׸׼ೞח ੿ب - Ѿ೤ب: ৈ۞ ݽٕ(௿ېझ) рী ଵઑೞҊ ੓ח ҙ҅(੄ઓࢿ)о ъೠ ੿ب - ਽૘بо ֫ইঠ ੤ࢎਊࢿ੉ ֫ই૑Ҋ, Ѿ೤بо ծইঠ ਬ૑ࠁࣻо ਊ੉೧૗.
  30. ࢸ҅ • ইఃఫ୛(architecture) ࢸ҅ - Multitier ইఃఫ୛ (N-tier ইఃఫ୛, Multilayered

    ইఃఫ୛) - MVC (Model-View-Controller) ٣੗ੋ ಁఢ - بݫੋ ઱ب ѐߊ (Domain Driven Development) - Representational state transfer (REST)
  31. ࢸ҅ • ؘ੉ఠ߬੉झ(database) ࢸ҅ - ҙ҅ഋ DBMS (Relational Database Management

    System) - ERD (Entity-Relationship Diagram) - ؘ੉ఠ߬੉झ ੿ӏച (Database Normalization) - ؘ੉ఠ߬੉झ ࠙ೡ (Database Partitioning)
  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