정적 타입 시스템은 데이터의 부정확 한 사용을 막기위한 것입니다.
이를 수행하는 유형의 명백한 예가 있습니다.
- 당신은 UUID의 달을 얻을 수 없습니다
- 두 개의 문자열을 곱할 수 없습니다.
더 미묘한 예가 있습니다
- 책상의 길이를 사용하여 비용을 지불 할 수 없습니다
- 다른 사람의 이름을 URL로 사용하여 HTTP 요청을 할 수 없습니다.
double
가격과 길이 모두 에 사용 하거나 string
이름과 URL 모두에 사용하려는 유혹이있을 수 있습니다 . 그러나 그렇게하면 멋진 유형 시스템이 파괴되고 이러한 오용이 언어의 정적 검사를 통과 할 수 있습니다.
Newton-seconds와 혼동되는 파운드-초 는 런타임에 결과 가 좋지 않을 수 있습니다 .
이것은 특히 문자열에 문제가 있습니다. 이들은 종종 "범용 데이터 유형"이됩니다.
주로 컴퓨터와의 텍스트 인터페이스에 익숙하며 이러한 휴먼 인터페이스 (UI)를 프로그래밍 인터페이스 (API)로 확장하는 경우가 많습니다 . 우리는 문자로 34.25 생각 34.25 . 우리는 날짜를 05-03-2015 문자로 생각 합니다. UUID를 75e945ee-f1e9-11e4-b9b2-1697f925ec7b 문자로 생각 합니다.
그러나이 정신 모델은 API 추상화에 해를 끼칩니다.
말이나 언어는 글로 쓰거나 말한 것처럼 내 생각의 메커니즘에서 아무런 역할을하지 않는 것 같습니다.
앨버트 아인슈타인
마찬가지로 텍스트 표현은 유형 및 API를 디자인하는 데 아무런 역할을해서는 안됩니다. 조심하십시오 string
! (및 기타 지나치게 일반적인 "기본"유형)
유형은 "어떤 작업이 의미가 있는지"를 전달합니다.
예를 들어, 한 번 클라이언트에서 HTTP REST API로 작업했습니다. REST는 올바르게 완료되면 관련 엔티티를 가리키는 하이퍼 링크가있는 하이퍼 미디어 엔티티를 사용합니다. 이 클라이언트에서는 엔터티 유형 (예 : 사용자, 계정, 가입)뿐만 아니라 해당 엔터티에 대한 링크도 입력되었습니다 (UserLink, AccountLink, SubscriptionLink). 링크는 래퍼에 Uri
지나지 않았지만 별도의 유형으로 인해 AccountLink를 사용하여 사용자를 가져올 수 없었습니다. 모든 것이 명백 Uri
하거나 더 나빴다면 string
이러한 실수는 런타임에만 발견됩니다.
마찬가지로 상황에 따라 한 가지 목적으로 만 사용되는 데이터가 Operation
있습니다. 다른 용도로 사용해서는 안되며, Operation
우리가 만든 임의의 문자열로 를 식별하려고 시도해서는 안됩니다 . 별도의 클래스를 만들면 코드에 가독성과 안전성이 추가됩니다.
물론 모든 좋은 것을 과도하게 사용할 수 있습니다. 치다
코드에 얼마나 선명하게 추가됩니까?
사용 빈도
데이터의 "유형"(추상적 인 의미에서)이 고유 한 목적으로 그리고 코드 인터페이스간에 자주 사용되는 경우, 자세한 정보 대신 별도의 클래스가 될 수 있습니다.