Java/강의

[📙 Java 문법 종합반] 2-10. 객체지향 PART 4 - 다형성

가지코딩 2025. 4. 15. 20:56

📙 목차

  1. 다형성(Polymorphism)
  2. 인터페이스를 활용한 다형성
  3. 형변환(Casting)
  4. 다형성의 장점 맛보기
  5. 실습 과제

🧡 학습 목표

  • 다형성이 무엇인지 학습한다.
  • 형변환이 무엇인지 학습한다.

객체지향의 4가지 특징

  • 캡슐화 - 데이터의 보호
  • 상속 - 재사용성과 확장
  • 추상화 - 데이터의 계층적 표현
  • 다형성 - 객체지향의 꽃

1. 다형성(Polymorphism)

다형성이란?

  • 하나의 타입으로 여러 객체를 다룰 수 있는 객체지향의 4번째 특징이다.
  • 추상 계층 특징을 통해 다형성을 구현할 수 있다.

2. 인터페이스를 활용한 다형성

 

클래스 구조 참고

 

2-9. 객체지향 PART 3 - 추상화

📙 목차추상화인터페이스 상속을 활용한 추상 계층 표현클래스 상속을 활용한 추상 계층 표현실습과제🧡 학습 목표추상화가 무엇인지 학습한다.객체지향의 4가지 특징캡슐화 - 데이터의 보호

gajicoding.tistory.com

 

public class Main {
    public static void main(String[] args) {

        // 다형성 활용
        Animal animal = new Cat();
        animal.exist(); // ✅
        animal.makeSound(); // ✅
    }
}

3. 형변환(Casting)

형변환이 다형성에서 중요한 이유

  • 부모타입으로 자식타입을 다룰 수 있는 이유는 자동으로 형변환(Casting) 이 발생했기 때문이다.
  • 자식타입 → 부모타입: 업캐스팅(UpCasting)
  • 부모타입 → 자식타입: 다운캐스팅(DownCasting

 

업캐스팅(UpCasting) - 자식 → 부모

  • 업캐스팅은 부모의 타입으로 데이터를 다룰 수 있다.
  • 자식 클래스의 고유기능을 활용할 수 없다.
public class Main {
    public static void main(String[] args) {

        // 다형성 활용
        Animal animal = new Cat(); // ✅ 자동 형 변환
        animal.exist(); // ✅
        animal.makeSound(); // ✅
    }
}

 

 

다운캐스팅(DownCasting): 부모 → 자식

  • 자식 클래스의 고유 메서드를 사용할 수 있다.
public class Main {
    public static void main(String[] args) {

        // 다형성 활용
        Animal animal = new Cat();
        animal.exist();
        animal.makeSound();        
        Cat cat = (Cat) animal; // ✅ 다운캐스팅(부모Animal -> 자식Cat)
        cat.scratch(); // ✅ 자식 클래스의 기능 활용 가능
    }
}

 

! 주의 사항

  • 잘못된 다운캐스팅은 컴파일단계에서 감지할 수 없다.
  • 컴파일 시점에는 오류 없이 통과되지만 런타임시점에 ClassCastException 이 발생할 가능성이 있다.
  • 다운캐스팅을 사용할때 항상 instanceof 를 활용해야 한다.
public class Main {
    public static void main(String[] args) {

        Animal animal2 = new Dog();

        // ✅ 안전한 다운캐스팅(animal2 가 Cat 의 인스턴스 유형인지 확인합니다.)
        if (animal2 instanceof Cat) {
            Cat cat = (Cat) animal2;
            cat.scratch();
        } else {
            System.out.println("객체가 고양이가 아닙니다.");
        }
    }
}

4. 다형성의 장점 맛보기

한 가지 타입으로 유연한 프로그래밍 처리를 할 수 있다 !

public class Main {
    public static void main(String[] args) {
        Animal[] animals = {new Cat(), new Dog()};
        for (Animal animal : animals) {
            animal.makeSound();
        }
    }
}

5. 실습 과제

클래스를 활용해서 위 내용의 3단계 계층 구조를 설계해보세요.

  • 다형성을 직접 활용해보세요.
  • 업캐스팅과 다운캐스팅을 직접 구현해보세요.
  • 다운캐스팅 시 instanceof 를 사용해보세요.

(클래스 활용 참고)

 

2-9. 객체지향 PART 3 - 추상화

📙 목차추상화인터페이스 상속을 활용한 추상 계층 표현클래스 상속을 활용한 추상 계층 표현실습과제🧡 학습 목표추상화가 무엇인지 학습한다.객체지향의 4가지 특징캡슐화 - 데이터의 보호

gajicoding.tistory.com

 

LocalGame 클래스 추가

public class LocalGame extends Game {

}
public class Main {
    public static void main(String[] args) {
        Program program = new OnlineGame();
        program.install();

        Game game = (Game) program;
        game.install();
        game.play();

        Game game2 = new LocalGame();
        if (game2 instanceof OnlineGame) {
            OnlineGame og2 = (OnlineGame) game2;
            og2.checkInternet();
        } else {
            System.out.println("온라인 게임이 아니다.");
        }
    }
}