IT/JAVA

[JAVA] 자바 기초 복습 (Chapter.07) part2

j8970 2025. 2. 28. 11:44

📅 학습 기간: 2월 2주차
🎯 학습 내용: 형변환 / 다형성


📌 1. 형변환 (Type Casting)

💡 데이터 타입을 변환하는 과정
✅ 기본 데이터 타입과 클래스 타입 변환으로 나뉨
✅ 형변환을 통해 메모리를 효율적으로 사용하고, 다형성을 활용 가능


🔹 1.1 기본 데이터 타입 변환

변환 종류 설명
자동 형 변환 (묵시적 변환) 작은 범위 → 큰 범위로 변환 시 자동 수행
강제 형 변환 (명시적 변환) 큰 범위 → 작은 범위로 변환 시 명시적으로 변환 필요

✅ 자동 형 변환 (묵시적 변환)

int num = 10;
double doubleNum = num; // int → double 자동 변환

✅ 강제 형 변환 (명시적 변환)

double doubleNum = 10.5;
int num = (int) doubleNum; // double → int 강제 변환 (소수점 손실 발생)

🔹 1.2 클래스 타입 변환

변환 종류 설명
업캐스팅 (Upcasting) 자식 클래스 → 부모 클래스 (자동 변환)
다운캐스팅 (Downcasting) 부모 클래스 → 자식 클래스 (강제 변환)

✅ 업캐스팅 (자동 변환)

class Parent {
    void displayInfo() {
        System.out.println("부모 클래스입니다.");
    }
}

class Child extends Parent {
    @Override
    void displayInfo() {
        System.out.println("자식 클래스입니다.");
    }
}

Parent parent = new Child(); // 업캐스팅 (자동 변환)
parent.displayInfo(); // "자식 클래스입니다."

업캐스팅된 객체는 부모 클래스의 메서드만 호출 가능

✅ 다운캐스팅 (강제 변환)

Child child = (Child) parent; // 다운캐스팅 (명시적 변환 필요)
child.displayInfo(); // "자식 클래스입니다."

⚠️ 다운캐스팅 시 객체의 실제 타입을 반드시 확인해야 함

if (parent instanceof Child) {
    Child child = (Child) parent;
    child.displayInfo();
}

📌 2. 다형성 (Polymorphism)

💡 하나의 객체가 여러 타입으로 동작할 수 있는 성질
상속 + 메서드 오버라이딩 + 클래스 타입 변환 조합으로 사용
✅ 코드의 재사용성을 높이고 유지보수를 쉽게 함


🔹 2.1 다형성 적용

class Vehicle {
    void move() {
        System.out.println("이동 중...");
    }
}

class Bus extends Vehicle {
    @Override
    void move() {
        System.out.println("버스를 타고 이동합니다.");
    }
}

class Subway extends Vehicle {
    @Override
    void move() {
        System.out.println("지하철을 타고 이동합니다.");
    }
}

✅ 다형성 적용 예제

Vehicle bus = new Bus();
Vehicle subway = new Subway();

bus.move(); // "버스를 타고 이동합니다."
subway.move(); // "지하철을 타고 이동합니다."

부모 타입으로 자식 객체를 참조할 수 있어 코드의 유연성이 증가


🔹 2.2 instanceof 연산자

💡 객체가 특정 클래스의 인스턴스인지 확인하는 연산자
다운캐스팅 전 반드시 확인 필요

if (bus instanceof Bus) {
    System.out.println("bus는 Bus 클래스의 인스턴스입니다.");
}

true 반환 시 해당 타입으로 변환 가능


🎯 소감

📌 업캐스팅과 다운캐스팅의 원리를 이해하는 것이 중요하다!
📌 다형성을 활용하면 코드의 재사용성과 유지보수성이 향상된다!
📌 instanceof를 통해 안전하게 타입 변환을 수행할 수 있다!

🚀 마무리
이번 학습을 통해 형변환과 다형성의 개념을 깊이 이해할 수 있었다! 🎯