[JAVA]추상 클래스

Date:     Updated:

카테고리:

태그:

[19] 추상 클래스

19.1. 추상 클래스

  • 구현 코드 없이 메서드의 선언만 있는 추상 메서드 (abstract method)를 포함한 클래스
    • 메서드 선언 (declaration) : 반환타입, 메서드 이름, 매개변수로 구성
    • 메서드 정의 (definition) : 메서드 구현(implementation)과 동일한 의미 구현부(body)를 가짐
      ex)
      public abstract void checkDownCast(ArrayList<Animal> list);     // 선언
      
      ex)
      public void checkDownCast(ArrayList<Animal> list){              // 구현부가 있음.
      }                                                               // 추상메서드가 아님.                                                      
      
  • abstract 예약어 사용
  • 추상 클래스는 인스턴스화 할 수 없다

19.2. 추상 클래스 구현

  • 메서드에 구현 코드가 없을 경우 abstract 선언
  • abstract로 선언된 메서드를 가진 클래스를 abstract로 선언
  • 모든 클래스가 구현된 클래스라도 abstract로 선언되면 추상 클래스로 인스턴스화 할 수 없다
  • 추상 클래스의 추상 메서드는 하위 클래스가 상속하여 구현
  • 추상 클래스 내의 추상 메서드
    • 하위 클래스가 구현해야 하는 메서드 : 추상 클래스 내에 구현된 메서드
    • 하위 클래스가 공통으로 사용하는 메서드 (필요에 따라 하위 클래스에서 재정의)

19.3. 템플릿 메서드(Template Method) 패턴

  • 전체적인 흐름은 상위 클래스에서 구현하고, 구체적인 처리는 하위 클래스에 위임
  • 추상 메서드 및 구현된 메서드를 활용해 코드 흐름(시나리오) 정의
  • 프레임워크(안드로이드, 스프링)에서 많이 사용되는 설계 패턴

19.4. 추상클래스와 템플릿 메서드 활용

  • Player가 있고 이 Player가 게임을 합니다.
  • 게임에서 Player가 가지는 레벨에 따라 run(), jump(), turn() 세가지 기능을 할 수 있습니다.
  • 각 레벨에 따라 가능한 기능이 다음과 같습니다.
초보자 레벨 : run() 가능 (천천히 달립니다)
중급자 레벨 : run(), jump() 가능 (빠르게 달립니다)
고급자 레벨 : run(), jump(), turn() 가능 (엄청 빠르게 달립니다)
  • Player는 go()를 하면 위 기능을 수행합니다.
  • 할 수 없을 경우 할 수 없다는 메시지를 출력합니다.

  • Player는 한번에 하나의 레벨 상태만을 가질 수 있습니다.
  • Player가 play() 도중에 레벨에 있는 go(int count)라는 메서드를 호출하면, run() 이후에 count 횟수만큼 jump()하고, turn()을 합니다.
******초급자 레벨입니다******
천천히 달립니다.
jump 못합니다.
turn 못합니다.
******중급자 레벨입니다******
빨리 달립니다.
높이 jump 합니다.
높이 jump 합니다.
turn 못합니다.
******상급자 레벨입니다******
엄청 빨리 달립니다.
아주 높이 jump 합니다.
아주 높이 jump 합니다.
아주 높이 jump 합니다.
turn 합니다.

JAVA 카테고리 내 다른 글 보러가기

댓글 남기기