처음에는 최대한 전환문을 활용했습니다. 내 눈엔 완벽해 보였어 언젠가 "클린 코드" 책을 발견하기 전까지는 말이야 로버트 C. 마틴은 전환 진술이 왜 형편없는 구조인지, 그리고 왜 우리가 그것들을 재고하고 모든 곳에서 사용하는 것을 멈출 수 있는지 명확하게 설명한다.
시간이 지나고 경험이 쌓이면서 전환문을 적게 쓰고 있었고, 나중에는 사용할 이유가 전혀 보이지 않았다. 이 기사에서는 전환 문 대신 프로젝트에 사용하는 접근 방식 중 하나를 공유하려고 합니다. OOP 원리 중 하나인 다형성이라고 합니다.
왜 당신은 전환명세서 사용을 다시 고려하려고 합니까?
여기 뭐가 있지? 교환 성명서?
이 기사가 진행되는 동안 리팩터링할 초기 코드는 다음과 같습니다. 우리는 하나의 스위치 문과 과일 열거가 있습니다.
열거형만 필요하므로 스위치 문을 제거할 수 있습니다.
전환 문구를 삭제합시다.
먼저 가격과 함께 기본 실체를 나타내는 Fruit라는 추상 클래스를 추가해 봅시다.
기본 클래스 인스턴스를 만들지 않기 때문에 Fruit 클래스는 추상적이어야 합니다. 상속된 클래스는 가격 가치를 제공합니다.
여기서 Record 유틸리티 유형을 사용했음을 확인할 수 있습니다. 유틸리티 유형에 대한 자세한 내용은 다음 웹 사이트에서 확인할 수 있습니다.
이제 올바른 생성자를 제공할 함수를 추가하겠습니다.
우리는 첫 번째 시운전을 할 준비가 되었습니다.
생성자 팩토리 함수 오버로드
때로는 열거값 대신 문자열을 전달하는 것이 편리합니다. 예를 들어 HTML 템플릿에서 문자열을 받아서 가격을 반환해야 합니다.
그러나 생성자 팩토리 함수를 업데이트하기 전에 열거형 작업에 도움이 되는 함수를 하나 더 추가해야 합니다.
열거형만 사용하고 튜플이 있는 배열을 반환합니다. 각 튜플은 열거형 이름과 값으로 구성됩니다.
문자열과 열거값으로 작업하려면 생성자 팩토리 함수를 업데이트해야 한다.
문자열 값을 전달하여 findFruitConstructor 함수를 테스트해 보겠습니다.
Null 가능 패턴과 함께 기본 동작 제공
만약 우리가 존재하지 않는 시공자의 이름을 얻게 된다면 어떻게 될까요?
오류가 발생합니다.
이를 방지하고 존재하지 않는 과일에 대해 기본 동작을 하기 위해 오류 대신 Nullable 패턴을 사용할 수 있습니다.
Nullable 인터페이스를 추가하겠습니다.
Fruit 클래스는 nullable 인터페이스와 false를 반환해야 하는 .isNull() 메서드를 구현해야 합니다.
또한 동작이 없는 과일을 나타내는 NullableFruit 클래스도 추가해야 합니다.
이제 오류를 발생시키는 대신 NullableFruit 생성자를 반환해야 합니다.
마지막 데모입니다.
예상대로 잘 작동하는 것 같습니다. 게다가, 우리는 그 과정에서 많은 유용한 기능들을 추가했고, 더 많은 기능들을 추가할 수 있습니다. 이것은 제안된 접근법 중 하나이며, 다른 방법도 있습니다. 스위치 문을 사용하지 않는 모든 문구는 초유연하다.
결론
이 기사가 흥미롭고 새로운 기술을 접하셨기를 바랍니다. 궁금하신 점이 있으시면 언제든지 연락하세요.
버튼을 누르고 구독하면 더 많은 기사를 쓸 수 있는 동기가 될 것입니다.
댓글