봄수의 연구실

형변환(업캐스팅) 본문

DEV/Java

형변환(업캐스팅)

berom 2023. 4. 26. 19:20

형변환(업캐스팅)

형변환 (업캐스팅) 은 자바에서 하위 클래스의 객체를 상위 클래스 타입으로 변환하는 과정입니다.
업캐스팅을 사용하면 상위 클래스 타입의 참조 변수를 통해 하위 클래스 객체에 접근할 수 있으며, 이를 통해 다형성을 구현할 수 있습니다.

Example. 명시적 형변환

class Animal {
    void makeSound() {
        System.out.println("The animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("The dog barks");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("The cat meows");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal[] animals = new Animal[3];
        animals[0] = new Dog();
        animals[1] = new Cat();
        animals[2] = new Animal();

        for (Animal animal : animals) {
            animal.makeSound();
        }
    }
}


위 예제에서 Dog 클래스는 Animal 클래스를 상속받습니다.
Animal 타입의 참조 변수 myAnimalDog 객체를 할당하면서 업캐스팅이 발생합니다.
이렇게 업캐스팅된 myAnimal을 통해 makeSound() 메서드를 호출하면, 오버라이딩된 Dog 클래스의 makeSound() 메서드가 실행됩니다.

위 예제에서 Animal 타입의 배열에 Dog, Cat, 그리고 Animal 인스턴스를 저장합니다.
이를 통해 for 루프에서 각 인스턴스의 makeSound() 메서드를 호출할 때, 동적으로 적절한 메서드가 실행됩니다.
이렇게 업캐스팅과 다형성을 활용하면 코드를 더 유연하게 작성할 수 있습니다.
또한 새로운 동물 클래스가 추가되더라도 기존 코드를 변경하지 않고 쉽게 확장할 수 있습니다.

묵시적 형변환 (Implicit Type Casting)

묵시적 형변환은 컴파일러가 자동으로 수행하는 형변환으로, 작은 타입에서 큰 타입으로 변환할 때 발생합니다.
묵시적 형변환은 데이터 손실의 위험이 없기 때문에 자동으로 처리됩니다.

public class Main {
    public static void main(String[] args) {
        // 묵시적 형변환: 작은 타입에서 큰 타입으로 변환
        int myInt = 10;
        double myDouble = myInt;

        System.out.println("myInt value: " + myInt);       // 출력: myInt value: 10
        System.out.println("myDouble value: " + myDouble); // 출력: myDouble value: 10.0
    }
}

위 예제에서 int 타입의 변수 myIntdouble 타입의 변수 myDouble에 할당하면서 묵시적 형변환이 발생합니다.
이 경우, 컴파일러는 자동으로 int 타입을 double 타입으로 변환해줍니다.
이렇게 묵시적 형변환을 사용하면 데이터 손실 없이 타입 간 변환을 수행할 수 있습니다.

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

'DEV > Java' 카테고리의 다른 글

Is-A와 HAS-A 또는 Inheritance와 Composition - 🐥 카카오 테크 캠퍼스  (0) 2023.04.27
다형성(Polymorphism)  (0) 2023.04.27
Overriding(재정의)  (0) 2023.04.27
상속(Inheritance)  (0) 2023.04.27
Super 키워드  (0) 2023.04.26