⚡ 개요
업캐스팅(upcasting)과 다운캐스팅(downcasting)은 객체 지향 프로그래밍에서 클래스의 상속과 관련된 개념이다.
말 그대로 업캐스팅은 하위 클래스에서 상위 클래스로 형 변환하는 것을 의미하고 다운캐스팅은 상위 클래스에서 하위 클래스로 형 변환을 하는것을 의미 한다.
⚡ 예시
다음과 같은 클래스 구조가 있다고 가정해보자.
class Animal {
public void move() {
System.out.println("Moving...");
}
}
class Dog extends Animal {
public void bark() {
System.out.println("Barking...");
}
}
위의 코드에서, Dog 클래스는 Animal 클래스를 상속하고 있다. 이 경우, Dog 클래스의 인스턴스는 Animal 클래스의 참조 변수에 할당할 수 있게된다.
Dog dog = new Dog();
Animal animal = dog; // Upcasting
Animal animal = new Animal();
Dog dog = (Dog) animal; // Downcasting
위의 경우 기본적으로 업캐스팅과 다운캐스팅을 한 경우 이며, 다운 캐스팅을 할때는 명시적으로 형 변환을 수행 해야 한다.
만약 형 변환을 하지 않은 경우 다음과 같은 에러가 발생 한다. 따라서 다운캐스팅은 주의해서 사용해야 한다
Animal animal = new Animal();
Dog dog = animal; // Error: Can't assign a variable of a higher type to a variable of a lower type
⚡ 사용 이유
업캐스팅과 다운캐스팅은 객체 지향 프로그래밍에서 중요한 개념이다. 이를 통해 상속과 다형성을 구현할 수 있기 때문이다.
업 캐스팅을 통해서, 상위 클래스 타입으로 변수를 선언하고 하위 클래스의 객체를 할당할 수 있다. 이렇게 하면, 상위 클래스의 메소드만 사용할 수 있지만 하위 클래스에서 추가로 구현한 메소드는 사용할 수 없다. 즉, 상위 클래스에서 공통적으로 사용되는 메소드를 정의하고, 하위 클래스에서 이를 구현함으로써 유연하게 코드를 작성할 수 있습니다.
다운 캐스팅의 경우는 반대로 하위 클래스에서 추가로 구현한 메소드를 사용할수 있게 된다.
❗ 주의 사항
- 다운캐스팅을 사용할 때는 반드시 형 변환을 명시적으로 수행
- 만약 다운캐스팅이 필요한 경우가 많다면, 객체 지향 설계를 다시 검토해보는 것이 좋다.
(다운캐스팅을 자주 사용하는 경우, 이는 상속 구조가 잘못 설계되어 있다는 것을 의미할 수 있다.)
⚡ 생각
업캐스팅과 다운캐스팅은 프로젝트의 규모가 크고 공통적으로 사용이 필요한 경우 코드량을 최소화 하고 확장성이 높은 프로그램을 만들수 있다는 장점이 있다고 생각한다.
'CS' 카테고리의 다른 글
[CS] web 개발 기본 지식 정리 (MPA, SPA, SSR, CSR) (0) | 2023.06.25 |
---|---|
[CS] 오토 박싱 & 오토 언박싱에 대한 내용 및 성능 정리 (0) | 2023.02.19 |
[Git] git -f 명령어 위험성 공유 (0) | 2022.10.23 |
네트워크에 대한 기본 개념 정리 (0) | 2022.10.12 |
HTTPS 개념 및 내용 정리 (0) | 2022.10.08 |