Java 객체 형변환(업캐스팅, 다운캐스팅)

NasK!m_311·2022년 8월 24일
0

Java

목록 보기
26/39
post-thumbnail

💡 객체 형변환

1. Java 기본 유형의 데이터들처럼 객체 참조변수의 경우에도 형변환(casting)이 이루어진다.


2. 서로 다른 클래스 유형으로부터 나온 객체 참조변수들 간의 대입에는 일정한 규칙이 있다.

	ex)		Parent parent = new Child();
    
    -> 왼쪽 항(부모클래스)과 오른쪽 항(자식클래스)의 객체 유형이 서로 다르고 상속관계에 있는 경우,
    	왼쪽 객체(부모클래스)가 오른쪽 객체(자식클래스)의 상위 클래스인 경우에만 
        '암묵적 형변환(업캐스팅)'이 일어난다.
        
        
3. 하위클래스에서 상위클래스 유형으로 할당하는 것은 가능하나, 
	그 반대의 경우 '명시적 형변환(다운캐스팅)'을 해야한다.  
    
    -> 그러나 상위클래스 유형을 하위클래스 유형으로 강제 형변환하는 경우에는,
        할당되는 객체에 따라 실행오류가 발생할 수 있다.

💡 암묵적 형변환(업캐스팅)과 메소드 오버라이드

1. 업캐스팅은 부모를 상속받는 자식객체의 기능을 부모에게 물려받은 기능만 사용하도록 제한한다.


2. 업캐스팅이 발생하게 되면, 
	'오버라이드'된 기능만 사용 가능하고, 추가적으로 구현한 기능은 사용할 수 없다.
	-> 주의할 점은, 기능의 변경이 아니라 기능의 제한이다.
    
    
3. 상속관계의 객체를 부모형태로 변환하면, 
	클래스의 종류를 구분하지 않고 일괄된 기능을 호출할 수 있다.


4. 객체가 상위클래스 형태로 업캐스팅 되더라도 오버라이드된 자신의 기능은 '잃지 않는다'.


5. 추가적으로 구현했던 기능은 사용할 수 없게 되었으므로, 
	원래의 기능을 다시 사용할 수 있는 방법이 필요해졌다.
	-> '해결책 : 다운캐스팅'.

💡 명시적 형변환(다운캐스팅)

1. 부모클래스의 객체를 자식클래스의 형태로 변환하는 것.


2. 형변환을 위해서는 변환할 '클래스이름을 명시적으로 지정'해 주어야 한다.

	ex)		Child child = (Child)parent;
    
    
3. 상속관계의 자식클래스가 부모클래스 형태로 업캐스팅된 상태를, 
	다시 원래 자식클래스의 형태로 '되돌릴 경우'에만 가능하다.
    

4. 불가능한 경우

	1) 최초 객체 생성이 부모 형태로 만들어진 경우 불가능.
    
    	ex)		Parent parent = new Parent();
        		Child child = (Child)parent;			... X
                
    2) 최초 생성된 것과 다른 형식으로 변환하는 것은 불가능.
    
    	ex)		Son son = new Son();
        		Parent parent = son;
                Daughter daughter = (Daughter)parent;  	 ... X
                
-> 위의 두 경우, 모두 문법적인 오류는 없기 때문에 이클립스에서는 에러를 검출하지 못한다.
	하지만, 프로그램을 실행시켰을 경우에는 에러가 발생한다.'(런타임 에러)'
profile
메리아빠, 먹다가 죽어도 되는 개발자.(살뺴자....)

0개의 댓글