728x90
반응형
코드 리팩토링
리팩토링은 소프트웨어 개발 과정에서 코드를 재구성하고 개선하는 과정이다. 리팩토링의 목적은 코드의 가독성, 유지보수성, 재사용성, 성능 등을 향상시키는 것이며, 리팩토링은 기능을 변경하지 않으면서 코드의 내부 구조를 변경하여 코드의 품질을 개선하는 작업이라고 할 수 있다.
리팩토링을 하는 이유
- 코드 품질 향상: 리팩토링은 코드의 가독성과 유지보수성을 개선하여 버그를 줄이고 코드를 이해하기 쉽게 만듦.
코드의 품질을 향상시키고 오류 발생 가능성을 낮추는 데 도움이 된다. - 유지보수 용이성: 리팩토링은 코드를 구조화하여 모듈화하고 응집성을 높이는 등의 작업을 수행한다.
코드의 변경이 필요한 경우 해당 부분만 수정할 수 있으며, 다른 부분에 영향을 주지 않는 장점이 있다. - 재사용성 향상: 리팩토링은 중복 코드를 제거하고 기능을 재사용할 수 있는 구조로 개선하는 작업을 포함한다.
코드의 재사용성이 향상되며, 개발자는 기존의 코드를 재사용하여 새로운 기능을 빠르게 구현할 수 있다. - 성능 최적화: 리팩토링은 성능을 향상시킬 수 있는 구조로 코드를 변경할 수 있다.
예를 들어, 반복문을 최적화하거나 비효율적인 알고리즘을 개선하는 등의 작업을 통해 성능을 개선할 수 있다.
리팩토링은 보통 작은 단위로 수행되며, 기능을 변경하지 않는다는 점에서 테스트가 중요하다. 리팩토링을 수행하기 전에는 코드의 안정성을 확인하기 위해 테스트를 실행하고, 리팩토링 후에도 테스트를 다시 실행하여 기능의 정상 작동 여부를 확인해야 한다. 테스트를 통해 코드 변경으로 인한 오류 발생 가능성을 최소화할 수 있다.
리팩토링 코드 예시
- 리팩토링 전
package com.example.demo.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.model.TodoEntity;
import com.example.demo.persistence.TodoRepository;
import jdk.internal.org.jline.utils.Log;
import lombok.extern.slf4j.Slf4j;
@Slf4j //로깅
@Service
public class TodoService {
@Autowired
private TodoRepository repository;
public String testService() {
//엔티티 생성
TodoEntity entity = TodoEntity.builder().title("My first todo item").build();
//엔티티 저장
repository.save(entity);
//엔티티 검색
TodoEntity savedEntity = repository.findById(entity.getId()).get();
return savedEntity.getTitle();
}
public List<TodoEntity> create(final TodoEntity entity){
//Validations
if(entity ==null) {
Log.warn("Entity connot be null.");
throw new RuntimeException("Entity cannot be null.");
}
if(entity.getUserId()==null) {
Log.warn("Unknown user.");
throw new RuntimeException("Unknown user.");
}
repository.save(entity);
Log.info("Entity Id: {} is saved",entity.getId());
return repository.findByUserId(entity.getUserId());
}
}
위 코드에서 create라는 메서드는 검증과 작업을 하는데
create 뿐만 아니라 update, insert 등등 앞으로 생성할 메서드에서도 검증이 필요하다.
하나하나 다 적어주는 것보단 중복이 필요한 작업은 따로 메서드를 만들어줘서 쉽게 사용할 수 있게 만들어보자.
- 리팩토링 후
package com.example.demo.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.model.TodoEntity;
import com.example.demo.persistence.TodoRepository;
import lombok.extern.slf4j.Slf4j;
@Slf4j //로깅
@Service
public class TodoService {
@Autowired
private TodoRepository repository;
public String testService() {
//엔티티 생성
TodoEntity entity = TodoEntity.builder().title("My first todo item").build();
//엔티티 저장
repository.save(entity);
//엔티티 검색
TodoEntity savedEntity = repository.findById(entity.getId()).get();
return savedEntity.getTitle();
}
public List<TodoEntity> create(final TodoEntity entity) {
//Validations
validate(entity);
repository.save(entity);
log.info("Entity Id: {} is saved", entity.getId());
return repository.findByUserId(entity.getUserId());
}
private void validate(final TodoEntity entity) {
if (entity == null) {
log.warn("Entity cannot be null.");
throw new RuntimeException("Entity cannot be null.");
}
if (entity.getUserId() == null) {
log.warn("Unknown user.");
throw new RuntimeException("Unknown user.");
}
}
}
위 코드와 같이 validate 메서드를 새로 작성해주어 가져다 사용하게 만들었다.
이러한 방법을 사용하면 가독성이 좋고, 코드의 유지보수도 쉬워진다.
728x90
반응형
'개발 지식' 카테고리의 다른 글
[개발지식] 레드마인(PMS)이란? | 민민의 하드디스크 - 티스토리 (0) | 2023.07.12 |
---|---|
[개발지식] 롬복(Lombok)이란? | 민민의 하드디스크 - 티스토리 (0) | 2023.06.28 |
[개발 지식] Spring과 Spring boot란? | 민민의 하드디스크 - 티스토리 (1) | 2023.06.16 |
[개발 지식] SQL 인젝션(Injection)이란? | 민민의 하드디스크 - 티스토리 (0) | 2023.06.12 |
[개발 지식] var와 let에 대하여 | 민민의 하드디스크 - 티스토리 (0) | 2023.05.11 |