inflearn logo
강의

講義

知識共有

オブジェクト指向プログラミング入門

カプセル化の例

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

272

0xe82de

投稿した質問数 2

0

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

oop

回答 1

2

madvirus0123

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

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

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

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

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

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

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

 

 

 

0

0xe82de

답변 감사합니다. :)

추상화 예제의 추상화하지 않은 구현 부분에서 질문있습니다.

0

446

1

캡슐화 하는 이유에 대해서

2

757

1

캡슐화 연습 2번

0

370

1

추상화 예제에서 추상 클래스를 사용하지 않고 인터페이스를 사용하신 이유가 궁금합니다.

0

269

2

범균님 안녕하세요 강의 수강중 궁금한점이 있어 질문 남겨 봅니다.

0

366

1

캡슐화 질문

0

322

1

DIP 관련해서 궁금한게 있습니다.

0

260

1

기능 분리 기준에 대한 질문이 있습니다.

1

361

2

서로 다른 구현 추상화에 대해서 질문이 있습니다.

2

369

2

의존 주입 예제 관련 질문입니다.

1

257

1

상속 재활용 단점 중 상위 클래스 변경 어려움에 대해서 질문이 있습니다.

1

316

2

캡슐화 연습4 질문 있습니다.

0

294

2

의존하는 대상이 많을 때 질문 드립니다.

0

265

1

추상화를 따라서 코딩해볼 수 있는 예제가 있을까요?

0

451

1

콘크리트 클래스를 직접 사용하는 경우 & NotifierFactory 관련 질문드립니다

1

277

1

Demeter's Law 설명이 잘 이해가 안갔습니다 ㅠㅠ

1

287

1

혹시 강의를 듣고 필기한 내용을 정리해서 블로그에 올려도 될까요?

0

359

2

캡슐화 예제 질문드립니다

0

546

4

DIP

1

375

3

예제코드는 따로 없나요?

1

231

0

NotifierFactory 를 또 추상화 한 이유가 궁금합니다

0

198

1

특정 클라우드에서 예외적으로 특정기능을 제공하지 않는 경우

6

214

1

상속과 조합 문의드립니다

1

267

1

강의자료를 받아볼수 있나요?

1

282

2