• Mindscape ๐Ÿ”ฅ
    • Playlist ๐ŸŽง
  • Algorithm

    • 1018๋ฒˆ: ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ
    • 1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ
    • Python ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ํŒ
    • C++ std::vector ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ
    • Vim ์‚ฌ์šฉ ๋งค๋‰ด์–ผ
  • Ubuntu

    • ๋ฆฌ๋ˆ…์Šค ์šฐ๋ถ„ํˆฌ GRUB ํฐํŠธ ๋ณ€๊ฒฝ
    • ์šฐ๋ถ„ํˆฌ ์ด๋ฏธ์ง€ ๋น„๋””์˜ค ์ธ๋„ค์ผ(๋ฏธ๋ฆฌ๋ณด๊ธฐ) ์•ˆ ๋ณด์ž„ ๋ฌธ์ œ ํ•ด๊ฒฐ
    • Wine ํ™˜๊ฒฝ์—์„œ ์นด์นด์˜คํ†ก ์‹คํ–‰ ์‹œ explorer.exe ๋œจ์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฒ•
    • ์šฐ๋ถ„ํˆฌ Wine ์นด์นด์˜คํ†ก ์‚ฌ์ง„ ์ด๋ฏธ์ง€ ์Šคํฌ๋ฆฐ์ƒท ๋ถ™์—ฌ๋„ฃ๊ธฐ
    • Wine ์นด์นด์˜คํ†ก ์ด๋ชจ์ง€ ๊นจ์ง ๋ฌธ์ œ ํ•ด๊ฒฐ
    • Ubuntu ์œˆ๋„์šฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋„๊ธฐ
  • Wellness

    • ์ฐจ์ „์žํ”ผ (Psyllium Husk)
    • ์—‘์ŠคํŠธ๋ผ ๋ฒ„์ง„ ์˜ฌ๋ฆฌ๋ธŒ์œ  (Extra Virgin Olive Oil)
    • ์ž๊ฐ€๋น„๊ฐ•์„ธ์ฒ™ (Nasal Irrigation)
    • QCY HT08 (MeloBuds Pro Plus)
    • ์ฝ˜์„œํƒ€ (Concerta)
    • ์ธ๋ฐ๋†€ (Inderal)
    • ์„คํŠธ๋ž„๋ฆฐ (Sertraline)
    • ๋ฉœ๋ผํ† ๋‹Œ (Melatonin)
    • ์น˜๊ฒฝ๋ถ€ ๋งˆ๋ชจ์ฆ
    • ๋ฐ”๋ฒจ ์Šค์ฟผํŠธ (Barbell Squat)
  • Humanities

    • Nordvik, Russia
    • North Sentinel Island
    • ๋กฑ๊ณ ๋กฑ๊ณ (Rongorongo)
    • ๋ฐ”๋กœํฌ ์Œ์•… (Baroque Music)
  • Design

    • ๊ตฌ๊ธ€์˜ ์•„์ด์ฝ˜ ๋Œ€๊ฐœํŽธ โ€” 6๋…„ ๋งŒ์˜ ์‹ค์ˆ˜ ์ธ์ •
    • ์ œ๋Ÿด๋“œ ์  ํƒ€ โ€” ๋Ÿญ์…”๋ฆฌ ์Šคํฌ์ธ  ์›Œ์น˜์˜ ์ฐฝ์‹œ์ž
    • ๋ฐ”์šฐํ•˜์šฐ์Šค โ€” ํ˜„๋Œ€ ๋””์ž์ธ์˜ ์›์ 
  • Brands

    • NOMOS Glashรผtte
    • Frรฉdรฉrique Constant
    • KZ (Knowledge Zenith)
    • ์—์ŠคํŠธ๋ผ (AESTURA)
    • JINHAO (้‡‘่ฑช)
    • Herman Miller
    • ๋ฐ์Šค์ปค (DESKER)
    • ๋ฌด์‹ ์‚ฌ ์Šคํƒ ๋‹ค๋“œ (Musinsa Standard)
  • Finance

    • ํ˜„๋Œ€์นด๋“œ ZERO โ€” Edition2 vs Edition3 ๋น„๊ต
    • ์‹ ํ•œ์นด๋“œ ์ฒ˜์Œ
    • S&P 500 ETF ํˆฌ์ž ๊ฐ€์ด๋“œ
    • ํŒŒํ‚นํ†ต์žฅ vs CMA ํ†ต์žฅ
    • ๋ฒ„ํฌ์…” ํ•ด์„œ์›จ์ด (Berkshire Hathaway)
    • ๋น„ํŠธ์ฝ”์ธ(Bitcoin)
  • Products

    • ์˜ค๋””์˜ค ์ธํ„ฐํŽ˜์ด์Šค (Audio Interface)
    • ์ฟ ๋ฃจํ† ๊ฐ€ (KURUTOGA)
    • CX31993 DAC ๋™๊ธ€
    • ํด๋ Œ์ง• ๋ฐ€ํฌ (Cleansing Milk)
    • ํ”ผ์ ฏ ํ† ์ด (Fidget Toy)
    • ThinkPad
  • Programming Languages

    • 8.0. Statement Level Control Structures
    • 8. Subprogram
    • 9. Implementing Subprogram
    • 10.1. Abstract Data Types and Encapsulation Constructs
    • 10.2. Support for Object Oriented Programming
    • 11. Concurrency
    • 12. FPL (1)
    • 13. FPL (2)
    • 14. Exception Handling and Event Handling
    • Final Exam

