React 의 삼항연산자 가독성 높이기

golch's avatar
Aug 06, 2024
React 의 삼항연산자 가독성 높이기
 
상품 상세페이지에서 댓글 기능을 구현하였다. 댓글이 보이고 안보이는 로직을 만들었는데, React 의 태그부분에서 직접 로직을 구현하다 보니 로직이 잘 안보인다. 다 만들었다고 생각하고 테스트를 하던 중 역시나, 버그가 발견되었다.
문제점
  • 태그 부분의 코드가 길고, 삼항연산자로 표현하는데 한계가 있기 때문에 어떤 로직인지 한눈에 보이지 않는다.
해결방안
  • 상품 상세페이지의 길이가 너무 길어졌으므로 댓글 부분을 따로 떼어서 하위 component 로 만들자.
    • 불필요. 그렇게 하지 않아도 구현이 가능
  • 태그 부분을 변수로 만들어서 필요한 곳에 넣어주자(공통화).
    • 불가능. 보안에 취약함
  • 로직은 스크립트 영역에서 만들고, 태그 영역의 삼항 연산자는 결과값을 가지고 판별만 하도록 만들자.
그렇게 변경된 코드
// 스레드 안의 댓글작성 가능여부 const [isThreadMessagePossible, setIsThreadMessagePossible] = useState(false); // 스레드 밖의 댓글작성 가능여부 const [isMessagePossible, setIsMessagePossible] = useState(false); // 중략 if (userInfo !== null && userInfo !== undefined) { // 로그인 if (userInfo.userId === product.userId) { // 판매자 setIsThreadMessagePossible(false); setIsMessagePossible(true); } else { // 구매자 for (const item of resultList) { if (item.userId === userInfo.userId) { setIsThreadMessagePossible(true); } } if (!isThreadMessagePossible) { setIsMessagePossible(true); } } } // 또 중략, JSX(TSX) 부분 { isThreadMessagePossible ? <div>댓글 스레드 안에서 댓글 쓰는 부분</div> : <></> } { isMessagePossible ? <div>댓글 스레드 밖에서 댓글 쓰는 부분</div> : <></> }
이게 최선인지는 모르겠지만, 일단 중복코드도 줄어들고(완전히 없애지는 못했다.) 상대적으로 읽기 쉬워졌다. isLogin, isSeller 등 다른 여러 방법을 고민해봤으나, 이렇게 구현해서 태그 부분의 중복을 줄이는 것이 가독성이 제일 좋은것 같다.
코드를 만들다 보면 항상 ‘정상적으로 동작하는 상태’ 에서 만족하고 다음으로 넘어가려는 마음이 생기는것 같다. 조금만 복잡해져도 읽는데 문제가 생겨서 오류가 생기거나, 다음번에 (일주일쯤 지난 후에) 수정하려고 보면 이해가 어려운 경우가 있음에도 말이다. 일주일 후의 (혹은 더 미래의) 나를 위해서라도 가독성에 좀더 신경쓰는게 어떨까.
Share article

골치의 사람되는 블로그