[Study] 우아한스터디 1주차 회고

박진우·2023년 11월 8일
2

우아한스터디

목록 보기
1/3
post-thumbnail

최근 우아한형제들에서 진행하는 우아한스터디 2023 윈터시즌에 정말 운좋게 합류하게 되었습니다!!👏
1주차가 진행된 날짜는 11월 4일 토요일이었는데요 :)
곧바로 회고록을 작성하고자 했지만 건강상의 문제로 인해 쭉 쉬게 되었습니다.🥺
늦었지만 주차별 회고록은 놓치고 싶지 않기에 남겨보도록 하겠습니다!

우아한 스터디 2023 겨울시즌❄️


이번에 제가 합류하게 된 스터디는 '내 코드가 그렇게 이상한가요?'스터디 입니다!
제목 그대로 '내 코드가 그렇게 이상한가요?'라는 책을 읽고 서로 궁금한점을 주제로 토론을 하는 활동입니다!
한달간은 책으로 토론을 진행하고, 나머지 한달은 서로의 코드를 리뷰해주는 시간도 가진다고 합니다 :)
너무너무 기대되는 스터디 활동이어서 정말 간절했는데 메일을 받고 온몸에 힘이 풀릴정도로 기뻤습니다🤗

첫 스터디 활동

그리고 11월 4일, 드디어 첫 스터디 활동을 하게 되었습니다!
이번 스터디는 멤버별 자기소개 및 책 1~3장을 읽고 모아진 질문 사항들을 바탕으로 QnA 시간을 가졌습니다.

그 중 제가 책을 읽고 들었던 의문점은 책 30페이지에 있었던 '변경하고 싶다면 새로운 인스턴스 만들기' 에 대한 내용이었습니다.

데이터 클래스의 멤버 변수에 final 키워드를 붙여 불변으로 만들고, 데이터 클래스 멤버 변수를 변경하는 것이 아닌 새로운 인스턴스를 생성하여 값 변동을 적용함으로써 예상치 못한 부수 효과를 없애는 것이 목표였습니다.

책의 내용을 조금 따라 적어보자면,

'그런데 불변이면, 아예 변경할 수 없는 것 아닌가?' 라고 생각하는 독자도 있을 것입니다. 하지만 방법이 있습니다. 인스턴스 변수의 내용을 변경하는 것이 아니라, 변경된 값을 가진 새로운 인스턴스를 만들어서 사용하면 됩니다.

// 코드 3.16 인용
class Money{
    
    // 책 내용에는 생략되어있지만, 후술할 코드를 위해 작성하였습니다.
    final int amount;
    final Currency currency;
    
    // 생성자 생략 
    Money add(final Money other){
        if (!currency.equals(other.currency)){
            throw new IllegalArgumentException("통화 단위가 다릅니다.");
        }
    
        final int added = amount + other.amount;
        return new Money(added, currency);
    }
}

제가 해당 내용을 보면서 들었던 의문점은,
"add() 메서드를 처리하게 된다면 결과적으로 세 개의 인스턴스가 존재하게 되고, 그 중 두 개의 인스턴스는 나중에 쓰이지도 않을텐데... 뭔가 비효율적이지 않은가?" 였습니다.

따라서 아래와 같이 질문사항을 슬랙 채널 스레드로 올리게 되었습니다!

이렇게 질문사항을 올리고, 스터디 당일 날이 되었습니다.

앞서 다른 멤버 동료분들의 질문에 대한 토론이 오고간 후, 제 질문 차례가 되었습니다.
제가 전달하고 싶었던 의문점에 대해 다시 한 번 명확하게 전달하였고, 스터디 리더님의 답변과 다른 멤버 동료분들의 추가 질문사항으로써 제 질문점은 해결되었습니다!

답변의 내용을 정리해보자면,

  • "성능에 좋지 못한 영향을 줄 수도 있을 것 같다" ➡️ 현업의 기준에선 백엔드는 서버를 늘리는 것이 더 싸게 먹힌다. 사람이 코드를 개선하는 경우는 GC(Garbage Collection) 때문에 장애가 날 가능성이 크다.

  • "불변 객체 최적화 방법" ➡️ converter 를 만들어서 불변 객체를 가변 객체로 변환하여 기능 처리를 한다. [port/adpater 패턴]

  • "데이터 클래스 특성 상, 외부에서 가변될 가능성만 지우면 될 것 같은데 private 접근제어자만 사용하면 안될까요?" ➡️ 접근제어자로 부수효과가 없게 사용하면 좋은데, 그렇지 못하는 경우를 많이 보았다.
    내가 money class 를 만들고 부수효과가 없게 사용하길 기원했지만, 한달 뒤에 다른 개발자 B가 기능 추가하면서 money class 안의 값을 조작하게 만드는 경우.

이와 같은 결론을 얻어낼 수 있었습니다...

1주차 스터디를 마치며...

여러가지 질문과 답변이 이어지는 가운데 제가 가장 안일했던 점은 '매우 개인적인 시점에서 생각했다' 였습니다.
이번 스터디 멤버로 많은 현업자분들이 계시다보니 학생인 제가 놓치고 있었던 협업 경험을 바탕으로 한 관점을 제대로 짚어주셨던 것 같습니다. 단순히 제가 혼자하는 프로젝트의 관점에서만 생각하고 시야를 넓히지 못했던 점이 살짝 부끄러웠던 순간이었네요 ㅎㅎ🫣

짧은 시간이었지만 다른 분들과 함께 공통된 사안을 가지고 의견을 나누는 시간을 가질 수 있다는 것만으로도 너무 행복한 순간이었습니다!
벌써부터 이번 주 주말이 기대되네요 ㅎㅎ

다음 주제도 열심히 준비해서 멤버분들과 소통하고 배워가는 시간을 가지면 좋겠습니다!

profile
꾸준히 한 발씩 발전해나가는 모습을 기록합니다.

1개의 댓글

comment-user-thumbnail
2023년 11월 10일

이번 스터디 같이 열심히 해봐요 진우님!
덕분에 좋은 자극 얻고 갑니다~😊

답글 달기