Youtube 클린코드 관련해서 좋은 컨퍼런스 영상이 있어서 보고 정리해 봤다. https://www.youtube.com/watch?v=edWbHp_k_9Y
실무에서 클린 코드의 의의
= 유지 보수 시간의 단축 (코드파악, 디버깅, 리뷰)
안일한 코드 추가의 함정
로직을 빠르게 찾을 수 있는 코드
액션 아이템
클린코드 = 원하는 로직을 빠르게 찾는 코드
선언적 프로그래밍 : 핵심 데이터만 전달받고 세부 구현은 뭉쳐 숨겨 두는 개발 스타일
<Popup
onSubmit={질문전송}
onSuccess={홈으로이동}
/> //'무엇'을 하는 함수인지 빠른 이해 가능
async function 함수이름은?()
{
const 약관동의 = await 약관동의_받아오기();
if (!약관동의) {
await 약관동의_팝업열기();
}
await 질문전송(questionValue);
alert("질문이 등록되었어요.");
}
handle질문제출
async function handle질문제출()
{
// 약관 체크 후 팝업
const 약관동의 = await 약관동의_받아오기();
if (!약관동의) {
await 약관동의_팝업열기();
}
// 질문 제출
await 질문전송(questionValue);
alert("질문이 등록되었어요.");
}
함수 이름에 중요 포인트가 모두 담겨 있어야 한다.
기능 추가 시 함수는 더욱 잡탕이 되어짐
리팩토링 Tip 1
한가지 일만 하는, 명확한 이름의 함수
async function handled연결전문가질문제출() {
await 연결전문가_질문전송(questionValue);
alert(`${연결전문가.name}에게 질문이 등록되었어요.`);
}
async function handled새질문제출() {
await 질문전송(questionValue);
alert(`질문이 등록되었어요.`);
}
async function handled약관동의팝업() {
const 약관동의 = await 약관동의_받아오기();
if (!약관동의) {
await 약관동의_팝업열기();
}
}
리팩토링 Tip2
한가지 일만 하는, 기능성 컴포넌트
// Before
// 버튼 클릭 함수에 로그 찍는 함수와 API 콜이 섞여 있다.
<button
onClick={async () => {
log('제출 버튼 클릭')
await openConfirm();
}}
/>
//After
//로그는 버튼을 감싼 컴포넌트에서 찍고, 버튼 클릭함수에서는 API콜만
//신경 쓴다.
<LogClick message='제출 버튼 클릭'>
<button onClick={openConfirm} />
</LogClick>
리팩토링 Tip3
조건이 많아지면 한글 변수도 유용하다.
//Level 0
<Button onClick={showConfirm}>
전송
</Button>
{isShowConfirm && (
<Confirm onClick={() => {showMessage("성공")}}/>
)}
//Level 1
<ConfirmButton
onConfirm={() => {showMessage("성공")}} >
전송
</ConfirmButton>
//Level 2
<ConfirmButton message="성공">
전송
</ConfirmButton>
//Level 3
<ConfirmButton />
답은 없습니다 상황에 따라 추상화를 해야한다. 추상화 수준이 섞여 있으면 코드 파악이 어려워진다. 추상화 단계가 비슷하게 정리.