추상 클래스
추상 클래스란 추상 메소드를 포함한 클래스를 말한다.
그럼 다시 추상 메소드란 구현부가 없이 선언부만 있는 메소드를 말한다.
예를 들어 public void add(); 이렇게 구현부가 없는 경우 추상 메소드라 한다.
주의할 점은 public void add() { } 는 추상 메소드가 아니다. 빈칸이라도 구현이 되어있기 때문이다.
추상 메소드는 앞에 abstract 키워드를 붙여줘야 한다.
public abstract void add(); 이렇게 말이다. 이런 추상 메소드가 하나라도 있으면 클래스에도 abstract 키워드를 붙여줘야 한다.
public class car{} 에서 public abstract class car{} 이렇게 해주면 된다.
이런 추상 클래스들은 인스턴스화 할 수 없다. 즉 Car newCar = new Car();를 할 수 없단 뜻이다. 왜냐하면 추상 메소드를 포함하기 때문이다. 구현이 되어있지 않기 때문에 만든다해도 newCar.add()를 실행할 수 없는 것이다. 그래서 concrete class라고도 한다.
만약 모든 메소드를 구현해도 class에 abstract를 붙이면 추상 클래스가 된다.
추상 클래스는 주로 상위 클래스에 쓰인다. 상위 클래스에서 선언하고 하위 클래스에서 구현을 제대로 하는 것이다. 하위 클래스에서는 @Override 키워드를 통해 재정의를 하면 된다.
템플릿 메소드
템플릿 메소드는 추상 메소드나 구현된 메소드를 이용해서 전체의 흐름을 정해놓는 메소드를 뜻한다.
이런 템플릿 메소드는 final로 지정해서 하위 클래스에서 재정의 할 수 없도록 한다.
보통 상위클래스에서 추상 메소드를 이용해 시스템의 흐름을 정해놓고, 하위 클래스에서 재정의를 통해 구현을 시나리오대로 완성한다.
위의 예시처럼 자동차의 run()이라는 흐름은 일치시킨 후 하위 클래스에서 무슨 자동차를 만드느냐에 따라 run()과 stop()구현을 다르게 하는 것이다.
'프로그래밍 > Java' 카테고리의 다른 글
[Java] 인터페이스 (0) | 2020.02.03 |
---|---|
[Java] final 예약어 (0) | 2020.02.03 |
[Java] 상속과 다형성 (0) | 2020.02.01 |
[Java] 배열과 ArrayList (0) | 2020.02.01 |
[Java] Static과 Singleton Pattern (0) | 2020.01.30 |