• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 일본어 (0)
        • 모모타로TMC (0)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [디자인 패턴] 2. 템플릿 메서드 패턴
        2024년 04월 30일
        • Song hyun
        • 작성자
        • 2024.04.30.:49
        728x90
        반응형

        [디자인 패턴] 2. 템플릿 메서드 패턴

         

        1. 템플릿 메서드 패턴(Template Method Pattern) 이란?

        추상 메서드, 혹은 구현된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 패턴이다.

        로직을 단계별로 나눠야 하는 상황에서 주로 적용된다.

        해당 로직들이 앞으로 수정될 가능성이 있다면, 더욱 효율적으로 사용할 수 있다.

        -> 부모 클래스가 전체적인 알고리즘을 설정하고, 자식 클래스가 특정 단계들을 오버라이드하는 패턴!!
        (이는 상속이라는 기술을 극대화하는 패턴이기도 하다!!)

         

        *디자인 패턴에서 "템플릿(Template)"이란 변하지 않는 것을 의미한다.

         

        *프레임 워크(Frame work): 이미 실행의 흐름이 적혀 있는 코드들. 프레임 워크들에 새로운 코드를 작성하거나, 삭제하는 것으로 새로운 프로그램을 만들 수 있다.

         


         

        2. 템플릿 메서드 패턴 예제 들여다 보기

        아래의 코드를 살펴보자.

         

        Car 라는 상위 클래스와 AICar, ManualCar라는 하위 클래스가 있다. 

        Car 클래스와 나머지 두 클래스는 상속 관계라고 할 수 있다.

         

        하지만 AICar/ManualCar는 완전히 똑같은 개체는 아니다. 

        즉, 클래스의 특정 메서드는 오버라이드(재정의)해야 할 필요가 있는 것이다.

         

        우측 하단의 이미지를 보면 상수 메서드로 선언된 run이 보인다.

        startCar/turnOff는 각기 다른 색을 띄고 있는데, 해당 부분만 스크립트가 다른 것을 볼 수 있다.(왼쪽 코드 사진)

        Car에서, 자식 클래스들이 오버라이드 할 수 있도록 final을 붙이지 않았기 때문이다.

        이와 같은 형태를 우리는 템플릿 메서드 패턴이라고 부른다.

         

        package useful.ch04;
        
        public abstract class Car {
        	
        	void startCar() {
        		System.out.println("시동을 켭니다.");
        	}
        	abstract void drive();
        	abstract void stop();
        	void turnOff() {
        		System.out.println("시동을 끕니다.");
        	}
        	
        	// 템플릿 메서드 패턴의 핵심!
        	// 메서드 앞에 final 키워드를 사용한다면, 하위 클래스에서 재정의 할 수 없다.
        	final void run() {
        		// 실행의 흐름 만들어 보기
        		startCar();
        		drive();
        		stop();
        		turnOff();
        	}
        
        }
        package useful.ch04;
        
        public class AICar extends Car {
        
        	@Override
        	void drive() {
        		System.out.println("AI 자동차가 자율 주행을 합니다.");
        		System.out.println("스스로 방향을 바꿉니다.");
        		
        	}
        
        	@Override
        	void stop() {
        		System.out.println("AI 자동차가 자동으로 차를 멈춥니다.");
        		System.out.println("위험을 감지해서 급하게 제동합니다.");
        	}
        
        }
        package useful.ch04;
        
        public class ManualCar extends Car{
        
        	@Override
        	void drive() {
        		System.out.println("사람이 운전을 합니다.");
        		
        	}
        
        	@Override
        	void stop() {
        		System.out.println("브레이크를 밟아서 정지를 합니다.");
        		
        	}
        
        }
        package useful.ch04;
        
        public class CarMainTest {
        	
        	public static void main(String[] args) {
        		
        		Car aicar = new AICar(); // 다형성, 업캐스팅된 상태
        		// 프로그램을 실행시키기 위해서 run() 메서드를 호출해야 한다-약속
        		aicar.run();
        		
        		Car manualCar = new ManualCar();
        		manualCar.run();
        		
        	} // end of main
        
        } // end of class
        728x90
        반응형

        '디자인 패턴' 카테고리의 다른 글

        [디자인 패턴] 6. 싱글톤 패턴 복습하기  (1) 2024.09.25
        [디자인 패턴] 5. 콜백 메서드  (0) 2024.09.25
        [디자인 패턴] 4. 디자인 패턴이란?  (0) 2024.09.25
        [디자인 패턴] 3. S.O.L.I.D 원칙  (0) 2024.09.25
        [디자인 패턴] 1. 싱글턴 패턴  (0) 2024.04.30
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바