Java 다형성

Codren·2021년 6월 2일
0
post-custom-banner

Section 1. 다형성

1. 다형성 (Polymorphism)

하나의 동일한 형태를 통해서 다양한 방법으로 수행 및 동작하는 성질

  • 메서드의 다형성
    - 오버라이딩 : 같은 이름의 메서드 (동일한 형태) -> 하위 클래스의 메서드로 수행
    - 오버로딩 : 같은 이름의 메서드 (동일한 형태) -> 자료형의 타입과 개수에 따라 지정된 메서드로 수행

  • 클래스의 다형성
    - 업캐스팅 : 상위 클래스의 자료형 참조 변수 (동일한 형태) -> 여러 하위 클래스의 인스턴스를 참조




2. 다형성의 특징

  • 유연하고 확장성있게 유지보수가 편리한 프로그램을 만들수 있음
  • 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링 할 수 있음
  • 코드의 중복성을 낮추고 가독성을 높일 수가 있음




3. 다형성이 필요한 이유

##### 계산기 클래스 Calculator #####
abstract class Calculator{

    int left, right;
    
    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    } 
    
    int _sum() {
        return this.left + this.right;
    }
    
    public abstract void sum();  
    public abstract void avg();
    
    public void run(){
        sum();
        avg();
    }
}

##### 덧셈 기능 클래스 CalculatorDecoPlus #####
class CalculatorDecoPlus extends Calculator {
    public void sum(){
        System.out.println("+ sum :"+_sum());
    }
    public void avg(){
        System.out.println("+ avg :"+(this.left+this.right)/2);
    }
} 

##### 뺄셈 기능 클래스 CalculatorDecoMinus #####
class CalculatorDecoMinus extends Calculator {
    public void sum(){
        System.out.println("- sum :"+_sum());
    }
    public void avg(){
        System.out.println("- avg :"+(this.left+this.right)/2);
    }
} 

##### 계산 구현 Main 함수 부분 #####
public class CalculatorDemo {
    public static void execute(Calculator cal){		# 상위 클래스인 Calculator 타입을 받음
        System.out.println("실행결과");
        cal.run();
    }
    public static void main(String[] args) { 
        Calculator c1 = new CalculatorDecoPlus();	# 다형성을 이용하여 Calculator로 참조
        c1.setOprands(10, 20);
         
        Calculator c2 = new CalculatorDecoMinus(); 	# 다형성을 이용하여 Calculator로 참조
        c2.setOprands(10, 20);
         
        execute(c1);
        execute(c2);
    }
}
  • Main 부분에서 Plus, Minus 인스턴스를 상위 클래스인 Calculator로 참조하지 않고 각자 자신의 클래스 타입으로 참조했다면, Plus, Minus 클래스를 각각 매개변수로 받는 execute 메서드 두 개 만들어야 함 (하나의 형태로 여러 인스턴스를 핸들링 -> 코드 중복 ↓, 확장성 ↑, 가독성 ↑ )
post-custom-banner

0개의 댓글