Tany
백문이불어일Tany
Tany
전체 방문자
오늘
어제
  • 분류 전체보기 (197)
    • JAVA TPC (1)
    • JAVA (10)
    • CS (3)
    • SPRING (5)
    • DFS BFS (12)
    • SQL (7)
    • 알고리즘 정리 (76)
    • Git, Github (3)
    • 학습 계획 (36)
    • 코드스쿼드 학습일지 (19)
    • Servlet (5)
    • VPC (2)
    • AWS (4)
    • JPA (5)
    • 취미생활 (2)
    • 프로젝트 기록 (7)
      • Issue Tracker 삽질 기록 (5)
      • 당근마켓 API 서버 기록 (2)
      • 나만의 블로그 제작 기록 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • EC2
  • 백준
  • GIT
  • 면접을 위한 CS 전공지식 노트
  • 문자열
  • 이코테
  • 알고리즘
  • 주간 학습 계획
  • 재귀
  • dfs
  • hash
  • 자바
  • 정렬
  • JPA
  • 자료구조
  • 파이썬
  • MySQL
  • AWS
  • Stack
  • 이분탐색
  • MVC
  • java
  • JSP
  • BFS
  • github
  • 인프런
  • sql
  • 프로그래머스
  • 완전탐색
  • 해시

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Tany

백문이불어일Tany

[Issue Tracker Project] Switch - Case Refactoring
프로젝트 기록/Issue Tracker 삽질 기록

[Issue Tracker Project] Switch - Case Refactoring

2022. 11. 6. 22:09

출처) 짤봇 - https://jjalbot.com/jjals/D1PYZTxcX

 

 

 

기록 이유

이슈 내의 Milestone, Label, Assignee 를 수정하는 updateIssueRelated() 메서드에 Switch - Case 문 떡칠을 리팩토링하고 팀원인 검봉에게 공유하는 것을 깜빡하지 않기 위해 기록하게 되었다 🙂 기록 시작 ~

 

 

 

리팩토링이 필요한 로직

클라이언트에서 요청한 Issue 아이디, 어떤 것을 수정할 지 결정하는 Type, 해당 Type 의 아이디를 지닌 DTO 를 사용해서 Swith - Case 분기문을 통해 Type 을 확인한 뒤, Isse 아이디에 맞는 Issue Entity 를 수정하는 로직이다. 엄청 복잡한 로직은 아니지만 분기문을 IssueService 클래스에서 없애기 위해 인터페이스 추출 기법을 활용한 리팩토링을 시도해보았다.

 

Switch - Case 로 점철된 updateIssueRelated() 메서드

 

 

 


 

 

 

 

리팩토링 시작

먼저 전체적인 구성을 한 눈에 알아보자.

 

1. RelatedUpdateFactory

  - 타입을 받아 알맞은 Related 클래스를 생성하는 역할

 

2. RelatedUpdatalbe Integerface

  - 알맞은 Related 클래스가 생성되었다면, 해당 Issue 에 타입 내용을 수정하는 역할

 

전체적인 인터페이스 및 구현 클래스 구성

 

 

 

수정할 타입이 Milestone 인지 Label 인지 Assignee 인지에 따라 알맞은 클래스가 생성되어 기존 Issue 의 타입을 수정하는 방식으로 인터페이스 추출을 해보자.

SimpleRelatedUpdateFactory 클래스는 RelatedUpdateFactory 인터페이스를 상속받아 getRelatedType() 메서드를 구현한다.

getRelatedType() 메서드는 클라이언트가 요청한 타입을 받아 분기로 판단한 후 알맞는 클래스를 생성할 것이다.

각 Repository 는 타입에 따라 기존 Issue 의 타입을 수정하는 로직에서 사용하기 때문에 클래스 생성 시 인자로 넘겨줬다.

 

RelatedUpdateFactory 인터페이스와 구현체인 SimpleRelatedUpdateFactory 클래스

 

 

 

그리고 RelatedUpdatable 을 구현한 각 타입 의 구현 클래스에서 판단된 타입에 따라 Issue 를 다시 수정하도록 로직을 짜주자.

getRelatedType() 메서드의 결과로 알맞은 Related 클래스가 생성돼서 해당 Issue 의 타입 내용을 수정할 수 있을 것이다.

 

RelatedUpdatable 인터페이스와 구현체인 각 Related 클래스

 

 

 

 

이제 updateIssueRelated() 메서드를 확인해보면 ?

Swith - Case 문을 사용했을 때 보다 훨씬 깔끔해진 모습을 볼 수 있다 !

 

리팩터링 후 updateIssueRelated() 메서드

'프로젝트 기록 > Issue Tracker 삽질 기록' 카테고리의 다른 글

[Issue Tracker Project] Issue 전체 조회 시 N + 1 발생과 개선  (0) 2022.10.21
[Issue Tracker Project] 로그인 시 환경변수 이슈 발생  (0) 2022.09.07
[Issue Tracker Project] Object Mapper 에서 @Getter 와 기본 생성자의 역할 ?  (0) 2022.08.01
[Issue Tracker Project] JPA 연관관계 매핑 관련 이모저모  (0) 2022.07.15
    '프로젝트 기록/Issue Tracker 삽질 기록' 카테고리의 다른 글
    • [Issue Tracker Project] Issue 전체 조회 시 N + 1 발생과 개선
    • [Issue Tracker Project] 로그인 시 환경변수 이슈 발생
    • [Issue Tracker Project] Object Mapper 에서 @Getter 와 기본 생성자의 역할 ?
    • [Issue Tracker Project] JPA 연관관계 매핑 관련 이모저모
    Tany
    Tany
    내가 보려고 만드는 백엔드 기록장 Github https://github.com/juni8453

    티스토리툴바