다형성(Polymorphism)과 타입 변환(casting) 연산자
타입 변환 연산자는 객체의 타입을 변경하는데 사용되며, 다형성을 구현하는데 중요한 역할을 합니다.
1. 다형성(Polymorphism) 이란?
다형성은 "하나의 인터페이스나 기능을 여러 형태로 구현할 수 있는 능력"을 의미합니다.
자바에서 다형성은 부모 클래스로부터 상속받은 자식 클래스들이 동일한 메서드를 서로 다른 방식으로 구현할 수 있는 능력을 말합니다.
다형성을 통해 코드의 재사용성과 유연성을 높일 수 있습니다.
다형성은 두 가지 방법으로 구현됩니다.
업캐스팅(Upcasting)
업캐스팅은 자식 클래스의 객체를 부모 클래스의 타입으로 변환하는 것을 말합니다.
이때 부모 클래스의 참조 변수를 사용하여 자식 클래스의 객체를 참조합니다.
업캐스팅은 자식 클래스의 특정한 기능을 숨기고, 공통적인 부분만을 활용하여 코드를 작성하는데 도움을 줍니다.
class Animal {
void makeSound() {
System.out.println("Some generic sound");
}
}
class Dog extends Animal {
void makeSound() {
System.out.println("Bark! Bark!");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 업캐스팅
animal.makeSound(); // Dog 클래스의 makeSound()이 호출됨
}
}
다운캐스팅(Downcasting)
다운캐스팅은 업캐스팅 된 객체를 원래의 자식 클래스 타입으로 변환하는 것을 말합니다.
이때 원래의 자식 클래스의 타입으로 변환하기 위해 "타입 변환(casting) 연산자"를 사용해야 합니다.
class Animal {
void makeSound() {
System.out.println("Some generic sound");
}
}
class Dog extends Animal {
void makeSound() {
System.out.println("Bark! Bark!");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 업캐스팅
Dog dog = (Dog) animal; // 다운캐스팅
dog.makeSound(); // Dog 클래스의 makeSound()이 호출됨
}
}
2. 타입 변환(casting) 연산자
타입 변환 연산자는 객체의 타입을 다른 타입으로 변환하는 데 사용됩니다.
자바에서는 두 가지 타입 변환 연산자가 있습니다.
업캐스팅(Upcasting)
업캐스팅은 자식 클래스의 객체를 부모 클래스 타입으로 변환하는 것입니다.
이때 별도의 연산자가 필요하지 않습니다.
자동으로 이루어지는 형태이기 때문에 컴파일러에 의해 자동으로 처리됩니다.
다운캐스팅(Downcasting)
다운캐스팅은 부모 클래스의 객체를 다시 원래의 자식 클래스 타입으로 변환하는 것입니다.
이때 (자식 클래스 타입)을 명시하여 타입 변환 연산자를 사용해야 합니다.
다운캐스팅은 컴파일러가 자동으로 처리하지 않기 때문에 개발자가 명시적으로 타입 변환을 해주어야 합니다.
3. 다형성과 타입 변환 연산자의 장점
- 코드의 재사용성이 높아집니다.
- 공통적인 기능을 부모 클래스에서 정의하고, 자식 클래스에서 구체적인 기능을 구현함으로써 중복 코드를 피할 수 있습니다.
- 유연성이 증가합니다.
- 프로그램의 요구사항이 변경되거나 새로운 클래스가 추가되더라도, 상속을 통해 쉽게 대응할 수 있습니다.
- 객체의 관리가 편리해집니다.
- 다형성을 이용하여 부모 클래스 타입의 배열이나 컬렉션을 사용하면, 서로 다른 자식 클래스 객체들을 한꺼번에 관리할 수 있습니다.
4. 주의 사항
- 타입 변환 연산자를 사용할 때는 적절한 타입 체크와 예외 처리를 해주어야 합니다. 잘못된 타입 변환은 런타임 오류를 발생시킬 수 있습니다.
- 다운캐스팅은 업캐스팅 된 객체를 원래의 자식 클래스 타입으로 변환하는 것이므로, 업캐스팅 이전의 객체로 다운캐스팅을 시도하면 `ClassCastException`이 발생합니다. 따라서, 다운캐스팅 시에는 반드시 적절한 타입 체크를 수행해야 합니다.
자바의 다형성과 타입 변환 연산자는 객체 지향 프로그래밍의 핵심 기능 중 하나로,
객체들 사이의 관계를 더욱 유연하고 강력하게 만들어줍니다.
잘못된 정보는 댓글로 알려주시면 감사하겠습니다.
'Java' 카테고리의 다른 글
Java - 32. 자바의 final 키워드 (0) | 2023.08.03 |
---|---|
Java - 30. 자바의 super 키워드 (0) | 2023.08.01 |
Java - 29. 자바의 this 키워드 (0) | 2023.07.31 |
Java - 28. 자바 상속(Inheritance) (0) | 2023.07.30 |
Java - 27. 자바 싱글톤 패턴(Singleton Pattern) (0) | 2023.07.29 |