안녕하세요 프론트엔드 개발자 Garden, 오소현입니다:)
저는 요즘 항해 플러스 프론트엔드 3기 코스 과정에 참여하면서 공부하고 있는데요!
오늘은 그 2주차의 회고를 진행해보려고 합니다 !
우선 이번주차 과제는 " 프레임워크 없이 SPA 만들기 Part 2" 과제였습니다!
과제를 하면서 주요한 토픽이 있었는데 아래의 2가지를 한 번 보겠습니다 :)
createVNode(v1,v2)에 쓰이는 가상 노드의 속성들을 실제 DOM 요소에 반영하는 함수를 아래와 같이 개선해보았습니다.
이전의 이벤트 핸들러를 중앙에서 관리하는 방식으로 이벤트 위임을 했던 과거 버전의 applyProps 함수
1) 이벤트 핸들링 개선
처음에 구현했던 기존의 함수는 모든 이벤트 리스너를 문서의 루트에 추가하여 이벤트 위임을 사용하는 방식으로 구현되어있었기 때문에 이벤트 전파 과정에서 원하지 않는 이벤트 핸들링이 발생할 수 있었습니다. 지난 주차 멘토링에서 받았던 이벤트 전파에 대한 피드백을 반영하여,
각 요소에 필요한 이벤트만을 직접 등록함으로써, 불필요한 이벤트 전파를 방지하도록 이점을 개선했습니다.
2) 스타일 적용 방식에 대해 안정성 높이기
기존의 함수에서 스타일 객체를 직접 할당하는 방식은 오류 발생 시 전체 스타일 적용이 실패할 수 있다는 위험성을 가지고 있었습니다. 오류 처리 메커니즘이 없어, 잘못된 스타일 값이 적용 시도될 때 문제를 파악하기 어려웠습니다.
스타일 속성을 개별적으로 적용하면서, 각 스타일 적용 시도에서 예외를 캐치하고 오류를 출력하도록 이점을 개선했습니다.
3) 코드 일관성을 높이기
특정 속성에 대한 처리가 일관되지 않았던 기존에 함수에 대해 일관성을 높이고자 하였습니다.
className을 class 속성으로 일관되게 설정하고, 모든 속성을 setAttribute을 사용하여 처리함으로써 HTML 요소에 속성을 적용하는 방식을 표준화하였습니다.
위와 같이 코드를 개선하고자 노력했고, 개선한 부분에 대해 올바르게 구현했는지 궁금합니다! 개선한 코드는 다음과 같습니다.
현재 이전의 applyProps 함수가 가지고 있던 성능과 안정성의 문제를 개선한 applyPropsBatch 함수
이번주차 과제는 뚜렷하게 함수명과 그 기능에 대한 제시문이 꼼꼼하게 출제되어, 이를 반영하면서 구현하니 테스트 코드를 통과하며 과제를 마칠 수 있었습니다.
따라서 저는 테오 코치님의 게슈탈트 법칙으로 이해하는 클린코드: 가독성의 비밀 의 글을 보며, 좋은 코드를 만들기 위해 알아야할 3가지(좋은 모양, 좋은 구조, 좋은 이름)
을 반영하기 위해 이번주차 코드를 리팩토링하는 과정에서 이를 많이 신경써서 개발을 진행했습니다. (좋은 글을 작성해주셔서 다시한번 더 감사합니다 테오! Vv)
createElement에 사용되는 주어진 props
객체의 모든 속성을 DOM 요소에 일괄적으로 적용하는 함수를 applyPropsToElement
라는 함수명으로 작성했습니다. props 객체의 모든 속성을 하나의 DOM 요소에 적용한다는 것을 'to Element'라는 표현을 사용하여, 모든 속성을 특정 DOM 요소에 적용하는 일괄 처리 작업이라는 것을 내포하기 위해 위와 같이 네이밍을 하게 되었습니다.
createElement__v2에 사용되는 주어진 DOM 요소에 하나의 속성(key-value 쌍)을 적용하는 함수를 applyPropsBatch
라는 함수명으로 작성했습니다. "batch"가 "묶음으로" 속성을 적용한다는 의미를 가지고 있어서 함수가 하나의 속성 쌍(key-value)을 받아 처리한다는 것을 명확히 하고, 각각의 속성을 독립적으로 적용한다는 것을 내포하기 위해 위와 같이 네이밍을 하게 되었습니다.
둘의 네이밍을 위와 같이 생각해서 지어보았는데 좋은 코드를 작성하는 방향으로 잘 가고 있는지 궁금합니다!
코드의 일관성을 높이기 위해 다양한 고민을 해보았습니다.
조건에 필요한 모든 함수에서 if 조건문의 사용, 반복문 및 재귀적 호출 방식이 일관되도록 개선해보았습니다.
코드를 설명하기 위해 사용된 jsdoc의 형식을 @terms, @param, @returns 등을 일관되게 사용하여, 각 함수의 목적과 매개변수, 반환 값에 대한 설명을 표준화하고자 노력해보았습니다
특히 코드에 대해 일관성을 높이고자 하는 부분에 대해 좋은 코드를 작성하는 방향으로 잘 개선했는지 궁금합니다!
제 과제에서 더 일관성을 높이고자 한다면 어떤 방식으로 개선하면 좋을지도 궁금해요 👀
...
둘다 best Practice를 받았습니다 !!
테스트 코드 통과 뿐아니라, 실제 동작이 빠짐없이 잘 동작하며, 예외처리를 꼼꼼하게 한 점이 매우 잘 한 점으로 생각한다.
학습 자료를 더 이해해보자
학습 자료를 소화할 정도로 많은 시간을 투자해 읽어보고 학습해보자!!