[작년 문제 풀어보기] 5기 1주차 피드백

별의개발자커비·2023년 9월 11일
0

우테코 도전기

목록 보기
5/37
post-thumbnail

개요

드디어 우테코 뿌셔뿌셔 스터디 1주차가 지나갔다. 내가 부족한 부분을 발견하고 채우기 위해 시작한 스터디긴 한데, 내가 이렇게까지 부족한줄 몰랐달까...ㅎㅎ 하지만 비는 부분을 알면 채우는 건 자신있다! 어떤 부분을 채워넣을지 1주차에 알게된 점과 코드 리뷰를 통해 반영할 피드백을 정리해보려고 한다.


메소드 분리

1주차 문제가 알고리즘 문제 느낌이다보니 처음에는 그냥 알고리즘 문제풀듯이 for문 안에 또 for, 그안에 또 if 이런식으로 풀었는데, 작년 5기 피어리뷰들을 보니 메소드 분리를 1주차부터 깔끔하게 하셨더라. 그래서 초반에는 메소드 분리에 힘을 썼던 것 같다. 한 메소드에 한 기능만!


테스트 코드 활용

기본적으로 제공하는 ApplicationTest도 있지만 기능별로 테스트를 해보는 것도 시도해봤다.

AssertThat

그외

- assertThatThrownBy

- is Instance Of

- hasMessage

- @BeforeEach

: 이런 어노테이션을 테스트에 쓰면 한번만 입력할 수 있다
참고글

- List.of

  • 테스트 할 때 List = new arrayList 하지 않고 어차피 데이터를 수정할 거 아니니까 List.of를 쓰면 되네!


enum의 다양한 활용

생성자와 필드

values()

스터디원의 코드에서 enum의 모든 값들을 list로 반환해줄 수 있는 방법을 봐서 정리해본다.


객체 만들어 쓰기

처음에는 제시된 대로 list<list<String> 등을 받아 일단 구현했는데 리팩토링을 하다보니 get(index).get(0) 이런 식으로 name을 가져오는 것도 불편했고, 다른 속성(예:email)을 가져오기위해 반복문을 돌리는 경우도 있었다.

이런 경우 member 객체로 만들어 쓰는 것이 더 낫다는 깨달음을 얻음!


일급 컬렉션 - 원시값 포장

상속? 합성!

Comparator

reversed

thenComparing

다중조건정렬

RECOMMAND_LIST.sort(Comparator.comparing(User::getScore).reversed().thenComparing(User::getId));

public 지양

테스트를 위해 public으로 해놓은 메소드들!

  • private 메서드가 test 할 정도로 많은 로직을 가지면 객체 추출을 고민해보고,
  • private 메소드 테스트는 해당 메소드를 호출하는 public 메소드를 통한 간접 테스트를 하는 방식을 해야겠다.

자주 쓰이는 용어

digit number

십진수

fisrt digit

일의 자리 수


변수, 메소드명 명명

boolean 명명 규칙


상수화

클래스 내에서 바뀔 일이 없는, 공통으로 쓰는, 중요한 숫자들을 상수화하는 것도 시도해보았다.

  • 예를 들어 3, 6, 9 게임에서 판단의 기준이 되는 3과 같은 숫자들

valid 권한은 util? 객체?

validPageStart 로직을 validateUtil이 갖을 권한이 있을까? 왜냐면 페이지 속성이 마이너스가 들어올 수 있게 되었다면 페이지 객체에서 수정하는 게 맞지 않을까.라는 고민! 이건 일급 컬렉션과 내 메소드와도 관련이 있을 것 같다.

char (vs String)

string to char

char [] = word.toCharArray()

stringBuilder vs stringBuffer


Pattern 정규식

나중에 쓸 수 있을 것 같아서 일단 정리해놓기


Stream

다른 스터디원의 코드에서 이렇게 Stream으로 구현한 부분을 발견하고 나도 적용해보고자 했다.

FlatMap

Map

sorted

filter

forEach

디버깅


Map의 여러 메소드

생각보다 map 자체에 기능이 많았다. Stream의 기능과 비슷한 기능들이 map 자체에 있달까?

`compute() vs merge()

전체 출력 entrySet, keySet


기타 피드백

  • 상수화 적당히 : 필요없는 건 놔두기
  • 변수명 짧고 명시적이게!
  • for 잘 비교해서 stream 적절히 쓰기
  • static 남발하지 말기: 다른 곳에서 써야하는 경우만

스스로 피드백

2주차 미션때는

  • docs에 구현할 기능 목록 정리하고,
  • 그 기능별로 test 메소드 만들어 돌려서 확인하고
  • 그 기능 목록 단위로 커밋하기!

회고

또 또 나온다. 한 방법으로 어떻게든 해결하려고 하는 거. 상수화도 그렇고, 메소드 분리도 그렇고, stream도 그렇고. 생각하고 효율적이고 간결하게 짜려고 하자!

0개의 댓글