-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[오치현] 1차 과제 제출 #9
base: develop
Are you sure you want to change the base?
Conversation
- Factory Pattern 적용
- 함수명 변경 : findNameToEnumIn -> from - 인자 변경 : String itemName -> Item item
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 상수화하는 습관을 들여야겠다고 생각했습니다. 잘 읽었습니다.
&& !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { | ||
if (items[i].quality > MINIMUM_QUALITY.getValue()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
상수화하는 습관은 정말 좋은 것 같습니다.
다만, 개인적으로 static 변수로 사용하는 것이 더 깔끔할 것 같습니다. 참고만 해주세요!
commit 메세지를 잘 써주셔서, 어떤 변경이 이루어졌는지 파악하기 편했습니다. |
커밋 컨벤션 관리하신 게 굉장히 인상적이에요! 주로 어떤 기준으로 Commit 단위를 지정하시나요? |
상수를 패키지로 관리하는 부분이 인상깊었습니다. 이외에도 팩토리를 통해서 코드를 잘 분리하신 것 같아요! 커밋컨벤션도 많이 배워갑니다 |
public static ItemNameConstant from(Item item) { | ||
return Arrays.stream(ItemNameConstant.values()) | ||
.filter(modifier -> item.name.contains(modifier.name)) | ||
.findFirst() | ||
.get(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 stream을 사용하는 부분에 대하여 생각하지 못했는데, stream을 사용한 것을 보니 코드에 대한 가독성이 좋아서 읽기가 편했습니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분을 보고 감탄했습니다. stream으로 쓰니 가독성이 정말 좋네요.
@@ -0,0 +1,19 @@ | |||
package com.gildedrose.constant; | |||
|
|||
public enum ItemPropertyConstant { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드에서 자주 사용되는 값들을 상수화한 것을 보니 추후 코드 변경이 이루어질 경우 유지 보수하기가 편할거 같다는 생각이 듭니다.
import java.util.concurrent.ConcurrentHashMap; | ||
|
||
public class UpdateFactory { | ||
private final Map<ItemNameConstant, Update> updateMap = new ConcurrentHashMap<>(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Map 방식은 생각해보지 못했는데, 이러한 방식을 통해 각각의 Item 값에 따라 해당하는 Update 함수를 제공할 수 있도록 작성하셔서 인상 깊게 보았습니다. 이렇게 작성을 하게 되면 추후에 코드를 확장하기도 용이하다는 생각이 듭니다
@Override | ||
public void update(Item item) { | ||
if (item.sellIn <= BACKSTAGE_DAY_OF_5.getValue()) { | ||
item.quality = Math.min(item.quality + 3, MAXIMUM_QUALITY.getValue()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
숫자의 크기를 비교하는 Math 함수의 메소드 코드가 반복되고 있는데 이런것들을 함수화해서 코드를 간소화하는 것도 좋은 방법일 거 같아요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
구현하면서 고민했던 부분인데 짚어주셔서 감사해요!
리팩토링에서 찬민님이 말씀해주신대로 구현해봐야겠어요 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Map 방식을 활용하여 각 아이템마다 update함수를 관리하는 방식과 상수화 하는 방식들이 인상 깊었습니다. 수고하셨습니다!
import java.util.concurrent.ConcurrentHashMap; | ||
|
||
public class UpdateFactory { | ||
private final Map<ItemNameConstant, Update> updateMap = new ConcurrentHashMap<>(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
혹시 이 부분 왜 ConcurrentHashMap을 사용하셨는 지 궁금합니다!
처음 보는 자료구조라 알아봤는 데, 주로 스레드 안전, 멀티스레드에서 사용되는 자료구조라고 하더라구요!
다만, 제가 봤을 때는 updateMap은 서버가 실행되면 변경 작업이 없어 락이 걸릴 일이 없을 거 같아서, 의도가 궁금합니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
업데이트하면 아이템 값이 수정되어 동시성 문제가 발생할거라 막연하게 생각했는데, 말씀 듣고보니 업데이트 자체의 변경은 없는 것 같아요! 쓸 이유가 없었네요.
생각하지 못했던 부분 짚어주셔서 감사합니다 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 보고 정말 많이 배워갑니다~ 수고하셨습니다!
public static ItemNameConstant from(Item item) { | ||
return Arrays.stream(ItemNameConstant.values()) | ||
.filter(modifier -> item.name.contains(modifier.name)) | ||
.findFirst() | ||
.get(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분을 보고 감탄했습니다. stream으로 쓰니 가독성이 정말 좋네요.
주로 기능 단위로 작성을 하는데요, 기능이라고 하면 모호한 것 같아 곰곰히 생각해봤습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 잘 봤습니다!
item.quality = Math.min(item.quality + 1, MAXIMUM_QUALITY.getValue()); | ||
|
||
if (item.sellIn < SELLIN_CRITERIA.getValue()) { | ||
item.quality = Math.min(item.quality + 1, MAXIMUM_QUALITY.getValue()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Math 함수로 최댓값을 제한해서 구현하니 코드가 훨씬 깔끔하네요! 생각해보지 못한 방법인데 배워갑니다
public class BackstagePassesUpdate implements Update { | ||
@Override | ||
public void update(Item item) { | ||
if (item.sellIn <= BACKSTAGE_DAY_OF_5.getValue()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
남은 날짜를 상수화해서 작성하니 한눈에 알아보기 좋네요!
No description provided.