- 객체 지향 프로그래밍에서 폴리멀티즘은 다형성이라고도 불리며, 다양한 형태를 가진 객체가 동일한 인터페이스를 사용하여 다양한 방식으로 동작할 수 있는 능력을 의미한다.
- 폴리멀티즘은 상속과 인터페이스를 기반으로 작동한다.
- 상속을 통해 클래스들은 다른 클래스의 속성과 동작을 상속받을 수 있으며, 인터페이스는 클래스가 구현해야 하는 메서드를 정의한다.
유연성
유지 보수 용이성
확장성
가독성
폴리멀티즘은 객체 지향 프로그래밍에서 중요한 개념이며, 객체 간의 유연하고 확장 가능한 상호작용을 가능하게 한다.
SmartPhone ph2 = new MobilePhone();
SmartPhone이 MobilePhone의 상위 클래스인 경우, 컴파일 오류가 발생한다. 하위 클래스의 객체를 상위 클래스의 변수에 할당하는 것은 자바에서는 자동으로 처리되지 않아 이 경우에는 형변환을 사용하여 할당해야 한다.
MobilePhone ph2 = new SmartPhone();
SmartPhone 객체를 MobilePhone 변수에 할당하기 위해 형변환을 사용했다. 이렇게 하면 SmartPhone 객체는 MobilePhone 타입으로 취급되어 할당될 수 있게 된다.
: 상속관계에서 똑같은 함수( 리턴타입, 함수이름, 파라미터 종류와 갯수) 로 바디(중괄호 안 실행 내용)만 달리 하는 것.
( = 부모, 자식에 똑같은 함수가 존재)
인터페이스는 클래스 간의 결합도를 줄이고 유연성과 확장성을 제공하는데 주로 사용되며, 클래스는 객체의 상태와 동작을 구체화하고 구현하는 데 사용된다.
인터페이스
클래스
interface Printable { // MS가 정의하고 제공한 인터페이스
public void print(String doc);
}
//SPrinterDriver 와 LPrinterDriver를 만드시오
public static void main(String[] args) {
String myDoc = "This is a report about...";
// 삼성 프린터로 출력
Printable prn = new SPrinterDriver();
prn.print(myDoc);
System.out.println();
// LG 프린터로 출력
prn = new LPrinterDriver();
prn.print(myDoc);
}
/*
출력:
From Samsung printer
This is a report about ...
From LG printer
This is a report about ...
*/
interface Printable {
void print(String doc);
}
class SPrinterDriver implements Printable {
@Override
public void print(String doc) {
System.out.println("From Samsung printer");
System.out.println(doc);
}
}
class LPrinterDriver implements Printable {
@Override
public void print(String doc) {
System.out.println("From LG printer");
System.out.println(doc);
}
}
public class Printer {
public static void main(String[] args) {
String myDoc = "This is a report about...";
Printable print1 = new SPrinterDriver();
print1.print(myDoc);
System.out.println();
print1 = new LPrinterDriver();
print1.print(myDoc);
}
}
메서드 시그니처
인터페이스는 메서드 시그니처(메서드의 이름, 매개변수, 반환 유형)를 정의할 수 있다. 이러한 메서드 시그니처는 인터페이스를 구현하는 클래스에서 실제 메서드의 구현을 제공해야 한다.
상수
인터페이스는 상수를 선언할 수 있다. 상수는 final 및 static 한정자가 있는 필드로, 변경할 수 없는 값으로 고정된다. 인터페이스의 상수는 인터페이스를 구현하는 클래스에서 사용되거나 참조될 수 있다.