Homeworkย #1-1\text{Homework \#1-1}Homeworkย #1-1

์ž‘์„ฑ 2026. 6. 12.ยท์ˆ˜์ • 2026. 6. 12.
  • Software Engineering (10780)
  • ํ•™๋ฒˆ: 2021024057
  • ์ด๋ฆ„: ๊น€๋ณ‘์ค€

1. ๋””์ž์ธ ๋ถ„์„

Design Aalt text

Design Balt text

  • ์œ„์— ์ œ์‹œ๋œ ๋‘ ๋””์ž์ธ์€ ๋ชจ๋‘ ๊ณ ๊ฐ(Customor) ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์˜ Class diagram์„ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠนํžˆ CustomerList class์—์„œ ๊ณ ๊ฐ ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋‹ค๋ฅธ ๋ถ€๋ถ„(MarketingLetters, CustomerManagementDialog)์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํŠน์ง•Design ADesign B
๋ณ€๊ฒฝ ์•Œ๋ฆผ ๋ฐฉ์‹CustomerList๊ฐ€ ์ง์ ‘ ๋‹ค๋ฅธ class์˜ method๋ฅผ ํ˜ธ์ถœObserver Pattern ๊ธฐ๋ฐ˜์˜ ๊ฐ„์ ‘ ํ˜ธ์ถœ
CustomerList์˜ ์—ญํ• ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ UI/๋งˆ์ผ€ํŒ… ๋กœ์ง ์ง์ ‘ ์ฒ˜๋ฆฌ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ event ์•Œ๋ฆผ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰
Coupling(๊ฒฐํ•ฉ๋„)CustomerList๊ฐ€ MarketingLetters์™€ CustomerManagementDialog์— ์ง์ ‘ ๊ฒฐํ•ฉCustomerList๊ฐ€ CustomerEventHandler interface์—๋งŒ ๊ฐ„์ ‘ ๊ฒฐํ•ฉ
ํ™•์žฅ/์œ ์ง€๋ณด์ˆ˜์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด CustomerList๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•จ์ƒˆ๋กœ์šด Listener๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ๋Šฅ ํ™•์žฅ ๊ฐ€๋Šฅ

2. Design principle and pattern-based argue

2.1. (Design Pattern) Observer Pattern

