나는 정적 유형 검사의 팬입니다. 다음과 같은 어리석은 실수를 저 지르지 않습니다.
// java code
Adult a = new Adult();
a.setAge("Roger"); //static type checker would complain
a.setName(42); //and here too
그러나 다음과 같이 바보 같은 실수를 저지르는 것을 막지는 않습니다.
Adult a = new Adult();
// obviously you've mixed up these fields, but type checker won't complain
a.setAge(150); // nobody's ever lived this old
a.setWeight(42); // a 42lb adult would have serious health issues
동일한 유형을 사용하여 분명히 다른 종류의 정보를 나타내면 문제가 발생합니다. 이에 대한 좋은 해결책은 Integer
비즈니스 로직 오류를 방지하고 기능을 추가하지 않기 위해 클래스를 확장하는 것이라고 생각했습니다 . 예를 들면 다음과 같습니다.
class Age extends Integer{};
class Pounds extends Integer{};
class Adult{
...
public void setAge(Age age){..}
public void setWeight(Pounds pounds){...}
}
Adult a = new Adult();
a.setAge(new Age(42));
a.setWeight(new Pounds(150));
이것이 좋은 습관으로 간주됩니까? 또는 그러한 제한적인 설계로 인해 예상치 못한 엔지니어링 문제가 있습니까?
new Age(...)
객체 를 선언 Weight
하면 다른 곳 에서는 유형 변수에 잘못 할당 할 수 없습니다 . 실수가 발생할 수있는 장소의 수를 줄입니다.
a.SetAge( new Age(150) )
여전히 컴파일 되지 않습니까?