ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 다형성
    Java 2023. 8. 30. 09:47

    다형성

    • 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
    • 같은 코드에서 여러 다른 실행 결과가 나옴
    • 정보은닉,상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
    • 다형성을 잘 활용하면 유연하고 확장성 있고, 유지보수가 편리한 프로그램을 만들수 있음
    public class Animal {
    
    	public void makeSound() {
    		System.out.println("동물이 소리를 내고 있습니다.");
    	}
    
    }
    public class Bird extends Animal {
    	
    	@Override
    	public void makeSound() {
    		System.out.println("새가 지저귀고 있습니다.");
    	}
    	
    	public void fly() {
    		System.out.println("새가 날아갑니다.");
    	}
    }

    다형성을 사용하는 이유

    • 상속과 메서드 재정의를 활용하여 확장성 있는 프로그램을 만들 수 있음
    • if else if 문으로도 구현할 수 있지만 코드의 유지보수가 어려움
    • 상위클래스에서는 공통적인 부분을 제공하고 하위 클래스에서는 각클래스에 맞는 기능 구현
    • 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링 할 수 있음

    업캐스팅

    • 업캐스팅은 하위 클래스의 객체를 상위 클래스 타입으로 변환하는 것을 말합니다 (데이터 손실이 없음)
    • 업캐스팅은 자동적으로 이루어지므로 별도의 형변환 연산자가 필요없음 
    Animal animal = new Bird();
    //animal.fly(); // 데이터 타입이 Animal이기때문애 오류 발생

    다운 캐스팅

    • 업캐스팅된 객체를 다시 원래의 하위 클래스 타입으로 변환 시키는것
    • 수동적으로 형변환 연산자를 사용해야함
    • 업캐스팅된 객체를 하위 클래스에 메서드나 속성을 사용하기 위해 필요
    Bird bird = (Bird)animal;
    bird.fly();
    • bird의 데이터 타입은 Bird이기 때문애 성공적으로 실행, (Bird)animal을 animal로 변경하면 animal의 데이터 타입이 Animal이기 때문애 오류 발생 

    배열 활용

    • 다형성,업캐스팅,다운캐스팅을 활용하여 배열을 이용하여 코드를 작성할 수 있다.
    public static void main(String[] args) {
    		Animal[] animals = new Animal[3];
    		animals[0] = new Animal();
    		animals[1] = new Bird();
    		animals[2] = new Animal();
    		
    		System.out.println("======================");
    		// 0 -- Animal --> if --> false  
    		// 1 -- Bird --> if --> true 
    		// 2 -- Animal --> if -- false 
    		for (Animal a : animals) {
    			a.makeSound();
    			//a.fly(); 데이터 타입을 확인하고 싶다면 instanceof 연산자 
    			if(a instanceof Bird) {
    				Bird targetBird = (Bird)a;
    				targetBird.fly();
    			}
    			System.out.println("----------");
    		}
    		
    	}

    'Java' 카테고리의 다른 글

    [Java] 템플릿 메서드  (0) 2023.09.04
    [Java] 추상 클래스  (0) 2023.09.04
    [Java] 상속  (0) 2023.08.22
    [Java] Class 만들기  (0) 2023.08.21
    [Java] C R U D  (0) 2023.08.21
Designed by Tistory.