Observer Pattern (a.k.a. "Publish-Subscribe")
"๊ฐ์ฒด ๊ฐ„ ์ผ๋Œ€๋‹ค ์ข…์†์„ฑ์„ ์ •์˜ํ•˜์—ฌ, ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋ชจ๋“  ์ข…์† ๊ฐ์ฒด๊ฐ€ ์ž๋™์œผ๋กœ ํ†ต์ง€๋ฐ›๊ณ  ์—…๋ฐ์ดํŠธ๋˜๋„๋ก ํ•œ๋‹ค." [1] alt text

  • Design B๋Š” observer pattern์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฐ˜์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • Subject: CustomerList (์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ observer๋“ค์—๊ฒŒ ์•Œ๋ฆผ)
    • Observer: CustomerEventHandler interface๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” MarketingLetters์™€ CustomerListListener (์ด๋ฒคํŠธ ์ˆ˜์‹  ๋ฐ ์ฒ˜๋ฆฌ)
    • CustomerList๋Š” ์–ด๋–ค class๊ฐ€ ์ž์‹ ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ฒŒ ๋˜๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
    • Event๋ฅผ handler์—๊ฒŒ ์ „ํŒŒํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
      • ์ด๋Š” Loose Coupling ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค.

2.2. (Design Principle) Single Responsibility Principle(SRP)

"๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(single responsibility principle)์ด๋ž€ ๋ชจ๋“  ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง€๋ฉฐ, ํด๋ž˜์Šค๋Š” ๊ทธ ์ฑ…์ž„์„ ์™„์ „ํžˆ ์บก์Аํ™”ํ•ด์•ผ ํ•จ์„ ์ผ์ปซ๋Š”๋‹ค. ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ์ด ์ฑ…์ž„๊ณผ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ถ€ํ•ฉํ•ด์•ผ ํ•œ๋‹ค." [2]

  • Design A
    • CustomerList๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” responsibility๋“ค
      1. ๊ณ ๊ฐ ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ (customers.add(customer))
      2. ๋งˆ์ผ€ํŒ… ํŽธ์ง€ ๋ฐœ์†ก ์ฒ˜๋ฆฌ (marketing.customerAdded(customer))
      3. UI ๋ฆฌ์ŠคํŠธ ์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ (gui.list.add(customer.name))
    • ์ด๋Š” SRP ์œ„๋ฐ˜์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • Design B
    • CustomerList๋Š” ๊ณ ๊ฐ ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ ๋ฐ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์•Œ๋ฆผ์ด๋ผ๋Š” single responsibility๋งŒ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • ๋งˆ์ผ€ํŒ… ๊ด€๋ จ ์ฑ…์ž„์€ MarketingLetters์—, UI ์—…๋ฐ์ดํŠธ ๊ด€๋ จ ์ฑ…์ž„์€ CustomerListListener๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” class์— ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋Š” SRP๋ฅผ ๋งŒ์กฑ์‹œํ‚จ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.3. (Design Pattern) Open-Closed Principle (OCP)

"๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP, Open-Closed Principle)์€ '์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ์ฒด(ํด๋ž˜์Šค, ๋ชจ๋“ˆ, ํ•จ์ˆ˜ ๋“ฑ๋“ฑ)๋Š” ํ™•์žฅ์— ๋Œ€ํ•ด ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๊ณ , ์ˆ˜์ •์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค'๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™์ด๋‹ค." [3]

  • Design A
    • ๊ณ ๊ฐ ์ถ”๊ฐ€ ์‹œ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด (Accounting ๋ชจ๋“ˆ์— ์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ ๋“ฑ), CustomerList class์˜ addCustomer() method๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๊ธฐ๋Šฅ ์ถ”๊ฐ€์— ๋Œ€ํ•ด closed๋˜์ง€ ์•Š์Œ)
  • Design B
    • ์ƒˆ๋กœ์šด listener(์˜ˆ: AccountingListener)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  CustomerList์— ๋“ฑ๋กํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    • CustomerList ์ž์ฒด์˜ ์ฝ”๋“œ๋Š” ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. (ํ™•์žฅ์— ๋Œ€ํ•ด open, ์ˆ˜์ •์— ๋Œ€ํ•ด closed)
    • ์ด๋Š” OCP๋ฅผ ๋งŒ์กฑ์‹œํ‚จ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.4. (Design Principle) Dependency Inversion Principle (DIP)

