코드 리뷰 요약 및 권장사항
파일: src/main/java/controller/Application.java
문제: var 사용 일관성
- 리뷰어 의견: var 키워드 사용이 일관되지 않습니다. 코드 컨벤션을 표준화하여 var를 일관되게 사용하거나 아예 사용하지 않는 것이 좋습니다.
- 작성자 응답: var 사용에 익숙해질 때까지 사용하지 않기로 했습니다.
파일: src/main/java/controller/RaceGame.java
문제: 정적(static) vs 비정적(non-static) 변수
- 리뷰어 의견: 정적 변수와 비정적 변수의 차이에 대해 설명하고, RaceGame 인스턴스가 여러 개 필요할 때의 메모리 사용에 대해 강조했습니다.
- 작성자 응답: 정적 변수와 비정적 변수의 차이를 자세히 설명하며, 여러 인스턴스가 필요할 경우 정적 변수가 더 메모리 효율적일 수 있다고 강조했습니다.
문제:
코드 리뷰 요약 및 권장사항
문제: var 사용 일관성
- kokodak: var 자료형의 장단점은 무엇이 있을까요? 전반적으로 var 사용에 대한 통일성이 부족한 것 같아요. 코드 컨벤션을 한 방향으로 맞추는 것을 추천드립니다. ex) var를 사용한다 or 사용하지 않는다
- PlusUltraCode: 아직 var형을 쓰는게 익숙지 않아 사용하지 않는 방향으로 바꿔보겠습니다.
문제: static vs non-static 변수
- kokodak: 위의 코드와는 무엇이 다른지 설명해 주세요! 또한, 만약 서로 다른 RaceGame이 두 개 이상 필요하다면 어떻게 될까요?
- PlusUltraCode: 자바의 클래스는 한 번만 메모리로 로드됩니다. static으로 선언하게 되면 static 영역에 저장되어 클래스가 끝날 때까지 계속 존재하게 됩니다. static이 아닌 변수를 new로 객체를 생성하게 되면 heap 영역에 저장되어 가비지 컬렉터에 의해 자동으로 관리됩니다. 이러한 특징으로 객체를 생성하지 않고 여러 객체가 해당 변수나 함수에 접근이 가능합니다. 여러 개의 RaceGame 객체를 생성하게 되면 static으로 선언하지 않은 모든 변수들 또한 메모리에 상주하게 되므로 메모리 공간적으로 비효율적일 수 있습니다.
문제: 생성자 로직
- kokodak: 이 코드 블록은 RaceGame의 생성자 블록인데요! 생성자는 말 그대로 객체의 생성을 책임지는 곳이라고 생각해요. 지금은 객체의 생성과는 상관없는 많은 로직들이 들어가 있는 것으로 보이는데, 동호님은 어떻게 생각하시나요?
- PlusUltraCode: 만들 때는 의식하지 못했는데 다시 보니 객체를 생성하고 그에 더해서 게임을 진행하고 게임 승자까지 만드는 코드들이 섞여 있네요. 개별적으로 분리해서 작성했어야 했는데 앞으로는 의식하고 코드를 작성하겠습니다.
문제: 코드 포맷팅
- kokodak: 사소하지만, 공백에 대한 컨벤션도 잘 지켜주세요!
- PlusUltraCode: 넵!! 수정했습니다.
문제: 문자열 덧셈 연산
- kokodak: String에서의 덧셈 연산은 리소스 관점에서 상당히 비효율적일 수 있어요. StringBuilder나 StringBuffer를 키워드로 검색해보시고, String에서의 덧셈 연산이 왜 비효율적인지 저에게 알려주세요!
- PlusUltraCode: String은 한 번 생성하게 되면 불변 특성 때문에 문자열을 더하거나 수정할 때마다 새로운 String 객체를 생성한다고 합니다. 이러한 작업은 메모리에 많은 부담을 줄 수 있습니다. 해결책으로 StringBuilder와 StringBuffer가 있습니다. StringBuilder는 단일 스레드 환경에서만 사용해야 하고, StringBuffer는 멀티 스레딩 환경에서도 사용할 수 있습니다. 단일 스레드 환경에서는 StringBuilder가 속도 측면에서 이득입니다.
문제: Setter 메서드
- kokodak: setter 메서드를 만드는 것은 지양해주세요. 외부에서 필드 값을 함부로 수정하는 것을 막기 위해서 필드의 접근 제어자를 private으로 감춰놓으신 것 같아요. 하지만 setter 메서드가 존재하는 한, private 접근 제어자의 의미가 많이 퇴색될 것 같아요!
- PlusUltraCode: 습관적으로 만들었는데 생각해보니 private의 의미가 퇴색될 것 같습니다. setter를 사용하지 않고 생성자에서 초기화하는 방식으로 습관 들이겠습니다.
결론
코드 리뷰를 통해 var 사용의 일관성, static vs non-static 변수의 차이, 생성자 로직의 분리, 문자열 덧셈 연산의 비효율성, 그리고 setter 메서드의 사용에 대해 배웠습니다. 앞으로는 이러한 피드백을 반영하여 더 나은 코드를 작성하도록 노력하겠습니다.
'멋쟁이사자처럼 동아리 > 코드 리뷰' 카테고리의 다른 글
코드 리뷰 리뷰어 : 이동호 로또 미션 (0) | 2024.06.22 |
---|---|
코드리뷰 리뷰어 : 이동호 Spring MVC (0) | 2024.06.22 |
코드리뷰 Spring Core (0) | 2024.06.22 |
코드리뷰 Lotto mission (0) | 2024.06.22 |
코드리뷰 Spring MVC (0) | 2024.06.22 |