우테코11 리팩터링(3) - 하다보니 보이는 것들 지난 글에 이어 리팩터링을 하다보니 보이는 것들에 대해 작성해보겠습니다. 리팩터링은 단순히 코드의 개선을 의미하지 않습니다. 코드가 개선되는 만큼 리팩터링한 개발자의 성장, 팀원의 성장으로 이어집니다. 제가 리팩터링하면서 볼 수 있었던 모든 성장, 개선에 대해 설명해보겠습니다. 리팩터링한 개발자의 성장 앞선 글들을 보았다면 리팩터링을 하기 위해 많은 과정을 거치는 것을 알 수 있을텐데요. 그 과정을 거치다보면 자연스럽게 타인이 작성한 코드를 이해하는 능력이 길러집니다. 물론 매 PR마다 코드리뷰를 진행하지만 코드 리뷰를 하는 것과 직접 팀원이 개발한 코드를 사용하는 것은 정말 다른 일입니다. 위 PR의 64개의 comment 중 절반 이상을 제가 달았음에도 막상 직접 사용하려 할 때는 이 코드를 작성한 .. 2022. 9. 25. 리팩터링(2) - 문제 해결하기 지난 글에서 리팩터링의 필요성을 직접 느끼고 문제 상황을 정의한 경험을 공유했습니다. 이번 글에서는 문제를 어떻게 해결해나갔는지에 대해 작성해보겠습니다. 1. 각 도메인 코드와 알람 코드 분리 리팩터링하기 이전의 코드도 의존관계는 단방향으로 잘 흐르고 있었습니다. 각 도메인에서 알람을 참조하는 형태로 이뤄졌고, 알람은 외부 도메인에 대한 정보가 전혀 없었습니다. 덕분에 의존성에 대한 문제는 전혀 존재하지 않았습니다. 다만 각 도메인에서 알람을 전송하기 위한 코드들이 많이 있었고 이를 도메인에서 떼어내기 위해 여러 고민을 했고 최종적으로 도메인 이벤트라는 방법을 선택하게 됐습니다. 도메인 이벤트를 사용하면 다음과 같은 장점이 있었습니다. 절차지향의 코드를 객체지향 코드로 전환할 수 있다. 외부 패키지와의 .. 2022. 9. 24. 리팩터링(1) - 필요성과 계획 수립 리팩터링(2) - 문제 해결하기 리팩터링(3) - 하다보니 보이는 것들 안녕하세요. 이번 시리즈는 우아한테크코스 쿠폰 문화를 관리하는 땡쿠의 코드를 리팩터링하며 겪은 경험을 정리하고자 작성하였습니다. 땡쿠 서비스는 쿠폰을 주고 받고, 예약을 요청하고, 예약을 승인하면 만남이 생성되는 주요 흐름이 있고 부가적으로 재미요소인 마음 보내기라는 기능이 있습니다. 모든 상호작용 과정에는 알람이 생성되고, 우아한테크코스 슬랙 그룹으로 알람을 전송하게됩니다. 그 중 저는 기존의 알람서비스를 리팩터링하였는데요. 이번 포스팅은 리팩터링의 필요성과 계획 수립에 대해 작성해보겠습니다. 필요성과 코드 이해 사실 가장 먼저 물음을 가져야 할 부분은 리팩터링하는 이유였습니다. 이미 서비스에 배포도 되어있고 문제 없이 잘 굴러가고.. 2022. 9. 24. [Java] Stream docs 훑어보기 로또 미션을 진행하면서 의도적으로 Stream API를 사용하려고 노력했는데요. 지금까지 개념적 정립이 되지 않은 상태에서 Stream을 사용했다보니 어려움을 많이 겪었습니다. 오늘 포스팅에서는 Stream docs를 파헤쳐서 Stream에 대해 이해하고자 합니다. Stream이란? Stream은 컬렉션에서 map, reduce 처럼 요소의 스트림에 기능적 작업을 지원해주는 클래스입니다. int sum = widgets.stream() .filter(b -> b.getColor() == RED) .mapToInt(b -> b.getWeight()) .sum(); 위 코드를 보면, Collection의 인스턴스를 stream 소스로 변경하여 빨간색을 갖는 내부 객체의 무게 합을 구하는 reduction 과.. 2022. 2. 24. [Java] 인스턴스를 캐싱하여 성능 개선하기 (feat. 로또) 오늘 포스팅은 빈번하게 사용되는 인스턴스를 캐싱하여 성능을 개선하는 방법에 대해 작성해보고자 합니다. 정적 팩토리 메소드의 장점을 떠올리면 이름을 가질 수 있다 가 가장 먼저 떠오릅니다. 하지만 정적 팩토리 메소드에는 또 다른 장점이 존재합니다. 바로 자주 사용하는 인스턴스를 캐싱하여 성능을 개선하는 방법인데요. Integer 코드를 통해 이 내용을 확인해봅시다. public static Integer valueOf(int i) { if (i >= IntegerCache.low && i 2022. 2. 23. [Java] Enum타입 사용하기 다음 주부터 진행되는 로또 미션의 프로그래밍 요구사항에는 java enum을 적용해 프로그래밍을 구현한다. 라는 내용이 있습니다. 이번 포스팅에서는 enum 타입이 무엇이고, 어떻게 사용할 수 있을지 직접 코드로 작성해보는 시간을 갖고자 합니다. Enum을 사용하지 않으면 불편한 점? 왜 enum 을 사용해야 하는지 알아보기에 앞서 과거 enum을 모르던 시절 사용자 입력값에 대한 선택지를 변환하여 특정 로직을 실행시키던 코드를 살펴봅시다. 로직 실행에 큰 문제는 없어보입니다만.. 사용하는 측면에서 문제가 많습니다. 선택지가 변경되어 Yes가 1이 아닌 Hell Yes!! 가 1이 된다면? selection 비교시 실수로 1이 아닌 100을 비교하는 코드가 있다면? 이렇게 상수를 열거형으로 사용하게 되면.. 2022. 2. 19. 이전 1 2 다음