-
카테고리
-
세부 분야
기타 (개발 · 프로그래밍)
-
해결 여부
미해결
캡슐화 예제 4 질문입니다.
22.05.21 11:40 작성 조회수 159
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
==========
안녕하세요. 최범균 강사님.
예제 4번 관련해서 질문이 있습니다.
예시로 들어주신 캡슐화 코드를 사용한다면
verifyEmail() 메서드를 호출하기 전에 isEmailVeritifed() 메서드로 한 번 확인하는 로직은 불필요 것인지 궁금합니다.
if (!,mem.isEmailVeritied() {
mem.verifyEmail();
mem.verifyEmail();
}
감사합니다. :)
답변을 작성해보세요.
2
최범균
지식공유자2022.05.23
먼저 아래 코드는 이메일 인증 여부를 확인한 뒤에 이메일 인증 처리를 수행합니다.
if (!mem.isEmailVerified()) {
mem.verifyEmail();
}
여기서 isEmailVerified() 메서드와 verifyEmail() 메서드는 모두 mem의 내부 필드 데이터를 사용해서 상태를 확인하고 상태를 변경하죠. 게다가 '이메일 인증' 기능 자체는 '이메일이 이미 검증된 여부를 확인'하는 제약을 포함하고 있습니다. 즉 이메일 인증 기능은 검증 여부 확인을 포함해야 온전한 기능이 되는 거죠. 그래서 verifyEmail() 메서드를 다음과 같이 구현함으로써 '이메일 인증' 기능에 대한 캡슐화를 높일 수 있습니다.
void verifyEmail() {
if (isEmailVerified()) {
// 이미지 검증된 경우에 대한 처리
// 예를 들어, 익셉션 발생 등
throw new AlreadyEmailVerifiedException();
}
// 이메일 검증 상태로 변경하는 코드
...
}
또한 제약 확인과 상태 변경을 한 곳으로 모으면 다음과 같이 잘못된 코드를 만들 가능성도 줄어들죠.
if (mem.isEmailVerified()) { // 이미 검증했는데
mem.verifyEmail(); // 또 검증, 그런데 verifyEmail에서 검증 여부를 처리하지 않으면 인증 로직을 다시 실행
}
만약에 verifyEmail()에서 이메일 인증 시간을 현재 시간으로 설정한다거나 하면, 위 코드는 잘못된 인증 시간을 갖게 됩니다.
답변 1