1. 안 쓰는 코드는 삭제하자
기존 Gilded Rose 코드를 주석처리해서 남겨놓았던 부분을 삭제했다
2. 매직넘버를 잘 활용하자
매직 넘버를 잘 활용해서 보기 편했다는 코드 리뷰를 받았다 :)
아이템의 품질은 50을 넘길 수 없다(Sulfuras는 전설의 아이템이기 때문에 예외)는 조건이 있어서
MAX_QUALITY와 MIN_QUALITY를 매직 넘버로 관리했다.
매직 넘버로 관리하지 않으면
코드에 있는 숫자만을 보고 그 숫자가 무엇을 의미하는지 파악하기 어렵고
추후에 값을 수정하고 싶을 때 그 값이 쓰여진 모든 코드를 수정해야 하는 번거로움이 있기 때문에 매직넘버를 활용하면 좋다
public abstract class AbstractItemUpdateStrategy implements ItemUpdateStrategy {
protected static final int MAX_QUALITY = 50;
protected static final int MIN_QUALITY = 0;
...
}
3. 인터페이스와 추상클래스의 역할을 정확히 알고 사용하자
코드 리뷰에서 이부분에 질문을 많이 받았다..! 왜 추상클래스와 인터페이스를 동시에 사용한 건지 많이 물어봐주셨다
나는 인터페이스 - 추상클래스 - 구현클래스 디자인 패턴을 적용했다
모든 종류의 아이템은 매일 상태가 update 되어야 하는 건 공통적이다
update 메서드를 가진 인터페이스를 만들었다
public interface ItemUpdateStrategy {
void update(Item item);
}
하지만 아이템의 종류에 따라 update 되는 방식은 다르다
날짜가 지남에 따라 판매 기한과 품질이 변경되는 방식이 여러가지인데
판매 기한 감소, 품질 감소, 품질 증가 등의 메서드들이 적절히 사용되어야 한다
그래서 이 메서드들을 추상클래스에 구현했다
public abstract class AbstractItemUpdateStrategy implements ItemUpdateStrategy {
protected static final int MAX_QUALITY = 50;
protected static final int MIN_QUALITY = 0;
protected void increaseQualityLessThanMax(Item item) {
if (item.quality < MAX_QUALITY)
item.quality++;
}
protected void decreaseSellIn(Item item) {
item.sellIn--;
}
protected void decreaseQualityMoreThanMin(Item item) {
if (item.quality > MIN_QUALITY)
item.quality--;
}
protected void decreaseQualityTwiceAsFast(Item item) {
if (item.quality > MIN_QUALITY)
item.quality = Math.max(item.quality - 2, MIN_QUALITY);
}
}
그리고 실제 구현 클래스에서는 아이템 종류에 알맞게 update 메서드를 구현하는 방식으로 만들었다.
public class StandardItemUpdateStrategy extends AbstractItemUpdateStrategy {
@Override
public void update(Item item) {
decreaseSellIn(item);
if (item.sellIn < 0) {
decreaseQualityTwiceAsFast(item);
} else {
decreaseQualityMoreThanMin(item);
}
}
}
지금까지는 내 코드에 누군가가 질문을 할 일이 없었으니 대충 잘 돌아가게만 짜왔던 것 같다
처음으로 코드리뷰를 해보고 질문을 받아보면서
코드 하나도 근거를 가지고 왜 이렇게 짜는지 생각하는 기회가 되었다
질문을 받지 않았으면 그냥 넘어갔을법 한 중요한 개념을 다시 공부하게 됐다!
백엔드 파트장님이
코드 리뷰를 할 때는 "내가 어떻게 감히 남의 코드를 평가하냐"는 마인드를 갖는게 아니라
상대방도 질문을 받으면서 고민하고 성장할 수 있다고 강조하셨는데
이번 과제를 통해서 코드 리뷰는 함께 성장하는 기회라는 것을 제대로 깨닫게 되었다 ~~
https://github.com/u-genuine/10th-BE-Networking-1/tree/u-genuine/1
GitHub - u-genuine/10th-BE-Networking-1: 10기 백엔드 네트워킹 - 1
10기 백엔드 네트워킹 - 1. Contribute to u-genuine/10th-BE-Networking-1 development by creating an account on GitHub.
github.com
'BE & Spring' 카테고리의 다른 글
Spring에서 Bean 등록하는 2가지 방법 (0) | 2025.03.03 |
---|---|
[Java] 프로그래머스 - 가장 큰 수 (정렬) (0) | 2025.02.12 |
스프링 MVC에서 주로 사용하는 어노테이션 (0) | 2024.01.07 |