λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ‘‹/μ„œμ  πŸ“š

[Refactoring] Chapter 02. Principles in Refactoring (λ¦¬νŒ©ν„°λ§ 원칙)

Chapter 02 λ¦¬νŒ©ν„°λ§ 원칙

  1. λ¦¬νŒ©ν„°λ§ μ •μ˜λ¦¬νŒ©ν„°λ§μ€ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κ³  μˆ˜μ •ν•˜κΈ° μ‰½κ²Œ λ§Œλ“œλŠ” 것이 λͺ©μ μ΄λ©°, μ„±λŠ₯ μ΅œμ ν™”μ™€λŠ” λͺ©ν‘œμ™€ 방법이 λ‹€λ₯΄λ‹€. μ„±λŠ₯ μ΅œμ ν™”λŠ” 속도 κ°œμ„ μ—λ§Œ μ§‘μ€‘ν•˜λ―€λ‘œ μ½”λ“œκ°€ 더 λ³΅μž‘ν•΄μ§ˆ 수 μžˆλ‹€.
    πŸ’‘ λ¦¬νŒ©ν„°λ§: [λͺ…사] μ†Œν”„νŠΈμ›¨μ–΄μ˜ 겉보기 λ™μž‘μ€ κ·ΈλŒ€λ‘œ μœ μ§€ν•œ 채, μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κ³  μˆ˜μ •ν•˜κΈ° 쉽도둝 λ‚΄λΆ€ ꡬ쑰λ₯Ό λ³€κ²½ν•˜λŠ” 기법
    πŸ’‘λ¦¬νŒ©ν„°λ§(ν•˜λ‹€): [동사] μ†Œν”„νŠΈμ›¨μ–΄μ˜ 걸보기 λ™μž‘μ€ κ·ΈλŒ€λ‘œ μœ μ§€ν•œ 채, μ—¬λŸ¬ κ°€μ§€ λ¦¬νŒ©ν„°λ§ 기법을 μ μš©ν•΄μ„œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μž¬κ΅¬μ„±ν•˜λ‹€.

  1. 두 개의 λͺ¨μž
    μ†Œν”„νŠΈμ›¨μ–΄ 개발 μ‹œ 'κΈ°λŠ₯ μΆ”κ°€'와 'λ¦¬νŒ©ν„°λ§'을 λͺ…ν™•νžˆ κ΅¬λΆ„ν•˜μ—¬ μž‘μ—…ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€. κΈ°λŠ₯ μΆ”κ°€ μ‹œμ—λŠ” κΈ°μ‘΄ μ½”λ“œλ₯Ό κ±΄λ“œλ¦¬μ§€ μ•Šκ³  μƒˆλ‘œμš΄ κΈ°λŠ₯만 μΆ”κ°€ν•˜λ©°, ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ”μ§€ ν™•μΈν•œλ‹€. λ¦¬νŒ©ν„°λ§ μ‹œμ—λŠ” μ½”λ“œ μž¬κ΅¬μ„±μ—λ§Œ μ „λ…ν•˜κ³ , κΈ°λŠ₯ μΆ”κ°€λŠ” ν•˜μ§€ μ•ŠλŠ”λ‹€. μΈν„°νŽ˜μ΄μŠ€ 변경이 ν•„μš”ν•œ κ²½μš°μ—λ§Œ κΈ°μ‘΄ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜μ •ν•œλ‹€.

  1. λ¦¬νŒ©ν„°λ§ν•˜λŠ” 이유
    • μ†Œν”„νŠΈμ›¨μ–΄ 섀계가 μ’‹μ•„μ§„λ‹€.
    • μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ΄ν•΄ν•˜κΈ°κ°€ μ‰¬μ›Œμ§„λ‹€.
    • 버그λ₯Ό μ‰½κ²Œ 찾을 수 μžˆλ‹€.
    • ν”„λ‘œκ·Έλž˜λ° 속도λ₯Ό 높일 수 μžˆλ‹€.

  1. μ–Έμ œ λ¦¬νŒ©ν„°λ§μ„ ν•΄μ•Ό ν• κΉŒ?
    • μ€€λΉ„λ₯Ό μœ„ν•œ λ¦¬νŒ©ν„°λ§: κΈ°λŠ₯을 μ‰½κ²Œ μΆ”κ°€ν•˜κ²Œ λ§Œλ“€κΈ°
    • 이해λ₯Ό μœ„ν•œ λ¦¬νŒ©ν„°λ§: μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€κΈ°
    • μ“°λ ˆκΈ° 쀍기 λ¦¬νŒ©ν„°λ§
    • κ³„νšλœ λ¦¬νŒ¨ν„°λ§κ³Ό μˆ˜μ‹œλ‘œ ν•˜λŠ” λ¦¬νŒ©ν„°λ§
      • 보기 싫은 μ½”λ“œλ₯Ό λ°œκ²¬ν•˜λ©΄ λ¦¬νŒ©ν„°λ§ ν•˜μž. 그런데 잘 μž‘μ„±λœ μ½”λ“œ μ—­μ‹œ μˆ˜λ§Žμ€ λ¦¬νŒ©ν„°λ§μ„ 거쳐야 ν•œλ‹€.
      • 무언가 μˆ˜μ •ν•˜λ € ν•  λ•ŒλŠ” μˆ˜μ •ν•˜κΈ° μ‰½κ²Œ μ •λˆν•˜κ³  그런 λ‹€μŒ μ‰½κ²Œ μˆ˜μ •ν•˜μž.
    • 였래 κ±Έλ¦¬λŠ” λ¦¬νŒ©ν„°λ§
    • μ½”λ“œ 리뷰에 λ¦¬νŒ©ν„°λ§ ν™œμš©ν•˜κΈ°
    • κ΄€λ¦¬μžμ—κ²ŒλŠ” 뭐라고 말해야 ν• κΉŒ?
      μƒˆ ν•¨μˆ˜λ₯Ό μΆ”κ°€ν•˜λ €λŠ”λ° ν˜„μž¬ 섀계가 μ ν•©ν•˜μ§€ μ•Šλ‹€λ©΄ λ¨Όμ € λ¦¬νŒ©ν„°λ§ν•˜κ³  λ‚˜μ„œ ν•¨μˆ˜λ₯Ό μΆ”κ°€ν•˜λŠ” 편이 λΉ λ₯΄λ‹€. 버그λ₯Ό μˆ˜μ •ν•˜λ €λ©΄ ν˜„μž¬ μ†Œν”„νŠΈμ›¨μ–΄μ˜ μž‘λ™ 방식을 μ΄ν•΄ν•΄μ•Όν•œλ‹€. μ΄λ•Œλ„ λ¦¬νŒ©ν„°λ§λΆ€ν„° ν•˜λŠ” 편이 κ°€μž₯ λΉ λ₯΄λ‹€. 일정을 μ΅œμš°μ„ μœΌλ‘œ μ—¬κΈ°λŠ” κ΄€λ¦¬μžλŠ” μ΅œλŒ€ν•œ 빨리 λλ‚΄λŠ” λ°©ν–₯으둜 μ§„ν–‰ν•˜κΈ°λ₯Ό μ›ν•œλ‹€. 그리고 ꡬ제적인 방법은 κ°œλ°œμžκ°€ νŒλ‹¨ν•΄μ•Ό ν•œλ‹€. ν”„λ‘œ κ°œλ°œμžμ—κ²Œ μ£Όμ–΄μ§„ μž„λ¬΄λŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯을 λΉ λ₯΄κ²Œ κ΅¬ν˜„ν•˜λŠ” 짓이고, κ°€μž₯ λΉ λ₯Έ 방법은 λ¦¬νŒ©ν„°λ§μ΄λ‹€. κ·Έλž˜μ„œ λ¦¬νŒ©ν„°λ§λΆ€ν„° ν•œλ‹€.
    • λ¦¬νŒ©ν„°λ§ ν•˜μ§€ 말아야 ν•  λ•Œ
      λ‚΄λΆ€ λ™μž‘μ„ 이해해야 ν•  μ‹œμ μ— λ¦¬νŒ©ν„°λ§ν•΄μ•Ό 효과λ₯Ό μ œλŒ€λ‘œ λ³Ό 수 μžˆλ‹€.
      3의 법칙 1. μ²˜μŒμ—λŠ” κ·Έλƒ₯ ν•œλ‹€. 2. λΉ„μŠ·ν•œ 일을 두 번째둜 ν•˜κ²Œ 되면 (쀑볡이 μƒκ²Όλ‹€λŠ” 사싀에 λ‹Ήν™©μŠ€λŸ½κ² μ§€λ§Œ) 일단 계속 μ§„ν–‰ ν•œλ‹€. 3. λΉ„μŠ·ν•œ 일을 μ„Έ 번째 ν•˜κ²Œ 되면 λ¦¬νŒ©ν„°λ§ ν•œλ‹€.

  1. λ¦¬νŒ©ν„°λ§ μ‹œ κ³ λ €ν•  문제
    • μƒˆ κΈ°λŠ₯ 개발 속도 μ €ν•˜
      • λ¦¬νŒ©ν„°λ§μ˜ ꢁ극적인 λͺ©μ μ€ 개발 속도λ₯Ό λ†’μ—¬μ„œ, 더 적은 λ…Έλ ₯으둜 더 λ§Žμ€ κ°€μΉ˜λ₯Ό μ°½μΆœν•˜λŠ” 것이닀.
    • μ½”λ“œ μ†Œμœ κΆŒ
    • 브랜치
    • ν…ŒμŠ€νŒ…
    • λ ˆκ±°μ‹œμ½”λ“œ
    • λ°μ΄ν„°λ² μ΄μŠ€
      λ°μ΄ν„°λ² μ΄μŠ€ λ¦¬νŒ©ν„°λ§μ€ ν”„λ‘œλ•μ…˜ ν™˜κ²½μ— μ—¬λŸ¬ λ‹¨κ³„λ‘œ λ‚˜λˆ μ„œ λ¦΄λ¦¬μŠ€ν•˜λŠ” 것이 λŒ€μ²΄λ‘œ μ’‹λ‹€λŠ” μ μ—μ„œ λ‹€λ₯Έ λ¦¬νŒ©ν„°λ§κ³Ό λ‹€λ₯΄λ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ λ¬Έμ œκ°€ 생겼을 λ•Œ 변경을 되돌리기 쉽닀. 이λ₯Όν…Œλ©΄ ν•„λ“œ 이름을 λ°”κΏ€ λ•Œ 첫 번째 μ»€λ°‹μ—μ„œλŠ” μƒˆλ‘œμš΄ λ°μ΄ν„°λ² μ΄μŠ€ ν•„λ“œλ₯Ό μΆ”κ°€λ§Œ ν•˜κ³  μ‚¬μš©ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€. 그런 λ‹€μŒ κΈ°μ‘΄ ν•„λ“œμ™€ μƒˆ ν•„λ“œλ₯Ό λ™μ‹œμ— μ—…λ°μ΄νŠΈν•˜λ„λ‘ μ„€μ •ν•œλ‹€. κ·Έλ‹€μŒμ—λŠ” λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ½λŠ” ν΄λΌμ΄μ–ΈνŠΈλ“€μ„ μƒˆ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” λ²„μ „μœΌλ‘œ μ‘°κΈˆμ”© κ΅μ²΄ν•œλ‹€. 이 κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” 버그도 ν•΄κ²°ν•˜λ©΄μ„œ ν΄λΌμ΄μ–ΈνŠΈ ꡐ체 μž‘μ—…μ„ λͺ¨λ‘ λλƒˆλ‹€λ©΄, λ”λŠ” ν•„μš”κ°€ μ—†μ–΄μ§„ μ˜ˆμ „ ν•„λ“œλ₯Ό μ‚­μ œν•œλ‹€. μ΄λ ‡κ²Œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³€κ²½ν•˜λŠ” 방식은 병렬 μˆ˜μ •μ˜ 일반적인 μ˜ˆλ‹€.

  1. λ¦¬νŒ©ν„°λ§, μ•„ν‚€ν…μ²˜, μ• κ·Έλ‹ˆ(YAGNI)
    λ¦¬νŒ©ν† λ§μ„ 톡해 ν˜„μž¬κΉŒμ§€ νŒŒμ•…ν•œ μš”κ΅¬μ‚¬ν•­μ„ ν•΄κ²°ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ΅¬μΆ•ν•˜κ³ , 변경에 μœ μ—°ν•˜κ²Œ λŒ€μ‘ν•˜κΈ° μœ„ν•΄ 섀계λ₯Ό κ°„κ²°ν•˜κ³  μ μ§„μ μœΌλ‘œ μ§„ν–‰ν•˜λŠ” 방식을 YAGNI둜 λΆ€λ₯Έλ‹€. λ¦¬νŒ©ν† λ§μ„ 미루면 μ–΄λ €μ›Œμ§€λ―€λ‘œ μœ μ—°μ„± λ©”μ»€λ‹ˆμ¦˜μ€ 검증 ν›„ μΆ”κ°€ν•΄μ•Ό ν•œλ‹€.

  1. λ¦¬νŒ©ν„°λ§κ³Ό μ†Œν”„νŠΈμ›¨μ–΄ 개발 ν”„λ‘œμ„ΈμŠ€μžκ°€ ν…ŒμŠ€νŠΈ μ½”λ“œ, 지속적 톡합, λ¦¬νŒ©ν„°λ§μ΄λΌλŠ” 세기법은 μ„œλ‘œ κ°•λ ₯ν•œ μƒμŠΉνš¨κ³Όλ₯Ό λ°œνœ˜ν•œλ‹€.
    λ¦¬νŒ©ν„°λ§μ˜ 첫 번째 ν† λŒ€λŠ” μžκ°€ ν…ŒμŠ€νŠΈ μ½”λ“œλ‹€. λ˜ν•œ νŒ€μœΌλ‘œ κ°œλ°œν•˜λ©΄μ„œ λ¦¬νŒ©ν„°λ§μ„ ν•˜λ €λ©΄ 각 νŒ€μ›μ΄ λ‹€λ₯Έ μ‚¬λžŒμ˜ μž‘μ—…μ„ λ°©ν•΄ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ μ–Έμ œλ“ μ§€ λ¦¬νŒ©ν„°λ§ ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

  1. λ¦¬νŒ©ν„°λ§κ³Ό μ„±λŠ₯
    λ¦¬νŒ©ν„°λ§μ€ μ„±λŠ₯ 쒋은 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§Œλ“œλŠ” 데 κΈ°μ—¬ν•œλ‹€. λ‹¨κΈ°μ μœΌλ‘œ 보면 λ¦¬νŒ©ν„°λ§ λ‹¨κ³„μ—μ„œλŠ” μ„±λŠ₯이 느렀질 μˆ˜λ„ μžˆλ‹€. ν•˜μ§€λ§Œ μ΅œμ ν™” λ‹¨κ³„μ—μ„œ μ½”λ“œλ₯Ό νŠœλ‹ν•˜κΈ° 훨씬 μ‰¬μ›Œμ§€κΈ° λ•Œλ¬Έμ— κ²°κ΅­ 더 λΉ λ₯Έ μ†Œν”„λ“œμ›¨μ–΄λ₯Ό μ–»κ²Œ λœλ‹€.

  1. λ¦¬νŒ©ν„°λ§μ˜ 유래
    λ¦¬νŒ©ν„°λ§μ€ μ›Œλ“œ 컀닝햄과 μΌ„νŠΈ 벑이 슀λͺ°ν† ν¬λ₯Ό ν™œμš©ν•΄ κ°œλ°œν•˜λ©΄μ„œ μ€‘μš”μ„±μ„ κΉ¨λ‹¬μ•˜κ³ , 슀λͺ°ν† ν¬μ˜ 역동적인 ν™˜κ²½κ³Ό 객체 μ§€ν–₯ μ–Έμ–΄μ˜ νŠΉμ§•μ„ 톡해 λ¦¬νŒ©ν„°λ§μ΄ 생산성을 λ†’μ΄λŠ” 데 큰 역할을 ν•œλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€.

  1. λ¦¬νŒ©ν„°λ§μ˜ μžλ™ν™”
    μžλ™ λ¦¬νŒ©ν„°λ§μ€ λ¦¬νŒ©ν„°λ§μ„ μ§€μ›ν•˜λŠ” 도ꡬ가 λ“±μž₯ν•œ κ°€μž₯ 큰 변화이닀. μžλ™ λ¦¬νŒ©ν„°λ§μ€ 개발 도ꡬ가 μ²˜λ¦¬ν•˜λ©° μ•ˆμ •μ μ΄λ‹€. ν˜„μž¬λŠ” μ—λ””ν„°λ‚˜ 독립 λ„κ΅¬μ—μ„œλ„ μžλ™ λ¦¬νŒ©ν„°λ§μ΄ ν”ν•˜κ²Œ 제곡되며, 정적 νƒ€μž… μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄ 더 μ•ˆμ „ν•˜κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€. IDEλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 효율적이며, μ–Έμ–΄ μ„œλ²„ κΈ°μˆ λ„ λŠ˜μ–΄λ‚˜κ³  μžˆλ‹€.

LIST