ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 학원 DAY 13. 클래스 형변환
    기록 2022. 10. 2. 15:38

    자바의 형변환

    1. 기본자료형의 형변환

    정수 -> 실수

    double x = 10;    // x의 값은 10.0 이다.

    double x = (double) 250/3;    // 250250.0으로 변환한다.

    실수 -> 정수

    int x = (int) 3.14;    // x의 값은 3이다.

    정수 -> 문자

    char x = 65;    // x의 값은 ‘A'.

    system.out.println((char) 65);    // ‘A'가 출력된다.

    문자 -> 정수

    int x = 'A'    // x의 값은 65.

    int x = (int)'A' - 0    // x의 값은 65.

    정수 -> 정수

    long x = 10;    // x의 값은 4byte 10이다.(원래는 2byte였음)

     

    2. 참조자료형의 형변환

    Iphone p1 = new Iphone();

    // 클래스형변환이 발생하지 않는다.

    // 객체의 타입과 참조변수의 타입이 동일하다.

     

    Iphone p2 = new Phone();

    // 객체의 타입과 참조변수의 타입이 서로 다르다.

    // 참조변수의 타입이 객체의 하위 타입이다.

    // 클래스형변환이 발생하지 않는다.

    // 컴파일 오류다.

     

    SmartPhone p3 = new Iphone();

    // 객체의 타입과 참조변수의 타입이 서로 다르다.

    // 참조변수의 타입이 객체의 상위 타입이다.

    // 클래스형변환이 발생한다.

     

    Phone p4 = new Iphone();

    // 객체의 타입과 참조변수의 타입이 서로 다르다.

    // 참조변수의 타입이 객체의 상위 타입이다.

    // 클래스형변환이 발생한다.

     

    - 객체의 타입과 참조변수의 타입이 서로 다를 때 클래스 형변환이 발생한다.

    - 객체의 타입과 참조변수의 타입이 서로 상속관계일 때 클래스 형변환이 발생한다.

    - 객체의 타입보다 참조변수의 타입이 더 상위 타입일 때 자동 클래스 형변환이 발생한다.

    - 객체의 타입보다 참조변수의 타입이 더 하위 타입일 때 강제 클래스 형변환이 필요하다.(개발자의 개입 필요)

     

    SmartPhone p1 = new Iphone();

    원래는 Iphone 객체를 바라봐야 하지만 Iphone이 안담긴다. 그러면 super에 가서 SmartPhone이 있는지 찾는다. SmartPhone객체를 바라보게 된다. (p1SmartPhone 객체의 주소값이 담김.)

    실제로 생긴 객체는 Iphone이지만 바라보고 있는건 타입인 SmartPhone.

    바라보고 있는 지점이 달라졌다. -> 클래스형변환

    부모타입의 참조변수는 해당 타입의 객체 및 그 하위 타입의 모든 객체를 참조할 수 있다. 

    부모타입의 참조변수로 해당 타입 및 어떤 자식 객체도 연결 가능하다. 교체 가능성이 높다. 확장성이 높다. 미래의 객체도 연결할 수 있다.

    100대가 있는데 타입을 모르면 차 종류마다 100대씩의 배열을 만들어야 한다.

    하지만 모든 차가 extends Car라면 모두가 차니까

    Car[] cars = new Car[100]; 만 있으면 된다.

     

    즉, 상위클래스타입에 하위클래스타입을 담을 수 있으니까

    상속을 통해 하나의 타입에 자신과 같은 타입의 여러 객체를 담을 수 있다.

    코드의 재사용성, 코드의 중복을 줄일 수 있다.

    댓글

Designed by Tistory.