Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
웹 어플리케이션 설계와 구현 II - 소프트웨어 설계에 관하여
Search
Manjong Han
July 31, 2018
Programming
1
250
웹 어플리케이션 설계와 구현 II - 소프트웨어 설계에 관하여
Manjong Han
July 31, 2018
Tweet
Share
More Decks by Manjong Han
See All by Manjong Han
Git을 이용한 더 나은 버전관리
ibluemind
2
1.2k
웹 어플리케이션 설계와 구현 III - 소프트웨어 구현에 관하여
ibluemind
1
150
웹 어플리케이션 설계와 구현 I - 요구사항 분석에 관하여
ibluemind
1
330
Xamarin으로 모바일 앱 개발 빠르게 시작하기
ibluemind
1
260
AWS 클라우드 입문하기
ibluemind
2
430
Other Decks in Programming
See All in Programming
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
390
チームをチームにするEM
hitode909
0
340
Go コードベースの構成と AI コンテキスト定義
andpad
0
130
SwiftUIで本格音ゲー実装してみた
hypebeans
0
410
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
140
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.7k
Developing static sites with Ruby
okuramasafumi
0
300
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
730
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
0
280
tparseでgo testの出力を見やすくする
utgwkk
2
230
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.9k
React Native New Architecture 移行実践報告
taminif
1
160
Featured
See All Featured
Writing Fast Ruby
sferik
630
62k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Scaling GitHub
holman
464
140k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Visualization
eitanlees
150
16k
A Modern Web Designer's Workflow
chriscoyier
698
190k
A Tale of Four Properties
chriscoyier
162
23k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Transcript
ਢ যܻா࣌ ࢸ҅৬ ҳഅ II - ࣗਝয ࢸ҅ী ҙೞৈ 2018.07.31
@ೠࣁࢎߡࠁউҊ١Ү ٚۑ CTO ೠ݅ઙ
ࣗਝয ѐߊۆ? • ױ҅ ۽ࣁझ - ࣗਝয ޙઁܳ ৈ۞ ױ҅۽
ա־য ೧Ѿೞח ߑध ਃҳࢎ೦ ࠙ࢳ ࢸ҅ ҳഅ పझ ਬࠁࣻ ҅ദ
ਃҳࢎ೦ ࠙ࢳ • ёೱ ࠙ࢳ(Object Oriented Analysis, OOA) - ࢎਊ
ਃҳࢎ೦ਸ ࠙ࢳೞৈ ਃҳػ ޙઁ৬ ҙ۲ػ ݽٚ ېझ(ё), ҙ۲ ࣘࢿ ߂ ো, ё р ҙ҅١ਸ ೞৈ ݽ؛݂ೞח Ѫ - ޙઁ ীࢲ ёա ѐ֛ٜਸ ইࢲ ӝࣿೞחؘ ਸ ك.
ёೱ ࣗਝয ѐߊ • ҳઑ SW ѐߊ ߑߨۿ - ҳઑ
࠙ࢳ(Structured Analysis) - ҳઑ ࢸ҅(Structured Design) - ҳઑ ۽Ӓې߁(Structured Programming) • ёೱ SW ѐߊ ߑߨۿ - ёೱ ࠙ࢳ(Object Oriented Analysis, OOA) - ёೱ ࢸ҅(Object Oriented Design, OOD) - ёೱ ۽Ӓې߁(Object Oriented Programming, OOP)
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
ҳઑ ߑߨۿ ޙઁਸ ೧Ѿೞӝ ਤ೧ ੋр അप ࣁ҅ܳ ೧ೞח ߑधਵ۽ द झమਸ ѐߊೞ۰ח ֢۱ਵ۽ ࢤ - “ؘఠ৬ ۽ࣁझܳ ܻ࠙ೞ ঋҊ ё۽ ݽ؛݂”: “ੋр ࢎҊೞח ߑध” - അप ࣁ҅ী ઓೞח ѐ֛ਸ ӝ߈ਵ۽ ೠ ёۄח ة݀ػ ױਤ۽ दझమਸ ҳࢿೞ Ҋ, п ёח ݫदܳ ా೧ ࢚ഐਊ
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
ё(object) ‣ data + operation on data ‣ instance of class - ېझ(class) ‣ description, abstraction - ݫࣁ(message) ‣ ё р ࢚ഐ ਊ(ݫࣗ٘ ഐ) ࣻױ
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
ё(object) ‣ അप ࣁ҅ী ઓೞח ѐ֛ա ޛ۽ աఋյ ࣻ ח ױਤ ‣ ؘఠ: ېझ ࣘࢿী ӝח ё ࢚కܳ աఋղח ࠁ ‣ ؘఠী ҙೠ ઑ(ݫࣗ٘): ёо ܻೡ ࣻ ח ӝמ. ё ࢚కܳ ߸҃ <ࣘࢿ>: <ؘఠ> <ݫࣗ٘> ݫद
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
ېझ(class) ‣ ёܳ ࢤࢿೡ ࣻ ח ҳઑ, ౣ, మ݁ ‣ ёܳ “ېझ ੋझఢझ(instance)”ۄҊ ܴࠗ ‣ ېझܳ “ё ఋੑ(type)”ۄҊ ܴࠗ ‣ ࢚ਤ ఋੑਵ۽ ୶࢚ചೡ ࣻ ח ࢚
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
ݫࣁ(message) ‣ ё р ࢚ഐ ਊೡ ٸ ࢎਊغח ࣻױ ‣ ܲ ёীࢲ ౠ ёܳ ߸҃ೞӝ ਤೠ ਃ नഐ ‣ ࣻन ё ܴ, ࣻ೯ೡ ݫࣗ٘ ܴ, ੋ۽ ҳࢿ ‣ ݫदܳ ࣻन߉ ёח ೧ೞח ݫࣗ٘ܳ ࣻ೯ೞৈ ߈ജ
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
୶࢚ച(abstraction) ‣ ࢚ࣁೠ ղਊਸ ऀӝҊ ೨बੋ ࠗ࠙(ౠ)ਸ ъઑೞৈ ݽ؛ച - ङച(encapsulation) ‣ ࠁ ץਸ ా೧ ё р Ѿبܳ хࣗदெ ਬࠁࣻ ਊ, ࢎਊࢿ ૐ - ࢚ࣘࢿ(inheritance) ‣ ೞਤ ఋੑীࢲ ࢚ਤ ఋੑ ӝמਸ ࢎਊೞৈ ഛೡ ࣻ ب۾ ೲਊ - ഋࢿ(polymorphism) ‣ ೞਤ ఋੑীࢲ ࢚ਤ ఋੑ ઁҕೞח ߑߨਸ ా೧ Ҋਬೠ زਸ ࣻ೯ оמ
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
୶࢚ച(abstraction) ‣ ё р ҕాػ ࣘࢿա ೯ਤܳ ୶ೞৈ ޘח Ѫ ‣ ਃೞ ঋѢա ҙब ࢚ ইצ ࣁೠ ࠗ࠙ х୶ח Ѫ ‣ झಖҗ ҳഅਸ ܻ࠙ೞӝ ਤೠ ݾਵ۽ ࢎਊ
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
ङച(encapsulation) ‣ ࢲ۽ ҙ۲ ח ؘఠ৬ ܳ ઑೡ ࣻ ח ݫࣗ٘ܳ ೠ ޘਵ۽ ܻ ‣ Ӕܳ ాೠ ࠁ ץਵ۽ ղࠗ ؘఠܳ ৻ࠗ Ӕਵ۽ࠗఠ ࠁഐ ‣ ё р ࢚ഐਊਸ ݫद݅ਵ۽ оמೞѱ ೣ
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
࢚ࣘࢿ(inheritance) ‣ Is-A ҙ҅۽ࢲ ӝઓ ېझ۽ࠗఠ ഛਸ ਊೞѱ ೣ ‣ ӝઓ ېझܳ ࢎਊೡ ࣻ Ҋ, ࠂغח ࠗ࠙ਸ ઁѢೡ ࣻ
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
ഋࢿ(polymorphism) ‣ زੌೠ ܴ ݫࣗ٘о ېझী ٮۄ ܰѱ ؼ ࣻ ‣ Overloading زੌೠ ܴ ݫࣗ٘о ೞਤ ఋੑীࢲ ܲ ࢎনਵ۽ ؼ ࣻ ‣ Overriding زੌೠ ݫࣗ٘о ೞਤ ఋੑীࢲ ܲ زਸ ೞب۾ ೡ ࣻ
ёೱ ࣗਝয ѐߊ • ёೱ ࠙ࢳ(Object Oriented Analysis, OOA) •
ёೱ ࢸ҅(Object Oriented Design, OOD) • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP)
ёೱ ࣗਝয ѐߊ • ёೱ ࠙ࢳ(Object Oriented Analysis, OOA) •
ёೱ ࢸ҅(Object Oriented Design, OOD) • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) What How
ёೱ ࣗਝয ѐߊ ёೱ ࠙ࢳҗ ࢸ҅(Object Oriented Analysis/Design, OOA/D) “ё(object)
଼ਸ ݺഛ ೞח Ѫ” “ёܳ ೞҊ যڌѱ ࢲ۽ ҙ҅ܳ ݛѱ ೡ Ѫੋо”
ёೱ ࣗਝয ѐߊ • ёೱ ࠙ࢳ(Object Oriented Analysis, OOA) -
ࢎਊ ਃҳࢎ೦ਸ ࠙ࢳೞৈ ਃҳػ ޙઁ৬ ҙ۲ػ ݽٚ ېझ(ё), ҙ۲ ࣘࢿ ߂ ো, ё р ҙ҅١ਸ ೞৈ ݽ؛݂ೞח Ѫ - ޙઁ ীࢲ ёա ѐ֛ٜਸ ইࢲ ӝࣿೞחؘ ਸ ك. (ѐ֛ )
ёೱ ࣗਝয ѐߊ • ёೱ ࢸ҅(Object Oriented Design, OOD) -
ё ѐ֛ਸ ష۽ ߂ ҳചೠ. (଼ ೡ) - п ёٜ р ࢲ۽ যڌѱ ҙ҅ܳ ݛѱ ೡ Ѫੋоܳ Ѿೠ. (message)
ёೱ ࣗਝয ѐߊ بݫੋ ѐ֛(ஶࣆ) بݫੋ दпച(ӝ) ҳഅ Car -
name - color - vendor - owner + openWindow() + lockDoor() + start() class Car { String name; String color; Vendor vendor; Person owner; void openWindow() {} void lockDoor() {} void start() {} }
ёೱ ࣗਝয ѐߊ <ࢎਊࢎ۹ > UseCase যӒ ۔ਸ ా೧ दझమਸ
ࢎਊೞח ৬ दझ మ ӝמਸ ঈ <بݫੋ ݽ؛ > दझమ ࢎਊ ߂ दझమ ӝמ ز ೞӝ ਤ೧ ਃೠ ਃ ٜࣗਸ ё۽ അ <࢚ഐਊ যӒ ۔ > दझమ ࢎਊ о п بݫੋҗ যڃ ࢚ ഐਊਸ ా೧ࢲ ӝמ ਸ ਊೞѱ غח ঈ <ࢸ҅ ېझ > दझమ ࢎਊ о दझమ ӝמਸ ࢎਊ ೞӝ ਤ೧ ਃೠ ਃ ٜࣗ݅ ё۽ അ
ёೱ ࣗਝয ѐߊ • UML(Unified Modeling Language) - Rumbaugh OMT,
Booch OOD, Jacobson OOSE ١ নೠ ёೱ ࠙ࢳ ߑߨۿ ઓ೮Ҋ, ܳ ాೞӝ ਤ೧ UML ١ - ёೱ ࠙ࢳ ߂ ࢸ҅ܳ ਤೠ ળചػ ёೱ ݽ؛݂ য - ୨ 14о যӒ۔ ઙܨ ઓ (ҳઑ যӒ۔ 7ѐ, ೯ز যӒ۔ 7ѐ)
ёೱ ࣗਝয ѐߊ • ࢎਤ ѱ ઁ - ف ࢎۈ
҃ӝח 2ѐ ࢎਤܳ ҷ۰ ف ࣻܳ ب۾ ਃೠ. - दझమ ف ࢎۈ Ѿҗܳ ࠺Үೞৈ, ӏਵ۽ थಁܳ Ѿೞৈ ۱ೠ. ‣ ف ࣻо эਵݴ, ֫ ंੌ ҃ थܻ ‣ ف ࣻ ؊ ҃ थܻ
ёೱ ࣗਝয ѐߊ • ࢎਤ ѱ ઁ - 1. ࢎਊ
ࢎ۹ ࢎਤܳ ؍ بೠ ҃ӝ
ёೱ ࣗਝয ѐߊ • ࢎਤ ѱ ઁ - 2. بݫੋ
ݽ؛ Player Die - name - faceValue Game 2 2 Rolls Plays 2 1 Includes 2 1
ёೱ ࣗਝয ѐߊ • ࢎਤ ѱ ઁ - 3. ࢚ഐਊ
যӒ۔ : Game d1: Die d2: Die ҃ӝ play() roll() getFaceValue() roll() getFaceValue()
ёೱ ࣗਝয ѐߊ • ࢎਤ ѱ ઁ - 4. ࢸ҅
ېझ 2 1 Die - faceValue : int + roll() + getFaceValue(): int Game - die1: Die - die2: Die + play()
ࢸ҅ • ୶࢚ച (abstraction) - ࣁࠗੋ ҳഅ х୶Ҋ, بܳ աఋղח
ӝמਸ ֢ೠ. - ೨ब/ҕాੋ ࠗ࠙ਸ ࢚ਤ ఋੑ(ېझ/ੋఠಕझ)ਵ۽ ݽਵח Ѫ - ࢚ਤ ఋੑਸ ా೧ ب(ӝמ)ܳ աఋյ ࣻ Ҋ, ܳ ৻ࠗ ݽٕীࢲ ࢎਊ оמ
ࢸ҅ • ֫ ب, ծ Ѿب (high cohension, low coupling)
- ب: ೞա ݽٕ(ېझ) न ӝמ(଼)ਸ ৡೞѱ ೞח ب - Ѿب: ৈ۞ ݽٕ(ېझ) рী ଵઑೞҊ ח ҙ҅(ઓࢿ)о ъೠ ب - بо ֫ইঠ ࢎਊࢿ ֫ইҊ, Ѿبо ծইঠ ਬࠁࣻо ਊ೧.
ࢸ҅ • ইఃఫ(architecture) ࢸ҅ - Multitier ইఃఫ (N-tier ইఃఫ, Multilayered
ইఃఫ) - MVC (Model-View-Controller) ٣ੋ ಁఢ - بݫੋ ب ѐߊ (Domain Driven Development) - Representational state transfer (REST)
ࢸ҅ • ؘఠ߬झ(database) ࢸ҅ - ҙ҅ഋ DBMS (Relational Database Management
System) - ERD (Entity-Relationship Diagram) - ؘఠ߬झ ӏച (Database Normalization) - ؘఠ߬झ ࠙ೡ (Database Partitioning)
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