β›“ νŒ¨ν„΄μ΄λž€?

  • νŒ¨ν„΄μ˜ 사전적 μ˜λ―ΈλŠ” β€˜μΌμ •ν•œ ν˜•νƒœλ‚˜ 양식 λ˜λŠ” μœ ν˜•μ΄ λ°˜λ³΅λ˜λŠ” 것’

  • νŒ¨ν„΄μ€ 발λͺ…ν•˜λŠ” 것이 μ•„λ‹ˆλΌ λ°œκ²¬ν•˜λŠ” 것이닀.

  • κ³΅ν•™λΆ„μ•Όμ—μ„œ 처음으둜 νŒ¨ν„΄μ˜ κ°œλ…μ„ λ„μž…ν•œ λΆ„μ•ΌλŠ” 건좕곡학

  • 개발 λΆ„μ•Όμ—μ„œμ˜ νŒ¨ν„΄μ€ λ§Žμ€ μ‚¬λžŒμ΄ κ²ͺ은 문제점과 해결방법을 정리해둔 것을 의미

  • 즉, νŒ¨ν„΄μ€ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 과정을 μΌλ°˜ν™”ν•œ 것이라고 λ³Ό 수 μžˆλ‹€

  • λ””μžμΈ νŒ¨ν„΄μ„ κ΅¬λ³„ν•˜λŠ” 기쀀은 각각의 νŒ¨ν„΄μ΄ μ–΄λ–€ 관심사λ₯Ό 가지고 문제λ₯Ό ν•΄κ²°ν•˜λ € ν•˜λŠ”κ°€ 에 λŒ€ν•œ 것이닀. νŒ¨ν„΄μ€ μ˜λ„μ™€ λͺ©μ μ— 따라 λ‹¬λΌμ§€λ―€λ‘œ μ μ ˆν•œ νŒ¨ν„΄μ„ μ μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ˜λ„μ™€ λͺ©μ μ„ 잘 νŒŒμ•…ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

πŸ–₯ μ†Œν”„νŠΈμ›¨μ–΄ 곡학

μ΄λŸ¬ν•œ νŒ¨ν„΄μ˜ μ›λ¦¬λŠ” μ†Œν”„νŠΈμ›¨μ–΄ 곡학 뢄야에 λ„μž…λ˜κΈ° μ‹œμž‘ν–ˆλ‹€. μ†Œν”„νŠΈμ›¨μ–΄μ μΈ 문제λ₯Ό μ½”λ“œλ‘œ κ΅¬ν˜„ν•  λ•Œ μ μš©ν–ˆλ˜ ν•΄κ²° 방법을 νŒ¨ν„΄ν™”ν•˜μ—¬ μ •λ¦¬ν•œ 것이닀.

처음으둜 μ†Œν”„νŠΈμ›¨μ–΄ 곡학에 λ„μž…λœ 뢀뢄은 객체지ν–₯ 개발둜, μ†Œν”„νŠΈμ›¨μ–΄ 개발 방법둠이닀. 객체지ν–₯은 큰 ν”„λ‘œμ νŠΈ 개발과 μœ μ§€λ³΄μˆ˜λ₯Ό 보닀 μ‰½κ²Œ ν•˜κΈ° μœ„ν•΄ λ„μž…λœ 개발 방법둠이닀. 졜근 ν”„λ‘œκ·Έλž¨λ“€μ΄ λŒ€ν˜•ν™”, λΆ„μ—…ν™”λ˜λ©΄μ„œ μ ˆμ°¨μ§€ν–₯ 개발 λ°©λ²•λ‘ μ—μ„œ 객체지ν–₯ 개발 λ°©λ²•λ‘ μœΌλ‘œ λΉ λ₯΄κ²Œ μ΄λ™ν•˜κ³  μžˆλ‹€. λ””μžμΈ νŒ¨ν„΄μ€ 객체지ν–₯ κ°œλ°œλ²•μ΄ 인기λ₯Ό μ–»μœΌλ©΄μ„œ ν•¨κ»˜ μ£Όλͺ©μ„ λ°›μ•˜λ‹€.

