Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
웹 어플리케이션 설계와 구현 III - 소프트웨어 구현에 관하여
Search
Manjong Han
August 01, 2018
Programming
1
130
웹 어플리케이션 설계와 구현 III - 소프트웨어 구현에 관하여
Manjong Han
August 01, 2018
Tweet
Share
More Decks by Manjong Han
See All by Manjong Han
Git을 이용한 더 나은 버전관리
ibluemind
2
1.1k
웹 어플리케이션 설계와 구현 II - 소프트웨어 설계에 관하여
ibluemind
1
230
웹 어플리케이션 설계와 구현 I - 요구사항 분석에 관하여
ibluemind
1
310
Xamarin으로 모바일 앱 개발 빠르게 시작하기
ibluemind
1
240
AWS 클라우드 입문하기
ibluemind
2
420
Other Decks in Programming
See All in Programming
Immutable ActiveRecord
megane42
0
120
ErdMap: Thinking about a map for Rails applications
makicamel
1
1.1k
Kanzawa.rbのLT大会を支える技術の裏側を変更する Ruby on Rails + Litestream 編
muryoimpl
0
120
Alba: Why, How and What's So Interesting
okuramasafumi
0
240
振り返れば奴(Cline)がいる
keiyagi
0
130
社内フレームワークとその依存性解決 / in-house framework and its dependency management
vvakame
1
500
Pythonでもちょっとリッチな見た目のアプリを設計してみる
ueponx
0
220
ファインディの テックブログ爆誕までの軌跡
starfish719
1
780
オニオンアーキテクチャを使って、 Unityと.NETでコードを共有する
soi013
0
390
rails newと同時に型を書く
aki19035vc
6
750
ISUCON14感想戦で85万点まで頑張ってみた
ponyo877
1
790
SRE、開発、QAが協業して挑んだリリースプロセス改革@SRE Kaigi 2025
nealle
1
3.3k
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.2k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Git: the NoSQL Database
bkeepers
PRO
427
64k
RailsConf 2023
tenderlove
29
980
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
520
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Gamification - CAS2011
davidbonilla
80
5.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
We Have a Design System, Now What?
morganepeng
51
7.4k
Code Review Best Practice
trishagee
65
17k
What's in a price? How to price your products and services
michaelherold
244
12k
Transcript
ਢ যܻா࣌ ࢸ҅৬ ҳഅ III - ࣗਝয ҳഅী ҙೞৈ 2018.08.01
@ೠࣁࢎߡࠁউҊ١Ү ٚۑ CTO ೠ݅ઙ
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
ҳઑ ߑߨۿ ޙઁਸ ೧Ѿೞӝ ਤ೧ ੋр അप ࣁ҅ܳ ೧ೞח ߑधਵ۽ द झమਸ ѐߊೞ۰ח ֢۱ਵ۽ ࢤ - “ؘఠ৬ ۽ࣁझܳ ܻ࠙ೞ ঋҊ ё۽ ݽ؛݂”: “ੋр ࢎҊೞח ߑध” - അप ࣁ҅ী ઓೞח ѐ֛ਸ ӝ߈ਵ۽ ೠ ёۄח ة݀ػ ױਤ۽ दझమਸ ҳࢿೞ Ҋ, п ёח ݫदܳ ా೧ ࢚ഐਊ
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
ё(object) ‣ data + operation on data ‣ instance of class - ېझ(class) ‣ description, abstraction - ݫࣁ(message) ‣ ё р ࢚ഐ ਊ(ݫࣗ٘ ഐ) ࣻױ
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁(Object Oriented Programming, OOP) -
୶࢚ച(abstraction) ‣ ࢚ࣁೠ ղਊਸ ऀӝҊ ೨बੋ ࠗ࠙(ౠ)ਸ ъઑೞৈ ݽ؛ച - ङച(encapsulation) ‣ ࠁ ץਸ ా೧ ё р Ѿبܳ хࣗदெ ਬࠁࣻ ਊ, ࢎਊࢿ ૐ - ࢚ࣘࢿ(inheritance) ‣ ೞਤ ఋੑীࢲ ࢚ਤ ఋੑ ӝמਸ ࢎਊೞৈ ഛೡ ࣻ ب۾ ೲਊ - ഋࢿ(polymorphism) ‣ ೞਤ ఋੑীࢲ ࢚ਤ ఋੑ ઁҕೞח ߑߨਸ ా೧ Ҋਬೠ زਸ ࣻ೯ оמ
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - Single
Responsibility Principle (SRP) ױੌ ଼ ਗ - Open-Closed Principle (OCP) ѐߑ ತࣧ ਗ - Liskov Substitution Principle (LSP) ܻझ ജ ਗ - Interface Segregation Principle (ISP) ੋఠಕझ ܻ࠙ ਗ - Dependency Inversion Principle (DIP) ઓ ਗ
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ױੌ
଼ ਗ (SRP) ‣ “ېझח ױ ೠ ѐ ଼ਸ оઉঠ ೠ.” ‣ “ېझܳ ߸҃ೞח ਬח ױ ೠ ѐৈঠ ೠ.”
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ױੌ
଼ ਗ (SRP) ‣ ೠ ېझী ࢲ۽ ܲ ਬ۽ ߸҃غח ଼ٜ ҕઓೞҊ ݶ SRPܳ ਤ߈ೞҊ ח ૐѢ ‣ ೧ ېझ п ݫٜࣗ٘ ־ҳী ೧ प೯غח ഛੋ റ ܻ࠙ ‣ ېझ ഐٜ ࢲ۽ ܲ ݫٜࣗ٘ਸ ࢎਊೠݶ, Ӓ ݫٜࣗ٘ пӝ ܲ ଼ী ࣘೡ оמࢿ ֫. ী ٮۄ ঌݏѱ ېझܳ ܻ࠙ೞب۾ ೠ.
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ѐߑ
ತࣧ ਗ (OCP) ‣ “ഛীח ৌ۰ যঠ ೞҊ, ߸҃ীח ײഃ যঠ ೠ.” ‣ “ӝמਸ ߸҃ೞѢա ഛೡ ࣻ ਵݶࢲ, Ӓ ӝמਸ ࢎਊೞח ٘ח ࣻغ ঋইঠ ೠ.” ‣ ӝמਸ ഛೞݶࢲب ӝמਸ ࢎਊೞח ӝઓ٘ח ߸҃غ ঋইঠ ೠ.
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ѐߑ
ತࣧ ਗ (OCP) ‣ ഛغח ࠗ࠙(, ߸ചೞח ࠗ࠙)ਸ ୶࢚ച೧ࢲ ೧Ѿ оמೞ. 1. ੋఠಕझܳ ਊೠ ୶࢚ച ߑߨ 2. ࢚ࣘਸ ਊೠ ࢚ਤ ېझ۽ ୶࢚ച ߑߨ
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ѐߑ
ತࣧ ਗ (OCP) ‣ ইې ҃ ࠗ࠙ OCPܳ ਤ߈ೞҊ ח ૐѢ. 1. நझਸ ೠ. (instanceof ࢎਊ) 2. ࠺तೠ if-else ࠶۾ ৈۤ ઓೠ.
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ѐߑ
ತࣧ ਗ (OCP) ‣ ߸ച৬ ҙ۲ػ ҳഅ(߸ചо ࢚غח ࠗ࠙)ਸ ୶࢚ചೞח Ѫ ೨ब ‣ OCPܳ ా೧ࢲ ߸҃ ਬোೣਸ ઁҕೡ ࣻ
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ܻझ
ജ ਗ (LSP) ‣ “࢚ਤ ఋੑ ёܳ ೞਤ ఋੑ ё۽ ജ೧ب ࢚ਤ ఋੑਸ ࢎਊೞח ۽Ӓ ۔ ࢚ਵ۽ ز೧ঠ ೠ.”
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ܻझ
ജ ਗ (LSP) ‣ OCPח ୶࢚ച(ੋఠಕझ ҳഅ)৬ ഋࢿ(࢚ࣘ)ਸ ా೧ ೧Ѿ ‣ LSPח OCPܳ ߉ח ഋࢿী ҙೠ ਗਸ ઁҕ
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ܻझ
ജ ਗ (LSP) ‣ ইې ҃ ࠗ࠙ LSPܳ ਤ߈ೞҊ ח ૐѢ. 1. ݺदػ ݺࣁীࢲ ߩযդ чਸ ܻఢೠ. 2. ݺदػ ݺࣁীࢲ ߩযդ ৻ܳ ߊࢤೠ. 3. ݺदػ ݺࣁীࢲ ߩযդ ӝמਸ ࣻ೯ೠ.
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ੋఠಕझ
ܻ࠙ ਗ (ISP) ‣ “ੋఠಕझח Ӓ ੋఠಕझܳ ࢎਊೞח ۄܳ ӝળਵ۽ ܻ࠙غযঠ ೠ .” ‣ “ۄח न ࢎਊೞח ݫࣗ٘ী݅ ઓ೧ঠ ೠ.”
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ੋఠಕझ
ܻ࠙ ਗ (ISP) ‣ ࢎਊೞ ঋח ੋఠಕझ ߸҃ী ೧ࢲ ߊࢤೞח ࠛਃೠ ೱ(ࣗझ ஹ ੌ ١)ਸ ݶ ISPܳ ਤ߈ೞҊ ח ૐѢ ‣ ۄ ੑীࢲ ࢎਊೞח ӝמ݅ ઁҕೞب۾ ੋఠಕझܳ ܻ࠙ ‣ ೞա ӝמী ೠ ߸҃ ৈܳ ୭ࣗച೧ળ.
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ઓ
ਗ (DIP) ‣ “Ҋࣻળ ݽٕ ࣻળ ݽٕ ҳഅী ઓ೧ࢲח উػ.” ‣ “ࣻળ ݽٕ Ҋࣻળ ݽٕীࢲ ೠ ୶࢚ ఋੑী ઓ೧ঠ ೠ.”
ёೱ ࣗਝয ѐߊ • ۽ߡ ݃౯ SOLID ਗ - ઓ
ਗ (DIP) ‣ ࣻળ ݽٕ ߸҃غ؊ۄب Ҋࣻળ ݽٕ ߸҃غ ঋইঠ ೠ.
ёೱ ࣗਝয ѐߊ • ёೱ ۽Ӓې߁ : ݽٕࢿ(modularity), ਬোࢿ(flexibility), ഛࢿ
(extensibility), ਬҙܻࢿ(maintainability) • “ಁఢ(pattern)”ਸ ా೧ ёೱ ۽Ӓې߁ ਸ पഅ - ٘ ױਤ(code level): ீ߭ ~ҳഅ ಁఢ, ۽ߡ ݃౯ ~Clean Code - ېझ ױਤ(class level): GoF ~٣ੋ ಁఢ, ݃౯ ۞ ~ܻಂష݂ - ಁః, ݽٕ ױਤ(package level): ীܼ ী߈झ ~Domain Driven Development, ݃౯ ۞ ~PoEAA
ёೱ ࣗਝয ѐߊ • GoF ٣ੋ ಁఢ - ࣗਝয ҳഅীࢲ
ߊࢤೞח ޙઁী ೠ ೧Ѿ ߑߨਸ ܻ - ёೱ য(C++, झށష)ܳ ӝ߈ਵ۽ ಁఢചػ ߑߨ - ࢤࢿ ಁఢ(Creational Pattern), ҳઑ ಁఢ(Structural Pattern), ೯ز ಁఢ (Behavioral Pattern)
ёೱ ࣗਝয ѐߊ • ীܼ ী߈झ Domain Driven Development -
Ҋё, ࠺ૉפझ, ਃҳࢎ೦ بݫੋਸ ੜѱ ݽ؛݂ೞҊ ҳഅೞӝ ए, ೧ೞӝ ए ҳઑ۽ ࣗਝযܳ ࢸ҅ೞӝ ਤೠ ߑߨ - بݫੋীࢲ ൔ ࢎਊغח ਊযܳ ӝ߈ਵ۽ ೠ Ubiquitous Language ࢎਊ - ೞਤ بݫੋ ೡ/ҙबࢎܳ बਵ۽, ઑਸ ӝળਵ۽ Bounded Context - بݫੋ ݽ؛ Entity, Value Object, Service, Aggregate ١ ਃࣗ۽ അ
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