• 카테고리

    질문 & 답변
  • 세부 분야

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

  • 해결 여부

    미해결

캡슐화 질문

22.03.23 00:16 작성 조회수 194

0

안녕하세요 강의 정말 흥미롭게 잘 보고 있습니다.

다름이 아니라 정답을 보기전 강의를 멈추고 제가 생각했던 캡슐화랑 비교해가면서 보고 있는데요

질문1

연습문제 1번에서 저는 두번째 if문만이 아닌 if 문 3개를 한꺼번에 메서드로 만들어서 캡슐화를 진행하려 했었는데 이렇게 해도 괜찮은가요??

질문2

연습문제 3번 같은 경우에도 elapasedTime 메서드에 start() 와 stop() 메서들 넣어 아예 하나의 메서드로 캡슐화 시켜버리고 호출시 elapasedTime메서드만 호출하도록 캡슐화 하는 방법을 생각 했었는데 이방식도 괜찮은건가요??

 

답변 1

답변을 작성해보세요.

1

질문1

연습문제 1번에서 저는 두번째 if문만이 아닌 if 문 3개를 한꺼번에 메서드로 만들어서 캡슐화를 진행하려 했었는데 이렇게 해도 괜찮은가요??

답변1: 

if가 세 개 있는데요

  1. 해당 Member가 존재하는지 확인
  2. Member가 이메일 인증을 했는지 확인
  3. Member 암호와 사용자가 입력한 암호가 일치하는지 확인

이 중에 2번과 3번 if를 Member 객체에 하나의 메서드로 만들어도 됩니다. 첫 번째는 Member 자체가 있는지 없는지 검사하는 것이므로 Member에 넣을 순 없을 거구요.

2번과 3번을 합쳐서 하나의 메서드로 만들면 이제 Member가 제공하는 암호검사 기능은 '이메일 검증 여부'에 따라 다르게 동작하게 되겠죠. 만약 실제로 암호가 일치하는지 여부만 확인하는 기능이 필요한 상황이 발생하면 이때는 '이메일 검증 여부에 상관없이' 암호가 일치하는지 여부를 확인하는 기능을 추가하면 되구요.

 

질문2

연습문제 3번 같은 경우에도 elapasedTime 메서드에 start() 와 stop() 메서들 넣어 아예 하나의 메서드로 캡슐화 시켜버리고 호출시 elapasedTime메서드만 호출하도록 캡슐화 하는 방법을 생각 했었는데 이방식도 괜찮은건가요??

답변2: 

elapsedTime 메서드 1개만 존재하면 코드가 다음과 같아진다는 걸까요?

t.elapsedTime(..);
... (코드 실행)
long time = t.elapsedTime(...);

타이머의 핵심 기능이 시작과 중지라는 점을 감안하면 위 코드는 기능의 의미를 제대로 표현하지 못하게 되니까 좋은 코드가 되지 못 합니다. 게다가 동작 방식도 매우 암묵적입니다(elapsedTime()을 처음 부르면 타이머를 시작하고, 두 번째 부르면 타이머를 종료하면서 시간을 구한다라는 식으로요)

wnsqud70님의 프로필

wnsqud70

질문자

2022.03.23

감사합니다!