728x90
다형성(Polymorphism)
여러가지 형태를 가질 수 있는 능력을 의미, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록함으로써 다형성을 프로그램적으로 구현하였다.
하나의 동일 클래스의 메서드가 다양한 구현체로 호출된다.
다형성: 추상 클래스 상속을 통한
- `aobj.print()`로 호출가능하고, `bobj.print()`형태로도 호출 가능
- 오버라이드: 부모 메서드를 덮어쓰기
- 오버로드: 동일한 클래스에서 동일한 이름의 메서드로 파라미터만 다른 메서드
class B extends A {
private int tax = 100;
// 오버라이드 Override, Over-write
public void print() {
System.out.println(super.price + tax);
}
// 오버로드 Overload
public void print(int deliveryCharge) {
System.out.println(super.price + tax + deliveryCharge);
}
추상 클래스 용례
추상 메소드를 기반으로 다양한 구현체들을 만들수도 있는데 (인터페이스처럼) 공통 동작 공유가 필요할 시 사용
물론, 인터페이스도 디폴트 메서드를 통해 공통 동작을 지원할수 있지만, 의도치않게 구현에 열려있는 위험성
- 인터페이스의 진짜 목적은 다양한 구현을 위해 메서드 형태(타입)만을 정의해주는 것
- 꼭 적합한 용도에 맞게 사용하자
다형성: 인터페이스 구현을 통한
하나의 동일한 클래스의 메서드가 "동일한 인터페이스 | 형태 를 갖고 있기에 다양한 구현체로 호출되는 것
interface I {
// 멤버 정의 불가능 - protected int price = 1000;
public abstract void print();
}
class A implements I {
private int price = 1000;
public void print() {
System.out.println(price);
}
}
class A implements I {
private int price = 1000;
public void print() {
System.out.println(price);
}
}
인터페이스 용례
추상 메소드를 기반으로 다양한 구현체들을 만들어 활용할 때 인터페이스를 사용하는 것이 좋다.
마치 클래스를 위한 메서드 타입이라고 생각하는게 좋다.
728x90
'ASAC 웹 풀스택 > Spring Boot' 카테고리의 다른 글
Java 기본 문법 및 JVM 구성(14) - SOLID (3) | 2024.09.30 |
---|---|
Java 기본 문법 및 JVM 구성(13) - Enum 활용 (0) | 2024.09.30 |
Java 기본 문법 및 JVM 구성(11) - Generic, Interface, Abstract Class (0) | 2024.09.29 |
Java 기본 문법 및 JVM 구성(10) - final, static (0) | 2024.09.29 |
Java 기본 문법 및 JVM 구성(9) - DTO, VO (0) | 2024.09.28 |