본문 바로가기

리팩토링8

왜 코드 리팩토링을 수행해야 될까? 지극히 개인적인 생각으로 다른분들과 생각이 다를 수 있습니다. 들어가기 개발을 하면서 코드가 '다소 객체지향적이지 않다'는 느낌의 코드 나래비를 목격하는 경우가 더러 있다. 그럼 우리는 이따금씩 이런 생각이 든다. '이거 내가 좀더 객체지향스럽게 디자인패턴이나 적절한 메소드나 용어를 활용하여 고칠 수 있을 것 같은데?' 라고 말이다. 그리곤 코드를 수정한다. 그리고 배포한다. 과연 이 의식의 흐름대로 행동하는 것이 맞을까? 개발하고 있는 서비스에서 유사한 일이 나에게 반복적으로 발생했다. 이것은 과연 문제일까? 아닐까? 개발자로서 장인정신에 입각하여 당연히 해야되는 것은 아닐까? 나는 리팩토링을 통해 무엇을 얻고 싶었던 걸까? 어떤 코드를 보고 위에서 언급한 것처럼 의식의 흐름으로 고치던 리팩토링을 어느.. 2023. 9. 26.
[리팩토링] 다형성을 이용한 IF 문 제거하기 들어가며 코드를 통해 본격적으로 다형성을 이용한 IF 문 제거하기 를 들어가기 앞서, 왜 IF문을 제거해야 하는지 부터 이해해보자. IF 문을 제거해야 하는 이유로 2가지를 말할 수 있을 것 같다. 인지 과부하 OCP(Open closed principle) 인지 과부하 IF 라는 키워드를 사용하게 되면, 필연적으로 우리의 두뇌는 IF ELSE 을 고민하게 된다. if(...) { // do Something A } else { // do Something A else... } if 가 한 개일때는 우리의 두뇌는 문제 되지 않는다. 2가지의 경우의 수만 고민하면 된다. 여기에 if문을 중복으로 추가하게 되면 어떻게 될까? if(...) { // do Something A if (...) { // do S.. 2023. 5. 21.
변경을 가하기 두려울 정도로 코드가 복잡할 때, 우리는 어떻게 코드를 이해할 수 있을까? 아래 내용은 '레거시 코드 활용 전략 - 마이클 C. 페더스' 에서 발췌한 내용입니다. 우리는 개발을 하다보면 이런 상황을 겪고 합니다. 종종 이해하기 어려울 정도의 코드를 마주치기도 하고, 코드를 수정하려고 보니 겁이 나는 그런 상황이요. 우리는 이럴 때 어떻게 행동하게 되나요? 두려움을 이겨내고 코드 수정을 바로 이어가나요? 그렇게 했을 때 우리의 코드는 마치 비웃듯이 git rollback 을 하라고 소리치곤합니다. 그런 상황에서 써먹을 수 있는 간단하지만 강력한 방법을 소개하고자 합니다. 1. 노트와 스케치 활용하기 저도 자주 사용하는 방식인데, 어려운 코드보다는 도메인에 대한 이해도를 높이기 위한 수단으로 사용해왔습니다. 이해하고 싶은 코드의 도식화를 직접 그려보는 것입니다. 아주 단순하지만 강.. 2023. 4. 29.
안전하게 코드 리팩토링하기 - 1 안전하게 리팩토링하기 SOLID 원칙 중 DIP가 있다. 어떻게 하면 쉽게 리팩토링 할 수 있는지 간단하면서도 강력한 방법을 이야기해볼까 한다. 이것을 아래와 같이 변경한다고 해보자. public class LotteriesFactory { private final RandomNumberGenerator randomNumberGenerator; public LotteriesFactory(RandomNumberGenerator randomNumberGenerator) { this.randomNumberGenerator = randomNumberGenerator; } // 만약 많은 곳에서 해당 코드를 사용하고 있다면 어찌하겠는가 ???????? public String createNumber(){ retu.. 2022. 7. 24.
나쁜 냄새가 드는 한마디 "잠깐만요 코드좀 볼게요." "잠깐만요 코드좀 볼게요" 우리는 언제 이런말을 해봤을까요? 개발 업무를 하며 한번쯤은 우리가 말해봤거나, 반대로 누군가에 의해 들었던 말인데요. 오늘은 이 말이 의미하는 바에 대해서 이야기해보려 합니다. 근무하는 트레바리 테크유닛의 PE셀에서는 간단하면서도 도전적인 첼린지를 했습니다. 플랫폼 관련 업무만 하다 보니 프론트엔드 업무는 해본 적이 없었습니다. 그러다, 우연히 해볼 수 있는 기회가 생겨 약 3명의 개발자가 쿽하게 개발해볼 수 있는 기회가 생겼습니다. next.js 프레임워크에서 간단히 UI Form 이 변경되는 것이 이번 프로젝트의 목적이였습니다. 단, UI Form 이 보여지게 될 때 변경 전/변경 후 UI 가 특정 비지니스 로직에 따라 다르게 보여야만 했습니다. 특정 비지니스 로직? 이번.. 2022. 3. 6.
이력서 리팩토링 워크숍 강의 후기 이력서를 작성할 때는 가장 먼저 어떤 개발자가 되고싶은지 아는 것이 중요하다. 해당 워크숍을 진행하면서, 딱 한 가지 생각했으면 하는 것이 있다. "나를 채용해야 하는 이유는?" 강의를 듣는 내내 위 질문에 대한 답변을 고민하는 것이 중요했습니다. 위 질문에 대한 답변은 어떻게 되든 "회사에 직접적으로 기여할 수 있는 역량으로 어필해야 한다." 그러므로, 내가 가진 역량을 회사에 기여할 수 있는 내용이 무엇인지 고민해보자. -- 이력서는 누가 읽는가? 사람이 읽기 때문에 읽기 편해야 한다. 어떤 사람이 읽는가? 개발리더에게 매력적이어야 한다. 읽기 편해야 한다. 간결체로 써야 한다. 한 문장이 길어서는 안된다. 주어와 서술어가 명확해야 한다. 한 문단에는 하나의 주장만 담는게 중요하다. 마치 단일 책임의.. 2021. 7. 7.
Template Pattern(템플릿 패턴) VS Strategy Pattern(전략 패턴) Photo by Mike Meyers on Unsplash 들어가기 대부분의 디자인 패턴 책에서는 이 두가지를 비교해서 설명합니다. 왜 일까요? 이 두가지 패턴은 데이터를 은닉화 시켜 구현될 수 있도록 도와주는 패턴입니다. 각각의 쓰이는 상황은 다르지만, 결론부터 이야기하면 잘 짜여진 코드는 템플릿 패턴에서 전략 패턴으로 손쉽게 전환할 수 있고, 반대로 전략패턴에서 템플릿 패턴으로 손쉽게 변경가능하다고 합니다. 그럼 왜 그런지 한번 살펴봅시다. 템플릿 패턴이란 무엇인가? 하위 클래스에서 구체적으로 처리하는 디자인 패턴 개인적으로 패턴을 어렵게 생각하면 끝없이 어렵고 쉽게 생각하면 너무 쉽게 생각하는 경향이 있다고 생각합니다. 그런 예시로 템플릿 패턴도 포함됩니다. 부주제로 '하위 클래스에서 구체적으로 처.. 2020. 9. 27.
기본 타입에 대한 강박관념(primitive Obsession) 에 대한 이해 Photo by Miguel Bruna on Unsplash 리팩토링에 있는 책의 일부분을 저의 의견과 함께 발췌하여 적었습니다. 들어가기 "기본타입에 대한 강박관념" 이라는 개념은 객체를 처음 접하는 경우, 작은 특정 객체를 사용하는 것을 피하고 Primitive Type 만을 사용하려 하는 경향을 말합니다. 여기서 말하는 작은 특정 객체의 사용의 주요 장점은 기본 타입 클래스와 응용 클래스 간의 경계를 허문다는 점 에 있습니다. 그럼 작은 특정 객체라는 것은 어떻게 만드는 걸까? 우리는 이를 더 명시적이고 정확하게 표현하기 위해 행해져야 합니다. 가장 먼저 볼 것은, 데이터 값을 객체로 전환(Replace Data Value With Object) 데이터 항목에 데이터나 기능을 더 추가해야 할 때는 .. 2020. 9. 27.