ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 업, 다운 캐스팅이란
    카테고리 없음 2022. 10. 24. 01:39

    21번째로 포스팅하게 된 내용은 업캐스팅, 다운캐스팅에 대한 내용입니다.

     

    [ 캐스팅 ]

    캐스팅이란 타입을 변환하는 것을 말하여 형변환이라고도 한다.
    자바의 상속 관계에 있는 부모와 자식 클래스 간에는 서로 간의 형변환이 가능하다.

     

    [ 업캐스팅 ]

    서브 클래스의 객체가 슈퍼 클래스 타입으로 형변환 되는 것

     

    • 자바에서 서브 클래스는 슈퍼 클래스의 모든 특성을 상속받기 때문에 서브 클래스는 수퍼 클래스로 취급될 수 있음
    • 슈퍼 클래스 레퍼런스 변수가 서브 클래스로 객체화된 인스턴스를 가리킬 수 있게 됨
    • 하위 클래스의 정보를 담을 수 있는 객체에 상위클래스의 자료형을 부여해서, 상위클래스처럼 사용하게 하는 것

     

    업캐스팅된 레퍼런스

    • 객체 내에 슈퍼 클래스의 멤버만 접근 가능

     

    [ 사용이유 ]

    다형성을 이용해서 코드 재사용성을 높이기 위해서

    상속을 받은 서브클래스가 몇 개이든 하나의 인스턴스로 묶어서 관리하기 위해서

    인스턴스 1개로 잡아서 서브클래스를 담아놓고 관리하기 위해서

    슈퍼클래스가 관리 가능

    -> 다형성: 메소드를 각각 다른 형태로 사용

    -> 슈퍼클래스를 여러 가지 형태로 만들 수 있음

     

     

    ex)

    class Person{
    	String name;
    	String id;
    	
    	public Person(String name){
    		this.name = name;
    	}
    }
    
    class Student extends Person{
    	String grade;
    	String department;
    	
    	public Student(String name){
    		super(name);
    	}
    }
    
    public class UpcastingEx {
    	public static void main(String[] args) {
    		Person p;
    		Student s = new Student("이승민");
            // 서브 클래스 객체를 우선 생성하고 생성자에 "이승민"을 넣어서 name의 값을 초기화 시켜줌
            
    		p=s; // 업캐스팅
            // 이 경우 객체는 Student형이지만 Person형 참조변수로 가르키므로 Student의 멤버 변수는 참조 할 수 없다 
    		
    		System.out.println(p.name);  // 오류 없음
            // Person형의 멤버 변수이므로 사용 할 수 있음
    		
    		p.grade = "A";  // 컴파일 오류
            // grade는 Student형의 멤버이므로 사용이 불가능 하다 (업캐스팅 하였기 때문)
            
    		p.department = "com";  // 컴파일 오류
            // department는 Student형의 멤버이므로 사용이 불가능 하다 (업캐스팅 하였기 때문)
            
    		}
    }

     

     

     

    [ 다운캐스팅 ]

    자신의 고유한 특성을 잃은 서브클래스의 객체를 다시 복구시켜주는 것을 말함

     

    • 업케스팅 된 것을 다시 원상태로 돌리는 것
    • 업케스팅이 선행 되어야만 다운캐스팅 할 수 있음
    • 명시적으로 타입을 지정해야 함

     

    class Person{
    	String name;
    	String id;
    	
    	public Person(String name){
    		this.name = name;
    	}
    }
    
    class Student extends Person{
    	String grade;
    	String department;
    	
    	public Student(String name){
    		super(name);
    	}
    }
    
    public class UpcastingEx {
    	public static void main(String[] args) {
    		Person p;
    		Student s = new Student("이승민");
            // 서브 클래스 객체를 우선 생성하고 생성자에 "이승민"을 넣어서 name의 값을 초기화 시켜줌
            
    		p=s; // 업캐스팅
            // 이 경우 객체는 Student형이지만 Person형 참조변수로 가르키므로 Student의 멤버 변수는 참조 할 수 없다 
    		
    		System.out.println(p.name);  // 오류 없음
            // Person형의 멤버 변수이므로 사용 할 수 있음
    		
            Student s1 = (Student)p; // 다운캐스팅
            // 업캐스팅 된 p를 다운캐스팅으로 객체 p를 Student형 참조변수를 가르키게 함
            
    		s1.grade = "A";  // 오류 없음
            // Student형의 멤버 변수이므로 사용 할 수 있음
            
    		s1.department = "com";  // 오류 없음
    		// Student형의 멤버 변수이므로 사용 할 수 있음        
    		}
    }

     

     

     

Designed by Tistory.