"์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™์€ ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ๋“ค์„ ๋ถ„๋ฆฌํ•˜๋Š” ํŠน์ • ํ˜•์‹์„ ์ง€์นญํ•œ๋‹ค. ์ด ์›์น™์„ ๋”ฐ๋ฅด๋ฉด, ์ƒ์œ„ ๊ณ„์ธต(์ •์ฑ… ๊ฒฐ์ •)์ด ํ•˜์œ„ ๊ณ„์ธต(์„ธ๋ถ€ ์‚ฌํ•ญ)์— ์˜์กดํ•˜๋Š” ์ „ํ†ต์ ์ธ ์˜์กด๊ด€๊ณ„๋ฅผ ๋ฐ˜์ „(์—ญ์ „)์‹œํ‚ด์œผ๋กœ์จ ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์˜ ๊ตฌํ˜„์œผ๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์›์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค." [4]

  1. ์ƒ์œ„ ๋ชจ๋“ˆ์€ ํ•˜์œ„ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์ƒ์œ„ ๋ชจ๋“ˆ๊ณผ ํ•˜์œ„ ๋ชจ๋“ˆ ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.
  2. ์ถ”์ƒํ™”๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์„ธ๋ถ€์‚ฌํ•ญ์ด ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.

alt text

  • Design A
    • High-level module์ธ CustomerList๊ฐ€ low-level moudule์ธ detailํ•œ MarketingLetters์™€ CustomerManagementDialog์— ์ง์ ‘ ์˜์กดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (detailํ•œ ๊ฒƒ์— ์˜์กด)
  • Design B
    • CustomerList๋Š” ์ถ”์ƒํ™”๋œ CustomerEventHandler interface์—๋งŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
    • detailํ•œ ๊ตฌํ˜„์ฒด(Listener)์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ์—ญ์ „์‹œํ‚ต๋‹ˆ๋‹ค. (์ถ”์ƒ์ ์ธ ๊ฒƒ์— ์˜์กด)
    • ์ด๋Š” DIP๋ฅผ ๋งŒ์กฑ์‹œํ‚จ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. Conclusion

  • Design B๋Š” observer pattern์„ ์‚ฌ์šฉํ•˜์—ฌ SRP, OCP, DIP์™€ ๊ฐ™์€ ํ•ต์‹ฌ ๋””์ž์ธ ์›์น™์„ ์ค€์ˆ˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด
    1. ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์ถ”๊ณ  (๋А์Šจํ•œ ๊ฒฐํ•ฉ, low coupling)
    2. ์‘์ง‘๋„๋Š” ๋†’์ด๋ฉฐ
    3. ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜์—ฌ
  • ์‹œ์Šคํ…œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ, Design B๊ฐ€ ๋” ์šฐ์ˆ˜ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ์ด๋ผ๊ณ  ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. Works Cited

[1] ์ˆ˜์—… ๊ฐ•์˜์ž๋ฃŒ, Design Patterns (https://learning.hanyang.ac.kr/courses/181214/modules/items/8362823?return_url=/courses/181214/external_tools/140)

[2] Wikipedia, "Single-Responsibility Principle" (https://en.wikipedia.org/wiki/Single-responsibility_principle)

[3] Wikipedia, "Open-Closed Principle" (https://en.wikipedia.org/wiki/Open%E2%80%93closed_principle)

[4] Wikipedia, "Dependency Inversion Principle" (https://en.wikipedia.org/wiki/Dependency_inversion_principle)

์ตœ๊ทผ ์ˆ˜์ •: 26. 6. 12. ์˜คํ›„ 3:28
Contributors: kmbzn, Claude Sonnet 4.6

BUILT WITH

CloudflareNode.jsGitHubGitVue.jsJavaScriptVSCodenpm

All trademarks and logos are property of their respective owners.
ยฉ 2026 kmbzn ยท MIT License