본문 바로가기

프레임워크(Framework)/Spring

다형성?

✅ 다형성

 

1. 하나의 타입에 여러 가지 객체를 담을 수 있다.

2. 하나의 객체를 여러 가지 타입에 담을 수 있다. 

 

 

Java에서 다형성의 의미는 둘 중 무엇일까?

 

여러가지 형식(타입)에 하나의 객체가 들어갈 수 있다? 그렇다면 2번이 아닐까..?

 

 

⭐하나의 타입에 여러 가지 객체를 담는 예시 코드를 보자

Phone phone = new Phone();
Phone phone = new Galaxy();

 

동일한 타입의 변수에 여러 가지 객체를 담을 수 있다.

즉, Phone은 Galaxy와 iPhone을 둘 다 담을 수 있다.

 

 

하나의 객체를 여러 가지 타입에 담는 예시 코드를 보자

Phone phone = new Galaxy();
Galaxy phone = new Galaxy();

 

 


 

 

사실 위의 예시 코드로는 잘 와닿지 않는다..? 인터페이스 어쩌구저쩌구...

그래서 아래와 같이 두 가지 경우의 예시 코드를 작성해 보았다.

 

1.

class Phone {
    void makeCall() {
        System.out.println("Making a call");
    }
}

class Galaxy extends Phone {
    @Override
    void makeCall() {
        System.out.println("Galaxy making a call");
    }
}

class iPhone extends Phone {
    @Override
    void makeCall() {
        System.out.println("iPhone making a call");
    }
}

public class Main {
    public static void main(String[] args) {
        // Phone 타입 변수에 Galaxy 객체를 담음
        Phone myPhone = new Galaxy();
        myPhone.makeCall();

        // Phone 타입 변수에 iPhone 객체를 담음
        myPhone = new iPhone();
        myPhone.makeCall(); 
    }
}

 

2.

interface Phone {
    void makeCall();
}

interface Camera {
    void takePhoto();
}

class Galaxy implements Phone, Camera {
    public void makeCall() {
        System.out.println("Making a call");
    }
    
    public void takePhoto() {
        System.out.println("Taking a photo");
    }
}

public class Main {
    public static void main(String[] args) {
        // 하나의 Galaxy 객체를 생성
        Galaxy myGalaxy = new Galaxy();
        
        // 하나의 객체를 여러 가지 타입에 담음
        Phone phone = myGalaxy;    // Phone 타입으로 참조
        Camera camera = myGalaxy;  // Camera 타입으로 참조

        // 각 타입으로 메서드 호출
        phone.makeCall();         
        camera.takePhoto();        
    }
}

 

 

결과적으로, 

 

1. 상위 클래스(휴대폰)나 인터페이스 타입의 변수에 여러 하위 클래스 객체(아이폰, 갤럭시)를 담을 수 있다.

2. 한 객체가 여러 인터페이스를 구현함으로써, 해당 인터페이스 타입의 변수로 참조될 수 있다.

 

다형성의 의미는 ⭐둘 다 정답!!⭐이라는 것을 예시를 통해 확인할 수 있다!!

'프레임워크(Framework) > Spring' 카테고리의 다른 글

[주문을 JAVA]KPT 회고  (0) 2024.07.15
클린 코드(Clean Code)  (0) 2024.07.09
상속?  (0) 2024.07.04
페어 프로그래밍(BubbleSort)  (0) 2024.07.03
MVC 모델  (0) 2024.07.02