저작권 안내: 저작권자표시 Yes 상업적이용 No 컨텐츠변경 No

스프링5 입문

JSP 2.3

JPA 입문

DDD Start

인프런 객체 지향 입문 강의

신림프로그래머 모임에 발표할 모델링 연습 리뷰 자료입니다.



발표 자료에 나오는 JPA의 AttributeConverter에 대한 내용은 아래 링크에 정리했습니다.

  • http://javacan.tistory.com/entry/How-to-use-JPA-21-by-AttributeConverter-for-custom-value-type


Posted by 최범균 madvirus

댓글을 달아 주세요


Posted by 최범균 madvirus

댓글을 달아 주세요

비지터 패턴 요약



Posted by 최범균 madvirus

댓글을 달아 주세요

GoF 커맨드 패턴 요약




Posted by 최범균 madvirus

댓글을 달아 주세요

GoF 패턴 Chain of Responsibility 요약



Posted by 최범균 madvirus

댓글을 달아 주세요

GoF 디자인 패턴의 Template Method (템플릿 메서드) 패턴 요약




Posted by 최범균 madvirus

댓글을 달아 주세요

GoF Strategy 패턴 요약



Posted by 최범균 madvirus

댓글을 달아 주세요

GoF 패턴 State 요약




Posted by 최범균 madvirus

댓글을 달아 주세요

요즘 이런 저런 것들을 정리해보고 있는데, 그 중 일부 내용을 적어본다.


의존의 양면성


다음 코드를 보자.


public class Authenticator {

    public boolean authenticate(String id, String password) {

        Member m = findMemberById(id);

        if (m == null) return false;


        return m.equalPassword(password); // password가 m의 암호와 동일하면 true

    }

    ...

}


이 클래스를 사용하는 코드는 다음과 같이 checkPassword() 메서드를 이용해서 사용자가 입력한 암호가 올바른지 여부를 판단할 것이다.


public class AuthenticationHandler {


    public void handleRequest(String inputId, String inputPassword) {

        Authenticator auth = new Authenticator();

        if (auth.authenticate(inputId, inputPassword)) {

            // 아이디/암호 일치할 때의 처리

        } else {

            // 아이디/암호 일치하지 않을 때의 처리

        }

    }


}


위 코드에서 AuthentcationHandler 클래스는 Authenticator 클래스를 사용하고 있다. 즉, AuthenticationHandler 클래스가 Authenticator 클래스에 의존하고 있고, Authenticator 클래스에 변화가 생기면 AuthenticationHandler 클래스도 영향을 받게 된다.


그런데, 잘못된 아이디를 입력한 것인지 아니면 암호가 틀린 것인지 여부를 확인해서 시스템상에 로그로 남겨달라는 요구가 추가되었다. 이 요구를 충족시키려면 Authenticator의 authenticate() 메서드는 단순히 boolean 값을 리턴하면 안 된다. 아이디가 잘못되었는지 암호가 잘못되었는지 여부를 알려줄 수 있어야 한다. 예를 들면 AuthenticationHandler 클래스의 코드는 다음과 같이 익셉션을 통해서 인증 실패 이유를 구분할 수 있어야 한다.


public class AuthenticationHandler {

    public void handleRequest(String inputId, String inputPassword) {
        Authenticator auth = new Authenticator();
        try {
            auth.authenticate(inputId, inputPassword);
            // 아이디/암호가 일치하는 경우의 처리
        } catch(MemberNotFoundException ex) {
            // 아이디가 잘못된 경우의 처리
        } catch(InvalidPasswordException ex) {
            // 암호가 잘못된 경우의 처리
        }
    }

}


AuthenticationHandler 클래스를 위와 같이 작성하려면 Authenticator 클래스의 authenticate() 메서드가 다음과 같이 변경되어야만 한다.


public class Authenticator {

    public void authenticate(String id, String password) {

        Member m = findMemberById(id);

        if (m == null) throw new MemberNotFoundException();


        if (! m.equalPassword(password)) throw new InvalidPasswordException();

    }

    ...

}


AuthenticationHandler 클래스가 Authenticator 클래스에 의존하고 있는 상황에서, AuthenticationHandler 클래스의 변경 요구 때문에 Authenticator 클래스에 변화가 발생한 것이다. 이는 의존이 다음과 같이 상호간에 영향을 준다는 것을 보여준다.

  • 내가 변경되면 나에게 의존하고 있는 코드에 영향을 준다.
  • 나의 요구가 변경되면 내가 의존하고 있는 타입에 영향을 준다.

Posted by 최범균 madvirus

댓글을 달아 주세요

GoF Mediator 패턴 요약:



참고자료:


Posted by 최범균 madvirus

댓글을 달아 주세요

GoF Observer 패턴 요약:



Posted by 최범균 madvirus

댓글을 달아 주세요

  1. 훈이 2013.04.24 14:29 신고  댓글주소  수정/삭제  댓글쓰기

    굿

GoF Facade 패턴 요약



Posted by 최범균 madvirus

댓글을 달아 주세요

GoF Decorator 패턴 요약



Posted by 최범균 madvirus

댓글을 달아 주세요

GoF Composite 패턴 요약



Posted by 최범균 madvirus

댓글을 달아 주세요

Adapter 패턴 요약한 것



Posted by 최범균 madvirus

댓글을 달아 주세요