다형성의 뜻은 여러 가지 형태를 가질 수 있다..라고 말함
같은 이름을 가지고 있지만 동작하는 방식은 각각 다른 오버 로딩의 경우도 다형성이라는 측면에서 생각을 해볼수 있음
다형성이라는 말을 외우고 집착하는 것보다
다형성을 왜 사용하는가?
다형성이라는것을 사용했을 때 얻는 이점은 무엇인가? 통해 다형성을 이해하는게 쉬움
다형성을 이용한 예제코드)
abstract class Calculator{
int left, right;
// 연산을 수행할 값을 받는 메서드
public void setOprands(int left, int right){
this.left = left;
this.right = right;
}
// 두연산을 합하는 메서드(미완성 추상 메서드)
public abstract void sum();
}
// 덧셈 계산기
class CalculatorPlus extends Calculator {
@Override
public void sum(){
int result = left + right;
System.out.println("+ sum :"+ result);
}
}
// 뺄셈 계산기
class CalculatorMinus extends Calculator {
@Override
public void sum(){
int result = left + right - 1;
System.out.println("- sum :"+ result);
}
}
public class Main {
public static void main(String[] args){
// 덧셈계산기 인스턴스를 생성한다음 부모타입으로 받을수 있음
// 자식클래스로 객체를 생성했어도 부모타입으로 받을 경우 부모타입에 있는 메서드만 사용가능
Calculator plus = new CalculatorPlus();
plus.setOprands(1,2);
// 자식에서 부모에 있는 메서드를 오버라이딩 했을경우 자식 메서드 호출
plus.sum();
Calculator minus = new CalculatorMinus();
minus.setOprands(1,2);
minus.sum();
}
}
다형성을 사용하지 않은 예제 코드)
// 덧셈 계산기
class CalculatorPlus{
int left, right;
// 연산을 수행할 값을 받는 메서드
public void setOprands(int left, int right){
this.left = left;
this.right = right;
}
public void sum(){
int result = left + right;
System.out.println("+ sum :"+ result);
}
}
// 뺄셈 계산기
class CalculatorMinus{
int left, right;
// 연산을 수행할 값을 받는 메서드
public void setOprands(int left, int right){
this.left = left;
this.right = right;
}
public void sum(){
int result = left + right - 1;
System.out.println("- sum :"+ result);
}
}
public class Main {
public static void main(String[] args){
CalculatorPlus plus = new CalculatorPlus();
plus.setOprands(1,2);
plus.sum();
CalculatorMinus minus = new CalculatorMinus();
minus.setOprands(1,2);
minus.sum();
}
}
다형성이라고 하는 측면에서 계산기를 설계한다면 계산기의 공통 기능인 연산을 수행할 값을 받는 기능을 넣어주고 연산을 하는 기능을 부모 클래스에 추상 메서드로 설계를 해줌으로써 계산기의 종류가 늘어나도 부모 클래스를 상속받은 다음 오버 라이딩을 해서 알맞게 구현을 해주면 된다.
다형성을 무시하고 설계를 하게 된다면 계산기의 종류가 많아질수록 중복되는 기능들이 늘어날 것이고 뼈대가 잡혀있지 않기 때문에 여러 명이서 계산기를 종류별로 각각 만들게 된다면 프로젝트를 하면서 혼동이 일어날 가능성이 큼
무조건 다형성을 사용해서 설계를 해야 된다라는 게 아니라 상황에 따라서 다형성 측면으로 설계를 했을 때 얻을 수 있는 이점이 있다면 다형성으로 설계를 하는 것이 좋다.
(추후 확장이 없다는 가정하에 무조건 계산기의 종류가 1개라면 다형성 측면으로 설계할 필요가 없음)
'프로그래밍 언어' 카테고리의 다른 글
자바 2주차 스터디 (0) | 2021.02.18 |
---|---|
자바 1주차 스터디 (0) | 2021.02.16 |
추상클래스 , 인터페이스 개념 (0) | 2021.01.28 |
배열 vs 리스트 (0) | 2021.01.26 |
인스턴스,static 개념 (0) | 2021.01.24 |