은로그

    [Refactor] 리팩터링에 순서가 존재할까?

    완성된 프로젝트나 작성된 코드를 객체지향 프로그래밍을 적용해서 리팩터링 하려 한다. 리팩터링을 진행하려고 할 때, 어디서부터 시작하여 마무리해야 할까? 특별한 순서나 규칙, 절차는 존재하지 않는 것 같다. 하지만 리팩터링도 단계별로 적용하는 것이, 유지보수가 쉬운 형태로 만들어 나갈 수 있다고 생각한다. 단계별 프로그래밍, 작은 단위부터 기능을 구현한 경험을 바탕으로 리팩터링을 하기 전 점진적 단계를 구성해 보자. 단계별 프로그래밍 경험 + 리팩터링 단계 설정 1. 코드 이해 먼저 코드베이스를 깊게 이해하고 어떤 부분이 수정되어야 하는지 파악해야 한다. 요구사항을 정확히 준수한다. README를 재검토한다. 정상적인 경우, 예외적인 상황 정리 2. 테스트 추가 코드베이스에 예외 테스트가 부족하다면, 리팩..

    [Java] EnumMap 정리

    토이프로젝트를 진행하며 EnumMap을 사용하는 다른 코드들을 보았다. 기존에 나는 Enum을 사용할 때, Enum 내부에 변수를 추가하는 방식으로 사용하였었지만 Enum 타입을 Map 구조로 다루는 방식과 목적에 대해서 궁금해졌다. 따라서 EnumMap 구조와 장점 사용하는 방식에 대해서 알아보려고 한다. EnumMap이란? Java에서 특정 Enum 타입의 키를 사용하는 맵이다. (HashMap과 유사) 특히 Enum 상수를 효율적으로 다룰 수 있도록 최적화된 구현을 제공한다. 특징과 성능의 장점을 알아보자. 특징 Enum 타입만 key로 사용 가능한 특별한 Map이다. 해싱 과정이 필요 없어 HashMap보다 빠르다. null을 key로 넣는 경우 NullPointerException 발생 Enum..

    [우테코] 프리코스 4주차 '크리스마스 프로모션' 미션 회고록

    4주 차 미션은 크리스마스 프로모션 으로 이메일 형식의 요구사항이 전달되었습니다. 3주 차 미션과 동일한 학습 목표를 가졌고, 클래스 분리에 대해서 도움을 주는 예시와 요구사항이 추가 되었습니다. 추가된 요구사항은 UI와 도메인 로직을 나눠서 생각할 수 있도록 UI에 관한 클래스 예시였으며, 저는 도메인 분리에 초점을 맞춰야 한다는 생각이 들었습니다. 따라서 이번 미션에서는 도메인을 분리하는 것에 조금 더 깊이 이해할 수 있도록 이 전 주차에서 어려움을 겪었던 Java Enum 에 대해서 알아보는 것이 중요하다고 생각했습니다. 3주 차 미션에서 Enum 사용이 어려우셨다면 저와 같이 Java Enum 어떻게 사용해야 하는지 글로 정리하는 것을 추천드립니다 👍 저는 자동차 경주 미션에 다음과 같은 요구사항..

    [우테코] 프리코스 3주차 '로또' 미션 회고록

    3주 차 미션은 자동차 경주 미션이었습니다. 이번 미션에서 두 가지 추가 요구 사항이 생겼습니다. 클래스(객체)를 분리하는 연습 도메인 로직에 대한 단위 테스트를 작성하는 연습 3주 차 미션을 진행하기 전, 추가 요구 사항을 확인하고 구현한 자동차 경주 미션을 되돌아보니, 도메인 로직에 대한 단위 테스트가 작성되었는지 파악하기가 어려웠습니다. 그 이유 중 하나는 무엇을 테스트하는지 명확하게 알 수 없는 test 메서드 네이밍의 문제가 가장 컸다고 생각합니다. 그래서 2주 차 피드백과 동기들의 소통을 통해 이번 미션에서 추가로 신경 쓴 부분은 도메인 분리와 메서드를 분리할 때 일관적인 네이밍 규칙을 통해 가독성을 향상해 코드를 이해하는데 들이는 시간을 최소화해 보는 것으로 정했습니다! 적용한 Java 네이..

    [우테코] 프리코스 2주차 '자동차 경주' 미션 회고록

    2주 차 미션은 자동차 경주 미션이었습니다. 2주 차 미션을 진행하기 전, 1주 차 피드백과 동기들의 소통을 통해 이번 미션에서 가장 신경 쓴 부분은 일급 컬렉션 사용, 객체지향 설계 원칙을 따르도록 객체에게 책임과 역할을 부여하는 부분입니다. 일급 컬렉션이 무엇인지 궁금하시다면, 제가 정리한 일급 컬렉션을 보고 도움이 되시길 바랍니다! 기능 요구 사항을 복사하여 필요해 보이는 기능 목록 단위를 설정하고 순서대로 도메인과 그에 맞는 역할과 책임을 주는 형식으로 TDD 개발을 진행하였습니다. 이번 미션에서 추가된 요구 사항 중 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다. 의 요구사항을 신경 써서 기능 목록을 도메인 기준으로 필요한 기능들을 정리하여 작성하였습니다. 이번 미션에서 지난주..