리팩토링 개론

2019.09.03

박영준

다루는 내용

  • 리팩토링의 주요 원리
  • 리팩토링시 고려해야 할 점

1. 리팩토링은 무엇인가?

1. 리팩토링은 무엇인가?

현실에서는 두 가지 의미로 쓰인다.

1. 리팩토링은 무엇인가?

리팩토링(명사)

겉으로 드러나는 기능은 그대로 둔 채, 알아보기 쉽고 수정하기 간편하게 소프트웨어 내부를 수정하는 작업

  • 리팩토링은 주로 소프트웨어를 조금 수정하는 작업을 뜻함

리팩토링은 무엇인가?

리팩토링(동사)

리팩토링 기법을 연달아 적용해서 겉으로 드러나는 기능은 그대로 둔 채 소프트웨어 구조를 변경한다.

  • 몇 시간의 리팩토링 작업 중에 리팩토링 기법을 수십개 적용해야할 수도 있다.

리팩토링은 무엇인가?

리팩토링은 단순한 코드 정리보다는 더 포괄적인 개념

 

왜?

리팩토링으로 인해 코드 효율성이 높아지고 구조도 체계화 되기 때문

리팩토링은 무엇인가?

강조

  • 리팩토링의 목적은 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것. 성능 최적화와는 상반된다.
  • 리팩토링은 겉으로 드러나는 소프트웨어 기능에 영향을 주지 않는다.

리팩토링은 무엇인가?

켄트 벡의 '모자 두 개' 비유법

  • 기능을 추가할 땐 코드를 수정하지 말고 기능만 추가해야 한다.
  • 리팩토링 할 때는 코드를 추가하지 말고 코드 구조 개선만 해야 한다.

2. 리팩토링은 왜 해야 하나

2. 리팩토링은 왜 해야 하나

소프트웨어 설계가 개선되니까

2. 리팩토링은 왜 해야 하나

소프트웨어 설계가 개선되니까

  • 리팩토링은 구조가 산만해진 코드를 정리하는 작업
  • 코드의 처음 설계 구조를 유지하려면 정기적으로 리팩토링 실시
  • 설계를 개선하는 주요 비법 중 하나는 중복 코드를 없애는 것

2. 리팩토링은 왜 해야 하나

소프트웨어를 이해하기가 더 쉬워지니까

2. 리팩토링은 왜 해야 하나

소프트웨어를 더 이해하기 쉬워지니까

  • 리팩토링을 실시하면 코드는 더 파악하기 쉬워진다
  • 리팩토링을 실시하면 낯선 코드를 쉽게 이해할 수 있다.

2. 리팩토링은 왜 해야 하나

버그를 찾기 쉬워지니까

2. 리팩토링은 왜 해야 하나

버그를 찾기 쉬워지니까

  • 프로그램 구조를 명료하게 만들어서 전제들이 확실해지면 버그를 놓치는 것이 불가능하다.
  • 리팩토링을 통해 빈틈없는 코드를 훨씬 효과적으로 작성할 수 있다.

2. 리팩토링은 왜 해야 하나

프로그래밍 속도가 빨라지니까

2. 리팩토링은 왜 해야 하나

프로그래밍 속도가 빨라지니까

  • 깔끔한 설계는 소프트웨어 개발 속도를 적절히 유지하는 데 꼭 필요하다.
  • 리팩토링을 실시하면 시스템의 설계가 깔끔해지므로 소프트웨어 개발이 더 빨라진다.

3. 리팩토링은 어떨 때 필요한가

3. 리팩토링은 어떨 때 필요한가

같은 작업의 삼진 아웃 때

  • 어떤 작업을 처음 할 땐 그냥 하고, 비슷한 작업을 두 번째 해야 할땐 중복 작업이라 좀 망설여져도 그냥 하고, 세 번째 하게 되면 그 때 리팩토링을 실시한다.
  • 같은 작업을 3번째 반복하게 됐을 때 리팩토링을 실시하자

3. 리팩토링은 어떨 때 필요한가

기능을 추가할 때

  • 코드를 쉽게 만들기 위해서
  • 설계가 지저분해서 어떤 기능을 추가하기 힘들 때
  • 리팩토링을 하고 나면 나중에 훨씬 빠르고 쉽게 기능을 추가할 수 있다.

3. 리팩토링은 어떨 때 필요한가

버그를 수정할 때

  • 코드를 이해하기 쉽게 만들기 위해
  • 적극적으로 리팩토링 하고 나면 버그 찾기가 쉬워진다.
  • 버그 리포트가 입수되었을 때도 리팩토링해야 한다.

3. 리팩토링은 어떨 때 필요한가

코드리뷰를 할 때

  • 리팩토링을 하면 다른 사람이 개발한 코드를 리뷰하기도 쉬워진다.
  • 리팩토링을 하면 코드리뷰 결과도 더 구체적으로 나온다.

4. 리팩토링 관련 문제들

4. 리팩토링 관련 문제들

데이터베이스

  • 데이터베이스는 수정이 어렵다.
  • 객체 모델과 데이터베이스 모델 사이에 별도 소프트웨어 계층을 둔다.
  • 객체 모델의 일정 부분들이 변경될 가능성이 높다는 사실을 깨달았을 때 별도의 계층을 생성한다. 

4. 리팩토링 관련 문제들

인터페이스 변경

  • 인터페이스를 수정하면 무슨 문제가 생길지 알 수 없다
  • 상당수의 리팩토링이 인터페이스를 수정하는 작업
  • 기존의 인터페이스를 사용하는 부분이 변경에 맞춰 수정되기 전까지는 기존 인터페이스와 새 인터페이스를 모두 그대로 유지시켜야 한다.

Introduction to refactoring

By Young Jun Park (박영준)

Introduction to refactoring

리팩토링 개론

  • 191