• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring에서 자주 쓰이는 디자인 패턴 1
        2022년 10월 19일
        • starryeye
        • 작성자
        • 2022.10.19.:31
        반응형

        스프링에서 자주 쓰이는 디자인 패턴 중...

         

        템플릿 메서드 패턴에 대해 알아보자..

         

        템플릿 메서드 패턴은..

        핵심 기능(변하는 부분)과 부가 기능(변하지 않는 부분)을 분리하는데 초첨이 맞춰져 있다.

         

        예를 들면..

        다양한 로직을 처리하는 메서드들의 시작과 끝 시간을 측정하여

        걸리는 시간을 측정하는 로그를 남기는 것을 개발하려고 할때..

        시간 측정은 변하지 않는 부분이고..(메서드 별로 로직이 다르지 않음)

        해당 메서드의 기존 구현 로직은 변하는 부분이다.(메서드 별로 로직 다름)

         

         

        클래스 다이어그램으로 알아보자..

         

        Client 클래스는 AbstractTemplate라는 추상 클래스를 참조하고..

        execute 메서드를 호출한다.

        AbstractTemplate는 ClassA, ClassB로 구현된다.

         

        여기서..

        execute 메서드는..

        변하지 않는 부분(템플릿)에 해당하는 메서드이고

        execute 내부에서 call 메서드를 호출해준다.

         

        call 메서드는..

        변하는 부분(알고리즘)에 해당하는 메서드이고,

        변하는 부분의 로직을 상속과 오버라이딩을 사용하여 구현해준다.

         

        코드로 알아보면 다음과 같다.

        AbstractTemplate
        ClassA
        ClassB

         

        이를 사용하는 Client는.. 다음과 같다.

        ClientClass

         

        익명 내부 클래스를 사용하면,

        위에서 ClassA, ClassB를 따로 만들어 줄 필요가 없다.

        (Client에서 바로 해결)

         

         

        참고로..

        위는 람다를 사용하였는데.. (메서드가 1개만 있을 경우 가능)

        이는.. 아래와 동일하다.

        (template1만 작성)

        AbstractTemplate template1 = new AbstractTemplate() {
            @Override
            protected void call() {
                log.info("비즈니스 로직1 실행");
            }
        };
        log.info("클래스 이름1={}", template1.getclass());
        template.execute();

         

         

        GOF 디자인 패턴에서는.. 템플릿 메서드 패턴에 대해..

        어떻게 말하고 있는가..

         

        부모 클래스에 알고리즘의 골격인 템플릿을 정의하고, 일부 변경되는 로직은 자식 클래스에 정의한다.

        이렇게 하면..

        자식 클래스가 알고리즘의 전체 구조를 변경하지 않고, 특정 부분만 재정의 할 수 있다.

        -> 상속과 오버라이딩을 통한 다형성으로 문제를 해결할 수 있다는 의미 이다..

         

        문제점..

        결국 상속을 사용하는데에 문제가 있는데..

        현재 자식 클래스는 부모 클래스의 기능(메서드나 필드 등)을 전혀 사용하지 않고 있다..

        -> 자식 클래스는 부모 클래스의 기능을 사용하지 않지만..

        -> 상속을 받고있기에..

        -> 강하게 의존하고 있는 꼴이다.

        -> 부모클래스가 변경된다면.. 자식 클래스에도 영향을 줄 수 있다.

         

        다음 포스팅인..

        전략 패턴에서는 위 문제점을 해결한다.

        전략 패턴을 공부 해보자.

        반응형

        'Spring > Core' 카테고리의 다른 글

        Spring에서 자주 쓰이는 디자인 패턴 4  (0) 2022.11.05
        Spring에서 자주 쓰이는 디자인 패턴 3  (0) 2022.11.05
        Spring에서 자주 쓰이는 디자인 패턴 2  (0) 2022.10.20
        @Controller, @Service, @Repository  (0) 2022.09.09
        Spring Core 마스터하기 1  (0) 2022.07.20
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바