⇒ 위의 학습을 통해 깨끗한 경계를 만들 수 있다. 테스트 케이스 작성 및 어뎁터 패턴을 사용하여 통제 불가능한 외부 코드보다 통제 가능한 우리 코드에 집중 및 의존하도록 하자.
외부 코드와 개발자 코드 사이의 경계를 확인할 수 있다. 다음 코드는 리액트 달력을 불러와 우리가 원하는 달력으로 보여주는 함수다.
function Calendar({ initialText, returnValue }: CalendarProps) {
const [selectedDate, setSelectedDate] = useState("")
// 수정 화면에서 넘어온 날짜 정의
useEffect(() => {
if (initialText) {
setSelectedDate(moment(initialText).format("YYYY-MM-DD"))
}
}, [initialText])
// 날짜가 클릭되었을 시 선택된 날짜 설정 및 값 리턴
const onChange = (selectedDate: Date) => {
setSelectedDate(moment(selectedDate).format("YYYY-MM-DD"))
returnValue(moment(selectedDate).format("YYYY-MM-DD"))
}
return (
<>
<h3>{"날짜를 선택해주세요."}</h3>
<ReactCalendar
className="react-calendar"
value={selectedDate ? new Date(selectedDate) : null}
onChange={(parameter: Date) => onChange(parameter)}
/>
<h3>{"선택된 날짜: " + selectedDate}</h3>
</>
)
}
이를 보면 첫 번째로, 여러 케이스에 대응하여 범용성을 높인 리액트 달력 모듈을 사용하여, 개발자 앱에 집중한 다른 달력 함수를 만든 것을 볼 수 있다. 개발자가 사용하기 위하여 initialText, returnValue의 두 매개변수를 부여하였고, 앱에 최적화하여 변수를 입력받는다. 또한, onChange 함수를 작성하여 개발자가 원하는 동작을 하게끔 강제한 것을 볼 수 있다.
기존 리액트 달력의 onChange는 날짜 매개변수를 출력하는 반면, 개발자는 출력된 날짜 매개변수를 이용하여 상태 값을 변경하거나 부모 컴포넌트에게 콜백을 해주는 기능을 볼 수 있다. 이는 오로지 현재 앱을 위한 것이므로, ‘외부 코드와 개발자 코드 사이의 경계’에서 외부 코드는 범용성을 생각하며 개발자 코드는 앱에 집중한다는 것에 대한 예시로 충분하다.
학습 테스트의 경우에는 실제 외부 모듈은 아니지만, 한 함수로 간단하게 예시를 들어보고자 한다.
export const isEmpty = (object: any) => {
return !Object.keys(object).length
}
만약 위와 같은 외부 모듈이 있다고 가정해보자. 개발자는 내부 코드를 모르는 상태에서 학습 테스트를 하기 위해 다음과 같은 노력을 할 수 있다.
등등 여러 방법을 시도함으로써 해당 함수의 사용법을 익힐 수 있다.
오늘은 외부/내부 코드 및 모르는/아는 코드 의 경계에 대해 알아보았다. 또한 외부 및 모르는 코드를 사용하기 위해서 시행할 수 있는 테스트 기법도 학습하였다. 코드를 작성하다보면 수많은 외부 모듈들을 사용해야한다. 이 때, 이들의 특성을 알고 개발자만의 코드로 사용하기 위해서 오늘 배운 경계를 다루는 방법을 사용하여 더욱 앱 개발에 최적화된 코드 작성을 기대한다.
댓글