오늘은 업캐스팅과 다운캐스팅에 대해 알아보겠습니다.
업캐스팅과 다운캐스팅은 우리가 사용하는 JAVA 인 객체지향 프로그래밍에서 상속 관계를 활용할 때 유용하게 사용됩니다.
1. 업캐스팅
- 업캐스팅은 자식 클래스 객체를 부모 클래스 객체 타입의 참조 변수로 참조하는 것 입니다.
- 이를 통해 부모 클래스에 정의된 메소드와 속성만 사용할 수 있으며, 자식 클래스의 고유 메소드와 속성은 숨겨집니다.
- 하지만 메모리는 여전히 자식 클래스의 형태로 존재합니다.
- Parent : 부모 클래스
- Child : Parent를 상속받는 자식 클래스
여기서 Main 클래스에서 Parent parent = new Child(); 로 업캐스팅을 받습니다.
양식은 위의 코드 처럼 "클래스타입 참조변수명 = new 실제 객체의 타입();" 가 되겠습니다.
parent 는 Parent 타입의 참조변수로 선언되었지만, 실제로는 Child 객체를 참조하고 있습니다.
그래서 parent.greet()을 호출하면 동적바인딩에 의해 Child 클래스에서 오버라이드 한 greet() 메소드가 실행됩니다.
2. 다운캐스팅
- 다운캐스팅은 부모클래스 타입으로 참조된 객체를 다시 자식 클래스 타입으로 변환하는 것 입니다.
- 부모 클래스에는 없지만, 자식 클래스에만 존재하는 메소드를 사용하고 싶을 때 다시 변환한다고 생각하면 됩니다.
- 위 예시 코드를 보면 부모 클래스인 Animal 에는 sound 메소드만 존재하고, Dog 클래스에는 bark 라는 메소드만 존재합니다. 먼저 업캐스팅으로 animal 객체의 sound 를 실행시키면, 실제 객체는 Dog 이지만 Animal 이라는 참조변수를 상속 받기 때문에 sound 메소드를 출력할 수 있습니다. 하지만 우리는 Dog 클래스의 bark 라는 메소드를 출력하고 싶습니다.
그 때는 다운캐스팅을 진행하면 됩니다.
- 다운 캐스팅의 양식 : 클래스타입 참조변수명 = (클래스타입) 객체;
- 다운캐스팅을 쓸 때는 instanceof 를 써주어야 하는데, 그 이유는 안정성과 예외 방지 때문입니다.
- 다운캐스팅을 사용할 때, 부모 클래스 타입을 자식 클래스 타입으로 변호나하렴녀 실제 객체가 자식 클래스 타입이여야 합니다. 만약 부모 클래스 타입의 객체가 실제로 자식 클래스 객체가 아니라면 다운캐스팅을 시도할 때 ClassCastException 에러가 발생합니다. 따라서 우리는 instanceof 를 사용하여 특정 클래스 타입을 안전하게 확인하여 다운캐스팅을 해줍니다.
'JAVA' 카테고리의 다른 글
[JAVA] MVC 패턴과 JDBC 를 활용한 데이터베이스 연결 (1) | 2025.01.31 |
---|---|
[JAVA] Socket으로 간단히 구현하는 클라이언트-서버 통신 (0) | 2025.01.21 |
2025.01.16 (목) 24일차 / File (0) | 2025.01.16 |
2025.01.15(수) 23일차 / exception (예외) (0) | 2025.01.15 |
2025.01.14(화) 22일차 / instanceof 와 interface (1) | 2025.01.14 |