개발자
순수 Java 언어를 통해서 객체지향을 연습하고자 했고, Domain 객체에서 getter을 최대한 지양한 상태에서 구현했습니다. 로직 검증을 위해 Test Code을 작성하던 중 의문점이 생겼습니다. Test Code을 작성해서 내부 객체의 상태 값을 검증할땐 프러덕션 코드에 제공된 getter가 없어 equals and hashcode을 재정의하여 객체의 상태를 검증하고자 했습니다. (Equals and HashCode는 주로 Value Object에 대해서만 재정의 했습니다.) 하지만 때론, 객체을 생성해서 검증할땐 객체의 주생성자 안에 있는 validate 조건에 의해 객체 자체가 생성하기 어려운 경우가 있어 "객체 대 객체"로 검증하기 어려운 점이 있었습니다. # 1 이런 경우 어떻게 Test을 할 수 있을까요?? 어쩔 수 없이 test code 만을 위해서 내부 상태를 검증하도록 getter을 추가해야 할까요?? # 2 또한 만약 이미 getter가 구현된 상태이고 객체의 validate 조건을 피해서 객체를 만들 수 있다면 "객체 대 객체" 비교 말고 getter을 통해서 상태 검증을 해도 괜찮을까요??
답변 2
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 09월 28일
# 1 Test를 위한 코드를 프로덕션 코드에 추가하는 것은 좋지 않습니다. 테스트를 위해 getter를 추가하는 것 대신, 객체 상태의 변화를 측정할 수 있는 다른 방법을 찾아보는 것이 좋습니다. 예컨대, 객체의 메소드가 예상대로 동작했는지 확인하기 위해 해당 메소드가 반환하는 값을 검증하거나, 객체의 상태가 바뀌었는지를 확인하기 위해 해당 객체에 곁측효과 (side-effect) 가 있는 지 확인하거나 "Mocking" 등을 활용하여 간접적으로 상태 변화를 검증하는 방법이 있습니다. # 2 getter가 이미 구현되어 있고, 객체 생성에 필요한 유효성 검사를 우회할 수 있다면 getter을 사용하여 상태 검증을 하는 것은 아무런 문제가 없습니다. 그러나 Test Code에서만 사용되는 getter라면 이는 좋은 방식이 아니므로 고려해볼 필요가 있습니다. 객체 비교와 getter 사용 모두 유효한 테스트 전략이므로 어떤 전략을 선택할지는 당신의 코드 베이스, 프로젝트 요구 사항 그리고 개인적인 선호도에 따라 결정됩니다. 위와 같이 테스트 전략은 경우에 따라 달라질 수 있으므로, 테스트 코드를 작성하며 가장 적합한 방법을 선택하는 것이 중요합니다. 이때 객체지향의 원칙을 지키고자 하는 의도를 기억해야 합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!