- Software Engineering (10780)
- ํ๋ฒ: 2021024057
- ์ด๋ฆ: ๊น๋ณ์ค
1. ๊ณผ์ ๋ถ์ ๋ฐ ์ฌ์ฉ Design Pattern
Homework #1-2์ ์ฃผ์ํ ๋ชฉํ๋ ์ํํธ์จ์ด์ ์ ์ฐ์ฑ, ํ์ฅ์ฑ, ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ์ธ ๊ฐ์ง design pattern์ ์ ์ฉํ๋ ๊ฒ์ ๋๋ค.
| # | ์๊ตฌ์ฌํญ | Design Pattern | Design Principle |
|---|---|---|---|
| P1 | java.io.Writer/Reader์ ์ํธํ/๋ณตํธํ ๊ธฐ๋ฅ ์ถ๊ฐ | Decorator Pattern | OCP |
| P2 | ๋ค์ํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ์ง์ ๊ธฐ๋ฅ ์ถ๊ฐ | Strategy Pattern | SRP |
| P3 | Directory ๊ตฌ์กฐ์์ keyword ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ | Visitor Pattern | OCP and DIP |
2. Design Pattern Implementation and Argument
2.1. P1: Decorator Pattern ๊ธฐ๋ฐ EncryptWriter ๋ฐ DecryptReader ๊ตฌํ
Decorator UML class diagram[1]
- Decorator Pattern์ ๊ฐ์ฒด์ ๊ธฐ๋ฅ์ ์๋ก์ด responsibility๋ฅผ ๋์ ์ผ๋ก ์ถ๊ฐํ๋ ๊ตฌ์กฐ์ ์ธ ํจํด์ ๋๋ค.
- Subclassing ๋์ ๊ฐ์ฒด ๊ตฌ์ฑ์ ํตํด ๊ธฐ๋ฅ์ ํ์ฅํ๋ ๋์์ ์ ๊ณตํฉ๋๋ค.
- ์ ์ฉ: ๊ธฐ์กด์ I/O ์คํธ๋ฆผ class(Writer, Reader)๋ฅผ ์์ ํ์ง ์๊ณ , ๊ทธ ์์
EncryptWriter์DecryptReader๋ผ๋ Decorator๋ฅผ ์์ ์ํธํ/๋ณตํธํ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค. - Design Pattern
EncryptWriter๋ ๋ด๋ถ์ ์ผ๋ก ๋ค๋ฅธ Writer ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉฐ,write()๊ฐ ํธ์ถ๋ ๋ Caesar cipher (3์นธ ์ผ์ชฝ rotation)๋ฅผ ์ ์ฉํ ํ, wrapping๋ ๊ฐ์ฒด์write()๋ฅผ ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ฒ ๋ฉ๋๋ค.DecryptReader๋ wrapping๋ Reader ๊ฐ์ฒด์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์จ ํ, ์ญ๋ณํ์ ์ํํ์ฌ ๋ณตํธํ๋ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ด ๊ตฌํ์ OCP (Open-Closed Principle)๋ฅผ ๋ง์กฑ์ํค๊ฒ ๋ฉ๋๋ค. ๊ธฐ์กด์
java.io์คํธ๋ฆผ class๋ ์์ ์ ๋ํด closed๋๋ฉด์๋, Decorator๋ผ๋ ์๋ก์ด wrapping class๋ฅผ ํตํด ์ํธํ๋ผ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ํ์ฅ์ ๋ํด open๋์์ต๋๋ค.
2.2. P2: Strategy Pattern์ ํ์ฉํ ์๊ณ ๋ฆฌ์ฆ ํ์ฅ
Strategy Pattern UML diagram[2]
- Strategy Pattern์ ์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ์ ์ํ๊ณ , ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ encapsulizationํ ํ, ์ด๋ค์ ์ํธ ๊ตํ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ behavior pattern์ ๋๋ค.
- Strategy Design Pattern์ ์ ์ฐํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ฒด ์งํฅ ์ํํธ์จ์ด๋ฅผ ์ค๊ณํ๊ธฐ ์ํด ๋ฐ๋ณต๋๋ ๋์์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
- "๊ฐ์ฒด๋ ๊ตฌํ, ๋ณ๊ฒฝ, ํ ์คํธ, ์ฌ์ฌ์ฉ์ด ์ฌ์์ผ ํ๋ค"์ ๋ด์ฉ์ ํฌํจํ 23๊ฐ์ง GoF(Gang of Four) ๋์์ธ ํจํด๋ค ์ค ํ๋์ ๋๋ค.
- P1์์ ๊ตฌํ๋
EncryptWriter์DecryptReader๊ฐ ๊ณ ์ ๋ Ceaser ์ํธ ์๊ณ ๋ฆฌ์ฆ ๋์ ์คํ ์์ ์ (์ํ๋) ์ํธํ ๋ฐฉ์์ ์ ํํ ์ ์๋๋ก ์ ์ฐ์ฑ์ ๊ฐํํ์์ต๋๋ค. - Design Pattern
- Strategy:
EncryptionStrategy์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ , ๋ชจ๋ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ด ์ด๋ฅผ ๊ตฌํํ๋๋ก ๊ฐ์ ํ๊ณ ์์ต๋๋ค. - Concrete Strategy:
CaesarCipherStrategy์CaseSwapStrategy๊ฐ ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค. - Context:
EncryptWriter์DecryptReader๋EncryptionStrategy๊ฐ์ฒด๋ฅผ ํ๋๋ก ์ ์งํ๋ฉฐ, ์ค์ ์ํธํ/๋ณตํธํ logic์ ์ด ๊ฐ์ฒด์ ์์ํฉ๋๋ค.
- Strategy:
- ๊ด๋ จ๋ design principles
- SRP:
EncryptWriter๋ ๋ ์ด์ "๋ฐ์ดํฐ ์ฐ๊ธฐ" ์ฑ ์๊ณผ "์ํธํ ์๊ณ ๋ฆฌ์ฆ" ์ฑ ์์ ๋์์ ๊ฐ์ง์ง ์๊ฒ ๋ฉ๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ๋ก์ง์Strategyclass๋ก ๋ถ๋ฆฌ๋์ด SRP๋ฅผ ๋ง์กฑํฉ๋๋ค. - OCP: ์๋ก์ด ์ํธํ ๋ฐฉ์์ด ์ถ๊ฐ๋์ด๋ (like
SHAorAES), Strategy ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์๋ก์ด class๋ง ์ถ๊ฐํ๋ฉด ๋๊ณ , ํต์ฌ class์ธEncryptWriter์ ์ฝ๋๋ฅผ ์์ ํ ํ์๊ฐ ์์ ๊ฒ์ ๋๋ค.
- SRP:
2.3. P3: Visitor Pattern ๊ธฐ๋ฐ FindVisitor ๊ตฌํ
Visitor Pattern UML diagram[3]
- Visitor Pattern์ ๊ฐ์ฒด ๊ตฌ์กฐ(Directory ๊ตฌ์กฐ)๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ๊ตฌ์กฐ์ Element๋ค์ ๋ํด ์ํํ ์๋ก์ด ์ฐ์ฐ(Operation)์ ์ ์ํ ์ ์๋๋ก ํ๋ behavior pattern์ ๋๋ค.
- ์ ์ฉ: ํ์ผ ์์คํ ์ Element (File ๋ฐ Directory) class์ keyword ๊ฒ์์ด๋ผ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค.
- Design Pattern
- Element: Entry (File ๋ฐ Directory ์ ์์ ์ถ์ class)๋
accept(Visitor v)method๋ฅผ ์ ์ํ์ฌ ๋ฐฉ๋ฌธ์๋ฅผ ๋ฐ์๋ค์ ๋๋ค. - Visitor:
Visitorinterface๋visit(File)๊ณผvisit(Directory)์ ๊ฐ์ด ๊ฐ Element ์ ํ๋ณ ์ฐ์ฐ์ ์ ์ํฉ๋๋ค. - Concrete Visitor:
FindVisitor๋ ์ด Visitor๋ฅผ ๊ตฌํํ์ฌ visit method ๋ด์์ ์ด๋ฆ์ keyword๊ฐ ํฌํจ๋์ด ์๋์ง ๊ฒ์ฌํ๋ ๊ฒ์ logic์ ์ํํฉ๋๋ค. Directory๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ ์ฌ๊ท์ ์ผ๋ก ์์ Entry์ ๋ํดaccept()๋ฅผ ํธ์ถํ์ฌ ๊ตฌ์กฐ ์ ์ฒด๋ฅผ ํ์ํฉ๋๋ค.
- Element: Entry (File ๋ฐ Directory ์ ์์ ์ถ์ class)๋
- ๊ด๋ จ๋ design principles
- OCP: ํ์ผ๊ณผ Directory๋ฅผ ๋ํ๋ด๋ Element class์ ๋ณ๋์ ์์ ์์ด
FindVisitor๋ผ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.- e.g., ์ถํ์ '์ฉ๋ ๊ณ์ฐ'์ด๋ผ๋ ๊ธฐ๋ฅ์ด ํ์ํ๊ฒ ๋์ด๋
SizeVisitor๋ง ์ถ๊ฐํ๋ฉด ๋ ๊ฒ์ ๋๋ค.
- e.g., ์ถํ์ '์ฉ๋ ๊ณ์ฐ'์ด๋ผ๋ ๊ธฐ๋ฅ์ด ํ์ํ๊ฒ ๋์ด๋
- DIP: Element class๋ detailํ
FindVisitorclass๊ฐ ์๋ Visitor๋ผ๋ ์ถ์ํ๋ ์ธํฐํ์ด์ค์ ์์กดํฉ๋๋ค.- ์ด๋ ์์ ๋ชจ๋์ด ํ์ ๋ชจ๋์ detailํ ๊ตฌํ์ ์์กดํ๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ์์กด์ฑ์ inversion์ํต๋๋ค.
- OCP: ํ์ผ๊ณผ Directory๋ฅผ ๋ํ๋ด๋ Element class์ ๋ณ๋์ ์์ ์์ด
3. Conclusion
- Homework #1-2์์๋ Design Pattern์ ์ ์ ํ ์ฌ์ฉ์ ํตํด ์ํํธ์จ์ด ํ์ง์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.
- ๊ฐ ํจํด๋ค์ด ์ ๊ณตํ ์ฅ์ ๋ค
- Decorator Pattern & Strategy Pattern
- Loose Coupling: I/O ์ฒ๋ฆฌ์ ์ํธํ ๋ก์ง์ ๋ถ๋ฆฌํ์๊ณ , ์ํธํ ๋ก์ง๊ณผ ์๊ณ ๋ฆฌ์ฆ์ ๋ถ๋ฆฌํ์ฌ ๊ฒฐํฉ๋๋ฅผ ์ต์ํํ์ต๋๋ค.
- Visitor Pattern
- High Cohesion: ํ์ผ ์์คํ ์ํ ๋ก์ง๊ณผ keyword ๊ฒ์ ๋ก์ง์ ๋ถ๋ฆฌํ์ฌ ๊ฐ class์ ์์ง๋๋ฅผ ๋์์ต๋๋ค.
- OCP/SRP/DIP ์ค์
- ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ ์ ๊ธฐ์กด ์ฝ๋์ ์์ ์์ด ์๋ก์ด ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋ design์ ํ๋ฆฝํ์ต๋๋ค.
- Decorator Pattern & Strategy Pattern
- ๊ฐ ํจํด๋ค์ ์ํธ๋ณด์์ ์ผ๋ก ์์ฉํ์ฌ
- ๋ชจ๋ํ๋
- ์ ์ฐํ
- ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ๊ธฐ์ฌํ ์ ์์์ต๋๋ค.
- ์ด๋ฌํ ์ด์ ๋ก, ๊ตฌํํ ์ฝ๋๋ค์ design goal๋ฅผ ๋ฌ์ฑํ์์ผ๋ฉฐ, design principle๋ค์ ์ค์ํ ๊ฐ์ฒด ์งํฅ solution์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
4. Works Cited
[1] Wikipedia, "Decorator pattern" https://en.wikipedia.org/wiki/Decorator_pattern
[2] Wikipedia, "Strategy pattern" https://en.wikipedia.org/wiki/Strategy_pattern
[3] Wikipedia, "Visitor pattern" https://en.wikipedia.org/wiki/Visitor_pattern