λ§Žμ€ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ†Œν”„νŠΈμ›¨μ–΄ 개발 λΆ„μ•Όμ—μ„œ νŠΉμ • 문제λ₯Ό μœ μ‚¬ν•œ μœ ν˜•μœΌλ‘œ ν•΄κ²°ν•œλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆκ³ , ν•΄κ²°κ³Όμ •μ—μ„œ 발견된 방법듀을 νŒ¨ν„΄ν™”ν•˜μ—¬ κ·œμ •ν•˜κΈ° μ‹œμž‘ν–ˆλ‹€. λ””μžμΈ νŒ¨ν„΄μ€ 객체지ν–₯ κ΅¬ν˜„ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ„μž…λ˜μ—ˆμœΌλ©° 해결방법을 μž¬μ‚¬μš©ν•˜λŠ” 것이라고 λ³Ό 수 μžˆλ‹€.

  • 객제치ν–₯ κ°œλ°œμ—μ„œ λ””μžμΈ νŒ¨ν„΄μ΄ ν•΄κ²°ν•˜λŠ” μ£Όμš” λ¬Έμ œλŠ” 객체 κ°„ 관둀와 μ†Œν†΅μ²˜λ¦¬ 뢀뢄이닀.
  • λ””μžμΈ νŒ¨ν„΄μ€ 객체지ν–₯ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 일련의 μ½”λ“œ μŠ€νƒ€μΌλ‘œ, λ””μžμΈ νŒ¨ν„΄μ„ μ μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 객체 지ν–₯적인 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ ν•„μš”ν•˜λ‹€.

✏️ λ””μžμΈ νŒ¨ν„΄ 섀계 원칙

λ””μžμΈ νŒ¨ν„΄ 외에도 객체지ν–₯ μ½”λ“œ κ°œλ°œμ‹œ 가급적 μ§€μΌœμ•Όν•  원칙이 μžˆλ‹€. μ›μΉ™λ“€μ˜ μ•žκΈ€μžλ₯Ό λ”°μ„œ SOLID 라고 λΆ€λ₯΄κΈ°λ„ ν•œλ‹€.

  1. 단일 μ±…μž„μ˜ 원칙(Single Responsibility Principle, SRP)
  2. 개발 폐쇄 원칙(Open & Closed Principle, OCP)
  3. λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜μ›μΉ™(Liskov Substitution Principel, LSP)
  4. μΈν„°νŽ˜μ΄μŠ€ λΆ„λ¦¬μ˜ 원칙(Interface Segregation Principle, ISP)
  5. μ˜μ‘΄κ΄€κ³„ μ—­μ „μ˜ 법칙(Dependency Inversion Principle, DIP)

이 원칙듀은 객체지ν–₯ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 데 도움을 μ£Όμ§€λ§Œ, μ‹œμŠ€ν…œμ„ κ³ λ €ν•˜μ§€ μ•Šμ€ 원칙을 μ μš©ν•  경우 λΆˆν•„μš”ν•œ 일이 λ°œμƒν•  μˆ˜λ„ μžˆλ‹€. λ”°λΌμ„œ 각각의 원칙듀은 μ½”λ“œμ˜ λͺ©μ μ— 맞게 μ μž¬μ μ†Œμ— μ μš©ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

GoF

Gang of Four의 μ•½μžλ‘œ 에릭 감마, λ¦¬μ²˜λ“œ 헬름, λž„ν”„ 쑴슨, μ‘΄ λΈ”λ¦¬μ‹œλ°μŠ€μ˜ μ €μ„œμΈ β€œGoF의 λ””μžμΈ νŒ¨ν„΄β€ 을 κ°€λ¦¬ν‚€λŠ” μš©μ–΄μ΄λ‹€. 즉, 처음으둜 μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ—μ„œ μ‚¬μš©λ˜λŠ” νŒ¨ν„΄μ„ μ •λ¦¬ν•œ μ‚¬λžŒλ“€μ˜ 별칭이닀.

GoFλŠ” 객체지ν–₯ λΆ„μ•Όμ˜ λ¬Έμ œμ μ„ 뢄석해 24개의 νŒ¨ν„΄μœΌλ‘œ λΆ„λ₯˜ν–ˆλ‹€. 기쑴의 객제치ν–₯ 섀계 μ‹œ λ°œμƒν–ˆλ˜ λ¬Έμ œλ“€μ„ μΉ΄νƒˆλ‘œκ·Έν™”ν•˜μ—¬ νŒ¨ν„΄μœΌλ‘œ μ •λ¦¬ν•œ 것이닀. μΉ΄νƒˆλ‘œκ·Έν™” 된 νŒ¨ν„΄μ€ μ‹œμŠ€ν…œμ˜ μœ μ§€ 보수 λ¬Έμ„œλ₯Ό μž‘μ„±ν•  λ•Œ 맀우 μœ μš©ν•˜λ‹€. λ˜ν•œ 객체 κ°„ μƒν˜Έμž‘μš©μ΄λ‚˜ 섀계 μ˜λ„ 등도 μ‰½κ²Œ 확인할 수 μžˆλ‹€.

⭐️ νŒ¨ν„΄μ˜ μš”μ†Œ

