Java/JAVA 100 문제 풀이
자바 part.4 문제풀이 - 다형성 이해 : 객체 배열과 매개변수 활용
진이최고다
2023. 7. 27. 23:02
예제
class Person{}
class Batman extends Person{}
class Superman extends Person{}
public class Oop_polymorphism04{
public static void main(String[] args) {
// [1] : 배열에서 다형성을 사용할 수 없다면?
// 배열 -> 동일한 타입의 데이터를 하나로 묶어서 관리하는 자료구조. -> 다형성이 없다면 각 객체별로 관리를 해야한다.
Person[] persons = new Person[10]; // Person 전용
persons[0] = new Person();
Batman[] batmans = new Batman[10]; // Batman 전용
batmans[0] = new Batman();
// batmans[1] = new Person(); // error
// [2] : 배열에서 다형성을 사용할 수 있기에
Person[] superman = new Person[10];
superman[0] = new Superman();
superman[1] = new Person();
// [3] : 매개변수의 다형성
// 프로그래밍 언어에서 함수나 메서드를 호출할 때는 그에 맞는 적절한 파라미터를 보내줘야한다.
// System.out.println()메서드의 경우 어떤타입, 겍체를 매개변수로 받더라도 error없이 해당 객체의 값을 출력
// 그것이 가능한 이유 -> 바로 다형성을 활용하고 있기 때문이다.
// 실제 메서드의 API를 보면 -> public void println(Object)로 되어 있기에 어떤 객체타입이 전달되더라도 error없이 출력가능하다.
// 결론적으로, Object는 가장 최상위 조상이므로 어떤 객체를 보내도 그 보다 상위 타입이 된다.
System.out.println(new Person());
System.out.println(new Batman());
System.out.println(new Superman());
}
}
다형성 없이 배열 사용하기 (배열의 타입 제한)
Java에서 배열이 동일한 타입의 데이터를 관리하는 엄격한 자료구조라는 사실을 이해하는 것이 중요하다. 만약 다형성이 없다면 각 객체별로 별도의 배열을 관리해야 한다. 이는 코드 유지보수가 어려워질 수 있고, 타입에 따라 다양한 배열을 생성해야 하므로 코드의 가독성이 떨어진다.
배열에서 다형성 활용하기(배열의 유연성)
Java의 다형성 기능 덕분에, 부모 클래스 타입의 배열을 생성하고, 이 배열에 자식 클래스의 인스턴스를 저장할 수 있다. 이는 배열의 활용성을 극대화하고, 동일한 상위 클래스를 상속받는 다양한 객체를 하나의 배열에서 관리할 수 있게한다.
매개변수와 다형성(메서드의 유연성)
다형성은 매개변수가 처리할 수 있는 객체의 유형을 확장하면서도 메서드의 시그니처를 단순화하는데 중요한 역할을 한다. "System.out.println(Object)"와 같은 메서드는 다형성 덕분에 ㅇ떤 객체 타입이 전달되더라도 Error없이 출력이 가능하다. Object 클래스는 모든 클래스의 취상위 클래스이므로, "Object" 타입의 매개변수는 어떤한 객체도 받아들일 수 있다.