Skip to content

[그리디] 이채현 Java:자동차 경주 미션 1,2 단계 제출합니다.#171

Merged
boorownie merged 27 commits intonext-step:chaehyunlfrom
chaehyunL:main
Mar 25, 2026
Merged

[그리디] 이채현 Java:자동차 경주 미션 1,2 단계 제출합니다.#171
boorownie merged 27 commits intonext-step:chaehyunlfrom
chaehyunL:main

Conversation

@chaehyunL
Copy link
Copy Markdown

No description provided.

Copy link
Copy Markdown

@2Jin1031 2Jin1031 left a comment

Choose a reason for hiding this comment

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

안녕하세요~ 채현님! 리뷰어 이진입니다 ~
빠르게 제출해주셨네요~

코드 잘 봤습니다! 👍 기능 구현을 열심히 하신 게 보이네요.

다음 리뷰 요청하시기 전에, 함께 해보면 좋을 것들을 공유드릴게요!

1. README 파일 작성하기

프로젝트의 첫인상을 결정하는 README 파일을 작성해보면 어떨까요? 😊

  • 채현님이 어떤 기능을 구현했는지 한눈에 이해할 수 있도록 작성해주시면 좋을 것 같아요!
  • 나중에 다른 사람들이 코드를 볼 때 큰 도움이 될 거예요.

2. 요구사항이 잘 동작하는지 확인할 수 있는 테스트 코드 작성하기

테스트 코드를 작성해보는 연습을 함께 해보면 좋을 것 같아요!

  • 프로젝트가 커지면 커질수록 테스트 코드의 진가가 보일 거예요
  • 추후 수정사항이 생기더라도 이전 요구사항들이 함께 영향받았는지 쉽게 확인할 수 있어요!

3. PR 본문에 궁금한 사항 남겨보기

PR 본문을 활용해서 리뷰어에게 질문하는 것도 연습해보면 좋을 것 같아요~

  • 채현님이 어떤 고민을 했는지, 어떤 생각으로 구현했는지 보여줄 수 있는 좋은 공간이에요
  • 궁금한 사항이 없을 수도 있고, 어떤 게 궁금한지 조차 모를 수도 있어요. 괜찮습니다!
  • 다른 사람들의 PR을 구경하면서 어떻게 질문하는지, 어떤 것을 궁금해하는지 보는 것부터 시작해봐요~

다음 리뷰 요청 주시면 함께 살펴보도록 할게요!

그리고 자바 코드 스타일 관련해서 함께 확인해볼 부분을 공유드려요! Java Style Guide > 한글 번역 - 1기 제이 에 들어가게 되면 아래와 같은 내용을 확인하실 수 있어요!

이 중 부분적으로 읽고 수정 방향성을 정리해봤어요~

Image
  • 현재 코드
