📖
Aaron's TECH BOOK
  • Intro
    • About me
  • Lecture
    • Kubernetes
      • Begin Kubernetes
    • Kafka
      • Begin Kafka
    • Kotlin
      • TDD, Clean Code Preview
      • woowa Kotlin
    • Java
      • Multithread Concurrency
      • The Java
    • Toby
      • Toby Spring 6
      • Toby Spring Boot
    • MSA
      • 01.Micro Service
      • 02.DDD 설계
      • 03.DDD 구현
      • 04.EDA 구현
    • Spring Boot
    • Spring Batch
    • Spring Core Advanced
    • Spring DB Part II
    • Spring DB Part I
    • JPA API and Performance Optimization
    • JPA Web Application
    • JPA Programming Basic
    • Spring MVC Part 2
      • 01.Thymeleaf
      • 02.ETC
      • 03.Validation
      • 04.Login
      • 05.Exception
    • Spring MVC Part 1
      • 01.Servlet
      • 02.MVC
    • Http
      • 01.Basic
      • 02.Method
      • 03.Header
    • Spring Core
    • Study
      • Concurrency issues
      • First Come First Served
      • Performance Test
      • TDD
      • IntelliJ
  • Book
    • Kafka Streams in Action
      • 01.카프카 스트림즈
      • 02.카프카 스트림즈 개발
      • 03.카프카 스트림즈 관리
    • Effective Kotlin
      • 01.좋은 코드
      • 02.코드 설계
      • 03.효율성
    • 이벤트 소싱과 MSA
      • 01.도메인 주도 설계
      • 02.객체지향 설계 원칙
      • 03-04.이벤트 소싱
      • 05.마이크로서비스 협업
      • 06.결과적 일관성
      • 07.CQRS
      • 08.UI
      • 09.클라우드 환경
    • 몽고DB 완벽 가이드
      • I. 몽고DB 시작
      • II. 몽고DB 개발
    • Kotlin Cookbook
      • 코틀린 기초
      • 코틀린 기능
      • ETC
    • Kotlin in Action
      • 함수/클래스/객체/인터페이스
      • 람다와 타입
      • 오버로딩과 고차 함수
      • 제네릭스, 애노테이션, 리플렉션
    • Kent Beck Tidy First?
    • 대규모 시스템 설계 기초
      • 01.사용자 수에 따른 규모 확장성
      • 02.개략적인 규모 추정
      • 03.시스템 설계 공략법
      • 04.처리율 제한 장치 설계
      • 05.안정 해시 설계
      • 06.키-값 저장소 설계
      • 07.유일 ID 생성기 설계
      • 08.URL 단축기 설계
      • 09.웹 크롤러 설계
      • 10.알림 시스템 설계
      • 11.뉴스 피드 시스템 설계
      • 12.채팅 시스템 설계
      • 13.검색어 자동완성 시스템
      • 14.유튜브 설계
      • 15.구글 드라이브 설계
      • 16.배움은 계속된다
    • 실용주의 프로그래머📖
    • GoF Design Patterns
    • 도메인 주도 개발 시작하기
      • 01.도메인 모델 시작하기
      • 02.아키텍처 개요
      • 03.애그리거트
      • 04.리포지터리와 모델 구현
      • 05.Spring Data JPA를 이용한 조회 기능
      • 06.응용 서비스와 표현 영역
      • 07.도메인 서비스
      • 08.애그리거트 트랜잭션 관리
      • 09.도메인 모델과 바운디드 컨텍스트
      • 10.이벤트
      • 11.CQRS
    • Effective Java 3/E
      • 객체, 공통 메서드
      • 클래스, 인터페이스, 제네릭
    • 소프트웨어 장인
    • 함께 자라기
    • Modern Java In Action
      • 01.기초
      • 02.함수형 데이터 처리
      • 03.스트림과 람다를 이용한 효과적 프로그래밍
      • 04.매일 자바와 함께
    • Refactoring
      • 01.리펙터링 첫 번째 예시
      • 02.리펙터링 원칙
      • 03.코드에서 나는 악취
      • 06.기본적인 리펙터링
      • 07.캡슐화
      • 08.기능 이동
      • 09.데이터 조직화
      • 10.조건부 로직 간소화
      • 11.API 리팩터링
      • 12.상속 다루기
    • 객체지향의 사실과 오해
      • 01.협력하는 객체들의 공동체
      • 02.이상한 나라의 객체
      • 03.타입과 추상화
      • 04.역할, 책임, 협력
      • 05.책임과 메시지
      • 06.객체 지도
      • 07.함께 모으기
      • 부록.추상화 기법
    • Clean Code
    • 자바 ORM 표준 JPA 프로그래밍
Powered by GitBook
On this page
  • 리팩터링 정의
  • 언제 리팩터링해야 할까?
  • 리팩터링 시 고려할 문제
  • 리팩터링과 성능
  • 참고 도서
  1. Book
  2. Refactoring

02.리펙터링 원칙

리팩터링 정의

[명사] '소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법'

[동사] '소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다.'
  • 리팩터링하면

    • 소프트웨어 설계가 좋아진다

    • 소프트웨어를 이해하기 쉬워진다 (버그를 찾기 쉬워진다)

    • 버그를 쉽게 찾을 수 있다

    • 프로그래밍 속도를 높일 수 있다

'보기 싫은 코드를 발견하면 리팩터링하자. 그런데 잘 작성된 코드 역시 수많은 리팩터링을 거쳐야 한다.''

언제 리팩터링해야 할까?

  • 준비를 위한 리팩터링 : 기능을 쉽게 추가하게 만들기

  • 이해를 위한 리팩터링 : 코드를 이해하기 쉽게 만들기

  • 쓰레기 줍기 리팩터링

  • 계획된 리팩터링과 수시로 하는 리팩터링

  • 오래 걸리는 리팩터링

  • 코드 리뷰에 리팩터링 활용하기

리팩터링 시 고려할 문제

  • 새 기능 개발 속도 저하

    • 리팩터링은 개발 기간을 단축하고자 하는 것이다.

    • 기능 추가 시간을 줄이고, 버그 수정 시간을 줄여준다.

  • 코드 소유권

    • 코드 소유권을 팀에 두는 것을 선호한다.

  • 브랜치

    • 팀원마다 코드베이스의 branch를 하나씩 맡아서 작업하다 결과물이 쌓이면 master branch에 통합해서 공유하자. (지속적 통합 적용, CI)

  • 테스팅

    • 자가 테스트 코드를 갖추자.

  • 레거시 코드

    • 테스트를 보강하자.

  • 데이터베이스

리팩터링과 성능

리팩터링은 성능 좋은 소프트웨어를 만드는 데 기여한다.

빠른 소프트웨어를 작성하는 방법

  • 시간 예산 분배 방식

    • 설계를 여러 컴포넌트로 나눠서 컴포넌트마다 자원 예산을 할당

  • 끊임없이 관심을 기울이자

  • 의도적으로 성능 최적화에 돌입하기 전까지 성능에 신경 쓰지 않고 코드를 다루기 쉽게 만드는 데 집중하자.

리펙터링과 최적화의 관계

  • 리팩터링을 잘 해두면 서능 튜닝에 투입할 시간을 벌 수 있다.

  • 리팩터링이 잘 되어 있는 프로그램은 성능을 더 세밀하게 분석할 수 있다.

참고 도서

Last updated 1 year ago

리팩터링 워크북
패턴을 활용한 리팩터링