JAVA Programming/JAVA 개념 정리

JAVA Polymorphism Upcasting Downcasting 자바 다형성 업 캐스팅 다운 캐스팅

psy_er 2021. 11. 12. 02:11
728x90

JAVA Polymorphism Upcasting Downcasting 자바 다형성 업 캐스팅 다운 캐스팅

 

다형성

 

다양한 형태가 존재한다는 의미이다. 다형성을 이용해 프로그래밍을 유연하게 만들 수 있다. 객체의 종류에 따라 달라지는 코드 사용을 프로그래밍 시 구분하지 않고 사용할 수 있도록 해준다. 따라서 프로그래밍이 단순해진다. 참조 변수에 객체를 할당해주는 기본적인 방법은 참조 변수의 자료형과 할당하고자 하는 객체의 자료형이 일치하는 것이다.

 

 

Upcasting 업 캐스팅

 

super 클래스형 참조 변수로 sub 클래스 객체를 가리키는 데 사용이 가능하다.

Person p = new UnivStudent();
Person p = (Person) (new UnivStudent());

sub 클래스 객체의 성질은 유지하면서 자동적으로 형 변환하는 것처럼 객체가 할당된다. Object 클래스형 참조 변수는 모든 클래스의 super 클래스이므로 모든 객체를 가리키는 데 사용 가능하다.

 

 

Downcasting 다운 캐스팅

 

기본적으로 다운 캐스팅은 불가능하다. 업 캐스팅된 참조 변수를 다시 다운 캐스팅해 자기 자신과 똑같은 형식으로 선언하는 것은 가능하다.

 

다형성 활용

 

다형성은 객체 배열에서 super 클래스형 객체 배열을 선언할 시 다양한 종류의 sub 클래스 객체를 포함시킬 수 있다. 매개변수에서 super 클래스형의 매개변수는 다양한 종류의 sub 클래스 객체를 넘겨받을 수 있다. 업 캐스팅된 참조 변수의 sub 클래스 멤버 중 상속받은 멤버에만 직접 접근이 가능하다. 만약 멤버가 오버 라이딩되었다면 자동으로 sub 클래스에서 정의된 것으로 접근이 된다. 상속받지 않은 멤버에 접근하기 위해서는 다운 캐스팅을 한 뒤에 조작해야 한다.

 

UnviStudent s = (UnviStudent) p; // 다운캐스팅 예1
s.WhoAreYou();
((UnviStudent)p).WhoAreYou(); // 다운캐스팅 예2

 

instanceof 연산자

 

참조 변수가 참조하고 있는 객체가 명시한 클래스로부터 생성되었는지 검사하여 boolean 값을 반환하는 연산자이다. super 클래스의 배열/매개변수를 통해 접근되는 객체의 실제 자료형을 확인할 수 있다. sub 클래스에 새로 추가된 멤버를 접근할 때 필요하다.

 

Object 클래스의 equals() 재정의

 

public boolean equals(Object obj){
    boolean result = false;
    if(obj != null && obj instanceof Person){ // obj가 참조되어있고, Person이 아닐때
        Person p = (Person) obj; // 다운캐스팅
        if((age == p.age)&& name.equals(p.name))
            return true;
    }
    return result;
}
728x90