[자바 – Java] 추상클래스 추상메소드 인터페이스 예제

1. 추상 클래스

 

1) 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스를 이야기한다.

– 메서드 선언 (declaration) : 반환 타입, 메서드 이름, 매개변수로 구성한다.

– 메서드 정의 (definition) : 메서드 구현(implementation)과 동일한 의미 구현부(body)를 가진다. ({})

public abstract void checkDownCast(ArrayList list); 
       //선언

public void checkDownCast(ArrayList list) {

}                           //구현부가 있음. 추상메서드가 아님.

2) abstract 예약어를 사용한다.

3) 추상 클래스는 new를 사용할 수 없다.(인스턴스화 할 수 없음)

2. 추상 클래스 구현

 

1) 메서드에 구현 코드가 없으면 abstract로 선언한다.

2) abstract로 선언된 메서드를 가진 클래스는 abstract로 선언한다.

3) 모든 클래스가 구현된 클래스라도 abstract로 선언되며 추상 클래스로 인스턴스화 할 수 없다.

4) 추상 클래스의 추상 메서드는 하위 클래스가 상속하여 구현한다.

추상 메서드는 *하위 클래스가 구현해야 하는 메서드이며 *추상 클래스 내의 구현된 메서드이다. 그리고 *하위 클래스가 공통으로 사용하는 메서드이다. 하지만, 필요에 따라 하위 클래스에서 재정의 한다.(override)

3. Template Method 패턴 #1

 

1) 템플릿 메서드

– 상위 클래스에서는 전체적인 흐름을 구현하고 구체적인 처리는 하위 클래스에 위임한다.

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

– 프레임워크(안드로이드, 스프링)에서 많이 사용되는 설계 패턴이다.

– 추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의하고 상속받은 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현하도록 한다.

 

4. 추상 클래스와 템플릿 메서드 예제

 

1) 게임에서 Player가 가지는 레벨에 따라 run(), jump(), turn() 세 가지 기능을 할 수 있다. 각 레벨에 따라 가능한 기능이 다음과 같다.

초보자 : run() 
중급자 : run(), jump()
고급자 : run(), jump(), turn() 

2) go()를 하면 이 기능을 수행한다. 이 중 할 수 없는 것은 할 수 없다는 메시지를 출력한다.

3) Player는 한번에 하나의 레벨 상태만을 가질 수 있습니다.

4) Player는 play() 중에 레벨에 있는 go(int count)라는 메서드를 호출하면 run()을 하고 count 횟수만큼 jump()를 하고 turn()한다.

위의 예제에 대한 코드 자료입니다. * 코드는 개개인마다 차이가 있을 수 있습니다.

 

main[] method – PlayerTest


 

Player


 

BeginnerLevel ; 이를 응용해서 중급자, 고급자 코드를 짜면 되겠습니다.


 

PlayerLevel