3주 차 미션의 학습 목표는 클래스 분리, 단위 테스트를 시작해보는 것이었습니다. 이 학습 목표는 4주 차까지 이어지기 때문에 아직 어렵더라도 너무 걱정하지 않으셔도 됩니다. 더 좋은 코드를 작성하는데 점진적으로 익숙해지는 과정이라고 생각해 주세요.
6기 레벨 1 웹 프론트엔드 교육 코치 크론이 진행한 피드백 강의 영상을 공유드립니다. 1주 차에는 Java 언어로 진행한 영상을 공유했지만, 이번에는 자바스크립트를 사용하는 강의입니다. 클래스의 역할과 테스트 검증 포인트에 초점을 맞추어 본다면, 다른 교육 분야에서도 큰 도움이 될 것입니다. 이번 영상은 TDD 방식으로 진행되어, TDD에 관심 있는 분들께 더 많은 도움이 될 것 같은데요. TDD가 처음이라면 미션에서 직접 도전해보는 것도 재미있는 경험이 될 것입니다.
이번 주 차부터는 새로운 미션 제출 방법이 적용됩니다. 비공개 저장소를 생성해 제출하는 방식이며, 자세한 내용은 미션 제출 방법과 첨부된 제출 방법 문서를 잘 읽어주세요. 특히, woowa-course 계정을 collaborator로 초대하는 부분을 유심히 읽고 수행해 주세요.
지난 프리코스 기간 동안 새로운 방식을 학습하며 구현하느라 힘든 시간도 많았을 텐데요. 마지막 미션까지 온 만큼 조금만 더 힘을 내서 이번 주 차도 즐거운 성장의 시간으로 마무리할 수 있기를 바랍니다.
프로그래밍 요구사항에는 함수의 길이를 15라인으로 제한하는 규칙이 포함되어 있다. 이 규칙은 main() 함수도 동일하게 적용되며, 공백 라인도 한 라인으로 간주한다. 만약 함수가 15라인을 초과한다면, 역할을 더 명확하게 나누고, 코드의 가독성과 유지보수성을 높일 수 있는 신호로 인식하고 함수 분리 또는 클래스 분리를 고려해야 한다.
정상적인 상황을 구현하는 것보다 예외 상황을 모두 고려하여 프로그래밍하는 것이 훨씬 어렵다. 하지만, 이러한 예외 상황을 처리하는 습관을 들이는 것이 중요하다. 코드를 작성할 때는 예상되는 예외를 미리 고려하여, 프로그램이 비정상적으로 종료되거나 잘못된 결과를 내지 않도록 한다.
예를 들어, 로또 미션에서 고려할 수 있는 예외 상황은 다음과 같다.
비즈니스 로직과 UI 로직을 한 클래스에서 처리하는 것은 단일 책임 원칙(SRP)에 위배된다. 비즈니스 로직은 데이터 처리 및 도메인 규칙을 담당하고, UI 로직은 화면에 데이터를 표시하거나 입력을 받는 역할로 분리한다. 아래는 비즈니스 로직과 UI 로직이 혼재되어 있다.
class Lotto {
#numbers
// 로또 숫자가 포함되어 있는지 확인하는 비즈니스 로직
contains(numbers) {
...
}
// UI 로직
print() {
...
}
}
비즈니스 로직은 그대로 유지하고, UI 관련 코드는 별도 View 클래스로 분리하는 것이 좋다. 현재 객체의 상태를 보기 위한 로그 메시지 성격이 강하다면, toString() 메서드를 통해 상태를 표현한다. 만약 UI에서 사용할 데이터가 필요하다면 getter 메서드를 통해 View 계층으로 데이터를 전달한다.
필드는 private class 필드로 구현한다. 객체의 상태를 외부에서 직접 접근하는 방식을 최소화 하는 이유에 대해서는 스스로 찾아본다.