public Car(String name){
  • 컨벤션에 맞게 수정 방향성 코드
public Car(String name) {

Image
  • 현재 코드
this.name=name;
  • 컨벤션에 맞게 수정 방향성 코드
this.name = name;

이 외에도 다른 부분들 함께 수정해주시면 좋을 것 같아요! 😊

참고로, 컨벤션 가이드는 처음부터 다 외우실 필요는 없어요. 코드를 작성하면서 자연스럽게 익숙해지실 부분이라 크게 부담 갖지 않으셔도 됩니다! (시간 되면 읽어볼까의 마인드 정도~)

💡 꿀팁: 코드 스타일은 아래 단축키를 통해 한 번에 정렬 가능합니다!

  • 윈도우: Ctrl + Alt + L
  • 맥: Command + Option + L

이 단축키를 사용하면 대부분의 포맷팅이 자동으로 맞춰지니까, 작성 후에 한 번씩 눌러주시면 편하실 거예요!

Comment thread src/main/java/Car.java
import java.util.*;

class Car {
String name;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

코드 잘 작성해주셨어요! 👍

지금 접근 제어자를 생략하고 작성해주셨는데요, Java에서는 접근 제어자를 명시하지 않으면 기본적으로 package-private(같은 패키지 내에서만 접근 가능)으로 설정돼요. 의도하셨다면 다른 접근 제어자 중에 default 방식을 사용하신 채현님만의 이유가 궁금합니다! (의도하지 않으셨어도 괜찮아요! 같이 이야기해보면 좋을 것 같아서 여쭤봤어요 😊)

참고로 Java의 접근 제어자 종류는 이렇게 있어요:

  • public: 모든 곳에서 접근 가능
  • protected: 같은 패키지 + 상속받은 클래스에서 접근 가능
  • (생략): package-private, 같은 패키지 내에서만 접근 가능
  • private: 같은 클래스 내에서만 접근 가능

이 부분 한번 고민해보시고, 코멘트 남겨주세요 🙌

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

CarTest 코드를 구현하기 위해서 public이 필요한데 이부분을 놓친 것 같습니다! 감사합니다.

import java.util.*;

public class GetWinners {
public static void getWinner(List<Car> cars) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

GetWinners 클래스를 별도로 분리해주셨네요~!

한 가지 참고할 점은, 자바에서는 일반적으로 클래스명은 명사로, 메서드명은 동사로 작성하는 것이 관례에요. 따라서 GetWinners(동사+명사)보다는 WinnerFinder, RaceResult, WinnerJudge 같은 명사형 이름을 고려해볼 수 있겠어요!

물론 정답은 없지만, 클래스가 "무엇"인지를 명사로 표현하면 코드를 읽는 사람이 그 역할을 더 명확하게 이해할 수 있다고 생각해서요! 한번 고민해보시면 좋을 것 같아요 ☺️

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

넵 수정하였습니다! 기존 클래스가 제가 보기에도 명확성이 떨어져서 RaceResult.java로 수정했습니다.

Comment thread src/main/java/Main.java
public static void main(String[] args) {

}
} No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Image

파일 끝에 "No newline at end of file"이라는 표시가 보이는데요, 이건 파일의 마지막 줄에 개행 문자(엔터)가 없을 때 나타나는 표시예요~
파일의 마지막 줄에서 Enter 한 번 눌러주시면 이 표시가 사라질 거예요!

작은 부분이긴 하지만, 컨벤션 중 하나이기 때문에 코멘트로 남겨봤어요~
대부분의 IDE(IntelliJ 등)는 저장할 때 자동으로 개행을 추가하도록 설정할 수도 있으니, 한번 찾아보셔도 좋을 것 같아요. 😊

Comment thread src/main/java/Car.java Outdated
this.position=0;
}
public void move(){
int roll=(int)(Math.random()*10);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

0에서 9 사이의 랜덤 값을 구하기 위해 Math.random()을 사용하고 int로 형변환까지 꼼꼼하게 처리해주셨네요! 로직이 정확합니다 👏

지금 방식도 문제가 있는 건 아니지만, 좀 더 학습측면에서 다른 방식을 소개해드리자면 Java에는 int 값을 직접 반환하는 랜덤 메서드도 있더라구요! 형변환 없이 바로 정수를 얻을 수 있어서 코드가 조금 더 간결해질 수 있답니다.

한번 직접 찾아보고 비교한 후 어떤 방식이 더 마음에 드는지 고민해보는 것도 좋은 학습이 될 것 같아서 코멘트 남겨봅니다🚀

Comment thread src/main/java/Car.java Outdated
}
public void move(){
int roll=(int)(Math.random()*10);
if(roll>=4){
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

코드 잘 봤습니다! 👍 요구사항을 읽고 구현해주신 부분이네요~

한 가지 함께 고민해보면 좋을 부분이 있어서 공유드려요. 현재 코드에서 4라는 숫자를 사용하고 계신데요, 지금은 채현님과 저 모두 요구사항 페이지를 확인해서 이게 "전진의
기준 값"이라는 걸 알고 있지만, 나중에 이 코드를 처음 보는 분들은 4가 무엇을 의미하는지 바로 파악하기 어려울 수 있을 것 같아요.

이런 숫자를 개발 용어로 매직 넘버(Magic Number) 라고 부르는데요, 보통은 이런 값들을 상수로 추출해서 의미 있는 이름을 붙여주는 방식으로 관리합니다. 😊

예를 들면 이런 식으로요:

  private static final int FORWARD_THRESHOLD = 4;

  // 사용할 때
  if (randomValue >= FORWARD_THRESHOLD) {
      // 전진 로직
  }

이렇게 하면:

  • 코드만 봐도 4가 무엇을 의미하는지 명확
  • 나중에 값을 변경할 때 한 곳만 수정하면 되어서 관리 용이

물론 프로젝트 규모나 팀 컨벤션에 따라 다를 수 있어요.
이번 기회에 한번 연습해보시면 좋을 것 같아서요! 어떻게 생각하시나요? 💭


public class GetWinners {
public static void getWinner(List<Car> cars) {
int far=0;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

far가 가장 먼 position을 의미한다는 의도를 파악했습니다!

변수 네이밍에 대해 함께 고민해보면 좋을 부분이 있어서 공유드려요. 일반적으로 변수명은 "그것이 무엇인지(명사)"를 나타내는 게 코드를 읽을 때 더 직관적이라고 알려져 있어요. 😊

물론 지금도 괜찮은 네이밍이라고 생각하지만, far는 형용사 형태라서 처음 보는 사람은 "무엇이 먼가?"라는 질문이 생길 수 있을 것 같아요. 명사형으로 바꿔보면 어떨까요?

예를 들면 이런 이름들을 고려해볼 수 있을 것 같아요:

  • maxPosition - 최대 위치
  • farthestPosition - 가장 먼 위치
  • leadingPosition - 선두 위치
  • topPosition - 최상위 위치

어떤 이름이 가장 의도를 잘 드러낼 수 있을지 한번 고민해보시면 좋을 것 같아 말씀드려봐요~

Comment thread src/main/java/Car.java Outdated
this.name=name;
this.position=0;
}
public void move(){
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

기능이 잘 동작하도록 구현하셨네요. 🤛

move 메서드를 보면서 함께 고민해보면 좋을 부분이 있어서 공유드립니다. 한번 질문을 드려볼게요

=> "move 메서드가 하는 일을 한 문장으로 설명한다면 어떻게 설명할 수 있을까요? 😊 "

제가 보기에는 이 메서드 안에 여러 책임이 함께 있는 것 같다는 생각이 들었어요.

"책임"이라는 표현이 처음에는 좀 모호하게 느껴질 수 있는데요, 이걸 이해하기 위해 제가 사용하는 방식의 질문을 소개해드려볼게요!

먼저 이 메서드에 대한 테스트 코드를 작성해보시면, 메서드가 실제로 몇 가지 일을 하고 있는지 더 명확하게 보일 거예요. 테스트 코드를 작성해주시면 다음 턴에서 함께 살펴보도록 할게요! 💭

이 과정을 통해 "단일 책임 원칙"에 대해 자연스럽게 이해하실 수 있을 거라고 생각해요.

@chaehyunL
Copy link
Copy Markdown
Author

저 혹시.. 자바 테스트 코드 작성이 감도 안잡혀서 그런데 혹시,, 참고할 강의나 책 추천해주실 수 있으실까요ㅠㅠ

@2Jin1031
Copy link
Copy Markdown

@chaehyunL

그리디 과정에서는 계산기 구현 미션을 건너뛰게 되어, 테스트 코드 작성에 대한 커리큘럼을 아직 접하지 못하셨을 것 같아요.
테스트 코드는 처음엔 낯설 수 있지만, 한번 익숙해지면 개발할 때 많은 도움을 받을 수 있더라구요!

제가 처음 접했을 때 많은 도움을 받았던 LMS 내의 자료를 추천해드릴게요:

LMS에 나와 있는 액션 플랜을 따라가다 보면 자연스럽게 익히실 수 있을 거예요.
클론 받으신 프로젝트 내에도 실습할 수 있는 액션 플랜이 준비되어 있으니, 한번 천천히 따라해보시면 좋을 것 같아요!

혹시 실습하시다가 막히는 부분이나 궁금한 점이 생기면 언제든 편하게 연락주세요! 😊

@2Jin1031
Copy link
Copy Markdown

3, 4단계를 한 번에 진행해 주셨다고 공유해 주셔서 말씀드린 대로 이 PR은 merge 진행하겠습니다~
고생하셨습니다!
추가적인 질문 있으시면 언제든 연락주세요 >

@boorownie boorownie merged commit 77fdd87 into next-step:chaehyunl Mar 25, 2026
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.

3 participants