220216 - TIL

Suntory·2022년 2월 16일
0

TIL

목록 보기
29/57

✅ 한 일

💻 수행한 것들

  • 자바 클래스 미션 3단계 구현하기
  • 다른 분들의 PR을 보며 리팩토링 후 그룹 리뷰 진행
  • 가벼운 저녁 산책
  • 운영체제 스터디 진행

📝 배운 것들

객체 분리

  • 미션을 구현하면서 객체를 분리하는 것이 미흡했는데 다른 분들의 코드를 보면서 역할을 쪼개서 클래스로 분리하는 것을 진행했습니다. 미션을 더 진행해나가면서 이건 따로 분리해도 되겠다 싶은 객체들은 적극적으로 더 분리해보려고 합니다.

코드 리뷰를 보며 얻은 것들

  • 클래스 이름과 메서드 명이 중복되는 것을 피하자.
    • 예를 들어 Ladder라는 클래스에서 사다리를 만들기 위해 createLadder 메서드를 만드는 경우가 있다. 이미 Ladder라는 클래스 내부에 있어서 의미가 중복되기 때문에 이 경우 create로만 적어도 충분하다는 피드백이 있었다.
  • 가능한 변경을 피할 수 있도록 느슨하게 결합하려고 노력하고, 가능한만큼 단위로 쪼개자.
    • 미션 3의 요구사항에 따라 사다리의 자료구조였던 기존의 Character 2차원 배열을 List로 단순히 수정해서 진행했다. 그런데 만약 또 자료구조가 바뀌면 어떻게 될까? 지금까지 만든 모든 관련 메서드를 다 수정해야 한다. 그러지 말고, 애초에 사다리를 객체로 만들어서 관리했다면 어땠을까? 라는 생각이 들었다.
      또, sammy의 말씀 중에서 왜 인터페이스를 사용해야 하는지에 대한 느낌이 온다는 부분도 느끼는 점이 있었다. 자주 변경될 것 같은 포인트를 강하게 결합하지 말고 다양한 방법으로 결합도를 낮추는 것을 고민해야겠다.
  • 변수와 메서드명 짓는 것에도 충실하자.
    • 가능한 줄임말을 쓰지 않는 것이 가독성에 좋다고 한다.
    • 직관적이고 어색하지 않도록 메서드명을 짓는 것이 중요하다.
  • enum은 단순히 상수를 저장하는 목적으로 사용하지 않는다.
    • 직접적으로 이번 미션에서 enum을 활용하지는 않았지만, 입력 메시지를 관리할 목적으로 enum을 쓰는 분들이 계셨다. 나도 생각했다면 그렇게 했을 것 같았는데, 리뷰를 하는 과정에서 적절하지 않은 enum의 활용이라고 하셨다. enum을 나중에 사용하게 된다면, 정확히 어떤 목적에서 등장하였고 어떻게 활용해야 효율적인지 더 조사를 해야겠다.

운영체제

  • 운영체제 스터디를 하면서 JayJun이 발표하신 내용을 들었습니다. 한 번 더 정리할 수 있는 좋은 기회였습니다. 추가로 운영체제 강의를 듣고 공룡책을 적극적으로 참고하면서 보충해나가려고 합니다. 연습문제도 솔루션을 구해서 간단하게 풀어보면 좋을 것 같습니다.

왜 나는 rebase하면 conflict이 발생할까?

  • 어제 맞닥뜨렸던 rebase 문제의 해결법은 대충 감을 잡았다. 대체 왜그런걸까? 하고 보니 아마도 다음과 같은 이유 때문인 것 같다.
  • 나는 PR이 통과되어 merge가 되기 전에 미션 3을 진행하였다. 그러다 merge가 되고 fetch를 해보니 아래와 같았다.

  • 현재 HEAD와 upstream 사이에 미션2의 커밋도 껴있는 것을 확인할 수 있다. (사실 왜 껴있는지는 확실히 모른다.. 아마 mission2에서 mission3를 만들었기 때문에 그런거라고 짐작은 하고 있다. 확실히 아시는 분이 있다면 댓글을 남겨주세요 !!)

  • 이 상황에서 rebase를 하게 되면, 미션 2의 커밋을 현재 내 미션 3 브랜치에 적용하려고 하기 시작한다. 그러면 미션 2에서 했던 파일과 미션 3의 내용이 충돌이 있다면 conflict가 당연히 발생한다.

  • 이 모든 conflict를 모두 해결하기가 귀찮아서, 다양한 방법이 있겠지만 git rebase --skip을 활용했다.

  • mission3을 만든 시점까지 모든 커밋을 건너뛰었다.

  • 그럼 자연스럽게 사진의 4bbc06c 부터 rebase가 완료된다.

  • 이제 내 원격저장소에 반영하기 위해 git push --force origin mission3를 한다. push --force를 하는 이유는 rebase를 하면서 커밋의 해쉬값이 바뀌었기 때문이다.

  • push가 완료되면 아래와 같아진다. upstream의 입장에서는 현재 자신의 상태위에 mission3가 올라간 상태이므로 base가 동일해서 conflict이 발생할 이유가 없다. PR 보낼 때도 이상이 없다.

    관련하여 아래와 같은 좋은 글들을 발견해서 참고하였다.
    git rebase를 이해하기
    [git] merge, squash & merge 그리고 rebase의 원리에 대해서 알아보자

💪 좋은 점

  • 계획표가 있어서 그나마 어떤 것을 해야될지에 대한 방향이 있었다.
  • 오늘은 차분하게 미션을 진행하였고, 어제 파악한 git에 따라서 PR도 성공적으로 날렸다.
  • 공부하면서 찾은 좋은 자료를 공유했다.

👀 아쉬운 점

  • 일찍 눈이 떠져서인지 피곤해서 저녁에는 크게 생산적이지 못했다.
  • 저녁먹고 방황하는 시간을 가졌다... 차라리 산책이라도 하자

🗒 개선 방향

  • 안대를 활용해서 정해진 수면시간을 숙면할 수 있도록 노력해보자.
  • 계획도 중요하지만 못지킬 것 같으면 빠르게 판단해서 푹 쉬거나 운동을 나가보자.
profile
천천히, 하지만 꾸준히 그리고 열심히

0개의 댓글