본문 바로가기

TIL(Today I Learned)

TIL-230921('행동대장' 코드리팩토링 - 마이페이지)

📝오늘 공부한 것

  • 실전프로젝트 - '행동대장' 코드리팩토링(마이페이지)
  • 자바의 정석 공부 - Chapter 08

 

📌 코드리팩토링 - 마이페이지 부분

 

⛔ 문제점 : 코드의 가독성 문제

MyPageController를 보면서 한 줄에 있는 코드의 길이가 너무 길어 스크롤을 이리저리 넘겨가며 코드를 읽어야 했다. 

모든 메서드의 길이를 동일하게 맞추는 것이 코드를 깔끔해 보이게 만드는 방법이라고 생각하여서 매개변수들을 한 줄에 작성하였다.

그러다 보니 긴 매개변수들의 내용은 한눈에 확인하기 어려웠다.

 

💯 해결

길이가 긴 매개변수들은 줄을 나누어 작성하였다. 이때 중요한 매개변수가 코드의 위쪽으로 올라오도록 하였다.

이렇게 줄을 나누어 작성하니 스크롤을 움직이지 않아도 한눈에 코드를 볼 수 있어 가독성이 좋아진 것을 느꼈다.


⛔ 문제점 : 응답의 일관성

User에게서 Request를 받을 때 모두 유효성 검사를 진행하였다. 

프로젝트를 진행할 때 프론트엔드분이 Email이 형식이 유효하지 않을 때는 메시지가 왔으면 좋겠다고 하셔서 Email에 대한 부분에만 메시지를 보내도록 했다.

어떤 요청은 유효성 검사 실패에 대한 메시지를 반환하고, 어떤 요청은 반환하지 않았다. 그러다 보니 일관성이 없는 응답이 발생했다. 

그런데 어떤 Request는 클라이언트에게 응답메시지를 반환하고 어떤 Request는 응답메세지를 반환하지 않아 응답의 일관성이 없다.

 

💯 해결

나머지에 대한 것들도 유효성 검사 실패 시 메시지를 보내도록 하여 모든 request에 대해 유효성 검사를 진행했을 때 일관된 방식으로 응답을 반환할 수 있도록 수정하였다.

또, 클라이언트에서도 어떤 요청이 실패했는 지를 알 수 있어 더 좋다고 생각했다.


⛔ 문제점 : 데이터 무결성의 유지

user로부터 데이터를 받아서 처리하거나 처리된 데이터를 전송하는 상황에서는 데이터의 무결성을 유지하는 것이 중요하다.  현재 모든 dto들은 class로 작성되어 있다.

 

💯 해결

record를 사용하여 간단하고 효율적으로 관리할 수 있도록 하였다.

record의 특징으로는

'멤버변수는 private final로 선언된다,

필드별 getter가 자동으로 생성된다,

모든 멤버변수를 인자로 하는 public 생성자를 자동으로 생성한다.' 등이 있다.

따라서, record를 사용하면 코드가 간단해져 가독성도 높아지고 별도의 접근자 메서드를 작성하지 않아도 된다.

또한, 중복된 코드도 줄이고 불변성도 보장되어 안전하게 데이터를 받고 처리할 수 있다.

단!! 기본 생성자는 필요시 직접 생성해야 한다.


⛔ 문제점 : 중복된 코드

현재 예외처리를 할 때 CommonException(ClientErrorCode.'각 에러코드')의 형식으로 처리를 한다.

그래서 ClientErrorCode가 계속 중복된다.

 

💯 해결

코드의 중복을 줄이기 위해 'ClientErrorCode'를 static import를 통해 가져와서 사용하였다.

코드를 간결하게 만들어 가독성을 더 향상시킬 수 있었다.

 static import를 사용하여

코드가 간단해졌다!


개선할 점💪🏻

코드의 최대 가로길이, 메서드길이 등도 코드컨벤션으로 정해야 한다는 것을 배웠다. 이전에는 폴더명, 패키지명, 메서드명 등에 대한 컨벤션만 정했었지만, 좋은 코드를 위해 다양한 컨벤션들도 신경 써야 한다는 것을 깨달았다. 앞으로는 팀원들과 함께 읽기 좋은 코드를 작성하기 위해 다양한 컨벤션을 정하고 지키도록 할 것이다.

이번 리팩토링에서는 dto를 class대신 record를 사용하여 만들어보았다. record를 잘 활용하면 코드가 간결해지고 가독성이 향상되며 데이터의 무결성을 더 쉽게 유지할 수 있다는 것을 배웠다. 다음부터는 데이터를 다루는 class를 만들 때, record를 잘 사용해 봐야겠다.

 

 

 

Reference :

https://docs.oracle.com/en/java/javase/14/language/records.html#GUID-6699E26F-4A9B-4393-A08B-1E47D4B2D263

 

Java Language Updates

JDK 14 introduces records, which are a new kind of type declaration. Like an enum, a record is a restricted form of a class. It’s ideal for "plain data carriers," classes that contain data not meant to be altered and only the most fundamental methods suc

docs.oracle.com