본문 바로가기
STUDY/JAVA

Abstract2

by NOTEEE 2018. 1. 22.

추상클래스를 사용하는 이유를 알아보자.


- 부모클래스에는 메소드의 껍데기만 정의해놓고 메소드의 실제 동작방법은 메소드를 상속받는 하위클래스의 책임으로 위임한다.

- 규모가 있고 사용하는 용도에 따라서 달라질 수 있는 기능이 있을 때 사용한다.

- 상위클래스에는 공통적으로 사용되는 로직 / 하위클래스에는 용도에 따라서 달라지는 로직을 구현할 때 사용한다.


예제를 살펴보자.


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(1020);
        c1.run();
         
        CalculatorDecoMinus c2 = new CalculatorDecoMinus();
        c2.setOprands(1020);
        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