추상클래스를 사용하는 이유를 알아보자.
- 부모클래스에는 메소드의 껍데기만 정의해놓고 메소드의 실제 동작방법은 메소드를 상속받는 하위클래스의 책임으로 위임한다.
- 규모가 있고 사용하는 용도에 따라서 달라질 수 있는 기능이 있을 때 사용한다.
- 상위클래스에는 공통적으로 사용되는 로직 / 하위클래스에는 용도에 따라서 달라지는 로직을 구현할 때 사용한다.
예제를 살펴보자.
abstract class Calculator { int left, right; public void setOprands(int left, int right){ this.left = left; this.right = right; } public abstract void sum(); public abstract void avg(); public void run(){ sum(); avg(); } } | cs |
public class CalculatorDecoMinus extends Calculator { public void sum(){ System.out.println("- sum :"+(this.left+this.right)); } public void avg(){ System.out.println("- avg :"+(this.left+this.right)/2); } } | cs |
public class CalculatorDecoPlus extends Calculator { public void sum(){ System.out.println("+ sum :"+(this.left+this.right)); } public void avg(){ System.out.println("+ avg :"+(this.left+this.right)/2); } } | cs |
public class CalculatorDemo { public static void main(String[] args) { CalculatorDecoPlus c1 = new CalculatorDecoPlus(); c1.setOprands(10, 20); c1.run(); CalculatorDecoMinus c2 = new CalculatorDecoMinus(); c2.setOprands(10, 20); c2.run(); } } | cs |
setOperands는 공통모듈로 만들어놓은 것으로, 사용하는 측(하위클래스)에서는 직접 만들 필요없다.(상위클래스에서 동작)
sum / avg 메소드는 추상메소드로 선언이 되어있고 사용하는 측에서 자신의 스타일대로 직접 만들면 된다.
'STUDY > JAVA' 카테고리의 다른 글
Interface2 (0) | 2018.01.22 |
---|---|
Interface1 (0) | 2018.01.22 |
Java의 String interpolation[문자열 덧붙이기] (0) | 2018.01.22 |
Abstract1 (0) | 2018.01.22 |
접근제어자2(Default 접근제어자와 Public 접근제어자) (0) | 2018.01.22 |