• 카테고리

    질문 & 답변
  • 세부 분야

    기타 (개발 · 프로그래밍)

  • 해결 여부

    미해결

캡슐화 예제 4 질문입니다.

22.05.21 11:40 작성 조회수 151

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
==========
안녕하세요. 최범균 강사님.
예제 4번 관련해서 질문이 있습니다.
예시로 들어주신 캡슐화 코드를 사용한다면
verifyEmail() 메서드를 호출하기 전에 isEmailVeritifed() 메서드로 한 번 확인하는 로직은 불필요 것인지 궁금합니다.
 
if (!,mem.isEmailVeritied() {
mem.verifyEmail();
}
 
감사합니다. :)

답변 1

답변을 작성해보세요.

2

먼저 아래 코드는 이메일 인증 여부를 확인한 뒤에 이메일 인증 처리를 수행합니다.

if (!mem.isEmailVerified()) {
    mem.verifyEmail();
}

여기서 isEmailVerified() 메서드와 verifyEmail() 메서드는 모두 mem의 내부 필드 데이터를 사용해서 상태를 확인하고 상태를 변경하죠. 게다가 '이메일 인증' 기능 자체는 '이메일이 이미 검증된 여부를 확인'하는 제약을 포함하고 있습니다. 즉 이메일 인증 기능은 검증 여부 확인을 포함해야 온전한 기능이 되는 거죠. 그래서 verifyEmail() 메서드를 다음과 같이 구현함으로써 '이메일 인증' 기능에 대한 캡슐화를 높일 수 있습니다.

void verifyEmail() {
    if (isEmailVerified()) {
        // 이미지 검증된 경우에 대한 처리
        // 예를 들어, 익셉션 발생 등
        throw new AlreadyEmailVerifiedException();
    }
    // 이메일 검증 상태로 변경하는 코드
    ...
}

또한 제약 확인과 상태 변경을 한 곳으로 모으면 다음과 같이 잘못된 코드를 만들 가능성도 줄어들죠.

if (mem.isEmailVerified()) { // 이미 검증했는데
    mem.verifyEmail(); // 또 검증, 그런데 verifyEmail에서 검증 여부를 처리하지 않으면 인증 로직을 다시 실행
}

만약에 verifyEmail()에서 이메일 인증 시간을 현재 시간으로 설정한다거나 하면, 위 코드는 잘못된 인증 시간을 갖게 됩니다.

 

 

 

0xe82de님의 프로필

0xe82de

질문자

2022.05.23

답변 감사합니다. :)