24개둜 λΆ„λ¦¬λœ λ””μžμΈ νŒ¨ν„΄μ€ κ³΅ν†΅λœ 4가지 μš”μ†Œλ₯Ό 가진닀

  • 이름(patrtern name) β†’ 24μ’…λ₯˜μ˜ λ””μžμΈ νŒ¨ν„΄μ€ 각각 고유의 이름을 가지고 μžˆλ‹€. νŒ¨ν„΄μ˜ 이름을 톡해 νŒ¨ν„΄μ˜ μš©λ„λ₯Ό μ§κ΄€μ μœΌλ‘œ 이해할 수 μžˆλ‹€.
  • 문제(problem) β†’ 각 νŒ¨ν„΄μ΄ ν•΄κ²°ν•˜κ³ μž ν•˜λŠ” λ¬Έμ œμ΄λ‹€. λ¬Έμ œλ“€μ€ νŒ¨ν„΄ μ μš©μ„ κ³ λ €ν•΄μ•Ό ν•˜λŠ” μ‹œμ μ„ μ•”μ‹œν•œλ‹€. μ½”λ“œμ—μ„œ ν•΄κ²°ν•  λ¬Έμ œμ μ„ λ°œκ²¬ν•œ ν›„ 그와 κ΄€λ ¨λœ 배경을 μ •λ¦¬ν•˜κ³  λ‹€μ–‘ν•œ 적용 사둀λ₯Ό μ•Œμ•„λ³Ό 수 μžˆλ‹€.
  • 해법(solution) β†’ λ¬Έμ œμ μ„ μΈμ‹ν–ˆλ‹€λ©΄ ν•΄κ²° 방법을 μ°Ύμ•„μ•Ό ν•œλ‹€. 이λ₯Ό μœ„ν•΄ 객체 μš”μ†Œ κ°„ 관계λ₯Ό μ •λ¦¬ν•˜κ³  νŒ¨ν„΄μ„ 톡해 객체듀을 μΆ”μƒν™”ν•˜λŠ” 과정을 κ±°μΉœλ‹€. λ˜ν•œ 해결을 μœ„ν•œ 객체λ₯Ό λ‚˜μ—΄ν•œλ‹€.
  • κ²°κ³Ό(consequence) β†’ λ””μžμΈ νŒ¨ν„΄μ€ μ•Œλ €μ§„ λ¬Έμ œμ λ“€μ„ ν•΄κ²°ν•˜λŠ”λ° νš¨κ³Όμ μ΄λ‹€. ν•˜μ§€λ§Œ λ””μžμΈ νŒ¨ν„΄μ„ μ μš©ν•œλ‹€κ³  ν•΄μ„œ λͺ¨λ“  문제λ₯Ό μ™„λ²½ν•˜κ²Œ μ œκ±°ν•  μˆ˜λŠ” μ—†λ‹€. νŒ¨ν„΄μ€ 맀우 μœ μš©ν•˜μ§€λ§Œ κΌ­ ν•„μš”ν•œ 경우λ₯Ό μƒκ°ν•΄μ„œ 적절히 λΆ„λ°°ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

정리

  • λ””μžμΈ νŒ¨ν„΄μ€ (μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ—μ„œ) 객체지ν–₯ 개발 λ°©λ²•λ‘ μ—μ„œ 자주 λ“±μž₯ν•˜λŠ” λ¬Έμ œλ“€μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ„μž…λœ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ†”λ£¨μ…˜μ΄λ‹€.
  • λ””μžμΈ νŒ¨ν„΄μ— μ΅μˆ™ν•΄μ§„λ‹€λ©΄ 과거의 μ½”λ“œλ‚˜ μƒˆλ‘œμš΄ μ½”λ“œλ₯Ό ν•™μŠ΅ν•˜λŠ” μ‹œκ°„μ„ 쀄일 수 μžˆλ‹€. λ”°λΌμ„œ νŒ¨ν„΄μ€ 문제 ν•΄κ²° 방법 외에도 개발 λΉ„μš©κ³Ό μ‹œκ°„μ„ μ ˆμ•½ν•˜λŠ”λ° 맀우 μœ μš©ν•˜λ‹€.
  • λ””μžμΈ νŒ¨ν„΄κ³Ό 처리 μ„±λŠ₯은 λ³„κ°œμ˜ λ¬Έμ œμ΄λ‹€.
    • λ””μžμΈ νŒ¨ν„΄μ—μ„œλŠ” μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜λ₯Ό μœ„ν•΄ 객체의 λ©”μ„œλ“œλ₯Ό λΆ„λ¦¬ν•˜λ©° ν˜ΈμΆœλ„ 자주 λ°œμƒν•œλ‹€.
    • νŒ¨ν„΄μ„ μ§€λ‚˜μΉ˜κ²Œ μ‚¬μš©ν•˜λ©΄ μž¦μ€ λ©”μ„œλ“œ 호좜둜 인해 μ„±λŠ₯이 μ €ν•˜λ  수 μžˆλ‹€.