JAVA

[JAVA] 다형성(1) - 다형성 참조, 캐스팅, instanceof 연산자

준몽쓰 2025. 3. 23. 15:57

다형성

프로그래밍에서 한 객체가 여러 타입의 객체로 취급할 수 있는 능력

-> 하나의 객체가 다른 타입으로 사용될 수 있다.

 

다형적 참조

-> 자바에선 부모는 자식을 품을 수 있다.

ex) 

Parent poly = new Child();

- Parent Poly는 부모 타입이고 new Child()를 통해 생성된 결과는 Child 타입이다.

- 반대로 자식 타입은 부모 타입 못 담는다. Child child1 = new Parent(); 오류 발생

- 자식 밑에 자식 즉 ,손자 타입이 있다면 그 하위 타입도 참조 가능

 

Parent poly = new Parnet()
Parent poly = new Child() //Parent 자식
Parent poly = new Grandson() //Child 자식

 

캐스팅 (Casting)

- 타입을 변환하는 것을 말하며 그냥 형변환이라 생각하면 된다. 자바의 상속 관계에 있는 부모와 자식 클래스 간에 서로 간의 형변환이 가능

 

■ 업 캐스팅 (UpCasting)

자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것 , 쉽게 말해 현재 타입을 부모 타입으로 변경 하는 것

public class A {
   public static void main(String[] args) {
       Child child = new Child();
       Parent parent1 = (Parent) child;
       Parent parent2 = child; //위에 있는 (Parent)생략. 
       
       parent1.parentMethod();
       parent2.parentMethod();
      }
   }

- 부모 클래스 Parent, 자식 클래스 Child이다. ParentMethod() 기능을 가진 Parent 클래스만 호출 할 수있다.  지금 child는 부모 타입을 호출하고 싶으니 업캐스팅을 해야한다. 업캐스팅은 타입을 생략 가능하다.

 

 

■ 다운 캐스팅 (DownCasting)

업캐스팅 된 것을 다시 원상태로 돌리는 것이며 하위 클래스로의 다운 캐스팅을 할 때는 타입을 명시적으로 지정해줘야한다.

public class AA {
  public static void main(String[] args) {
    Parent poly = new Child(); //부모 변수가 자식 인스턴스 참조
    ((Child) poly).childMethod();
   }
 }

- 부모인 Parent 클래스가 자식의 기능을 다이렉트로 호출할려고 하면 컴파일 오류가 발생한다.

- 일시적인 다운 캐스팅이 필요하여 해당 메서드를 호출하는 순간만 다운캐스팅을 한다.

- ((Child)) poly.childMethod(); 괄호()를 더 추가 한 이유는 먼저 poly를 child 타입으로 변환하고 변환된 객체에 대해 childMethod()를 호출한다.

 

■ instanceof 연산자

원래 인스턴스의 형이 맞는지 체크하는 키워드이며 true, false로 반환한다.

instanceof 있으면 오른쪽 대상이 왼쪽 대상에 포함이 되는지 확인한다.

 

ex) parent instanceof Child //parent는 Child의 인스턴스

1) new Child() instanceof Chlid  //true

2) new Parent() instanceof Parent //true

3) new Parent() instanceof Child //false