Skip to content
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

Open
wants to merge 22 commits into
base: develop
Choose a base branch
from

Conversation

ch1hyun
Copy link
Member

@ch1hyun ch1hyun commented Oct 1, 2024

No description provided.

Copy link
Member

@hades3 hades3 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 상수화하는 습관을 들여야겠다고 생각했습니다. 잘 읽었습니다.

Comment on lines 15 to 16
&& !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
if (items[i].quality > MINIMUM_QUALITY.getValue()) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

상수화하는 습관은 정말 좋은 것 같습니다.
다만, 개인적으로 static 변수로 사용하는 것이 더 깔끔할 것 같습니다. 참고만 해주세요!

@hades3
Copy link
Member

hades3 commented Oct 6, 2024

commit 메세지를 잘 써주셔서, 어떤 변경이 이루어졌는지 파악하기 편했습니다.

@supsup-hae
Copy link
Member

커밋 컨벤션 관리하신 게 굉장히 인상적이에요! 주로 어떤 기준으로 Commit 단위를 지정하시나요?

@chaen-ing
Copy link
Member

상수를 패키지로 관리하는 부분이 인상깊었습니다. 이외에도 팩토리를 통해서 코드를 잘 분리하신 것 같아요! 커밋컨벤션도 많이 배워갑니다

Comment on lines 20 to 25
public static ItemNameConstant from(Item item) {
return Arrays.stream(ItemNameConstant.values())
.filter(modifier -> item.name.contains(modifier.name))
.findFirst()
.get();
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 stream을 사용하는 부분에 대하여 생각하지 못했는데, stream을 사용한 것을 보니 코드에 대한 가독성이 좋아서 읽기가 편했습니다

Copy link
Member

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 {
Copy link
Member

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<>();
Copy link
Member

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());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

숫자의 크기를 비교하는 Math 함수의 메소드 코드가 반복되고 있는데 이런것들을 함수화해서 코드를 간소화하는 것도 좋은 방법일 거 같아요

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

구현하면서 고민했던 부분인데 짚어주셔서 감사해요!
리팩토링에서 찬민님이 말씀해주신대로 구현해봐야겠어요 :)

Copy link
Member

@chanmin-00 chanmin-00 left a 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<>();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

혹시 이 부분 왜 ConcurrentHashMap을 사용하셨는 지 궁금합니다!
처음 보는 자료구조라 알아봤는 데, 주로 스레드 안전, 멀티스레드에서 사용되는 자료구조라고 하더라구요!
다만, 제가 봤을 때는 updateMap은 서버가 실행되면 변경 작업이 없어 락이 걸릴 일이 없을 거 같아서, 의도가 궁금합니다!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

업데이트하면 아이템 값이 수정되어 동시성 문제가 발생할거라 막연하게 생각했는데, 말씀 듣고보니 업데이트 자체의 변경은 없는 것 같아요! 쓸 이유가 없었네요.
생각하지 못했던 부분 짚어주셔서 감사합니다 :)

Copy link
Member

@goalSetter09 goalSetter09 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 보고 정말 많이 배워갑니다~ 수고하셨습니다!

Comment on lines 20 to 25
public static ItemNameConstant from(Item item) {
return Arrays.stream(ItemNameConstant.values())
.filter(modifier -> item.name.contains(modifier.name))
.findFirst()
.get();
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분을 보고 감탄했습니다. stream으로 쓰니 가독성이 정말 좋네요.

@ch1hyun ch1hyun closed this Oct 10, 2024
@ch1hyun ch1hyun reopened this Oct 10, 2024
@ch1hyun
Copy link
Member Author

ch1hyun commented Oct 10, 2024

커밋 컨벤션 관리하신 게 굉장히 인상적이에요! 주로 어떤 기준으로 Commit 단위를 지정하시나요?

주로 기능 단위로 작성을 하는데요, 기능이라고 하면 모호한 것 같아 곰곰히 생각해봤습니다.
깃을 사용하는 이유가 버전 관리이기도 하지만, 이전 상태로 돌아가기 위함임을 생각해봤을 때 이전 상태로 돌아간다는 것은 그 코드가 정상적으로 동작할 수 있어야 한다는 것과 같다고 생각해요.
이런 관점에서 하나의 기능을 구현하고 실행했을 때 올바르게 동작하면 Commit을 날리고 있습니다 ㅎㅎ

Copy link
Member

@0-x-14 0-x-14 left a 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());
Copy link
Member

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()) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

남은 날짜를 상수화해서 작성하니 한눈에 알아보기 좋네요!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants