BackEnd/Java

[Java]매개 변수의 다형성 (Polymorphism)

Hojung7 2024. 7. 30. 21:37

#예제1

[Service]

package pkg1.service;

import pkg1.dto.Child;
import pkg1.dto.Parent;

public class PolyService {

	
	/** [매개 변수의 다형성]
	 * 객체가 가지고 있는 필드 정보 출력
	 * @param obj : Object 객체를 참조하는 참조 변수
	 * 		- Object -> 모든 클래스의 최상위 부모!!
	 */
	public void printObject(Object obj) {
		
		// Object obj가 참조할 수 있는 객체
		// -> Object / Parent / Child
		// -> 왜? 다형성 - 업 캐스팅 때문에 참조 가능
		System.out.println("----------------------------------");
		
		// 전달 받은 주소의 객체가 Child 객체인 경우
		if(obj instanceof Child) { 
			System.out.println("[Child]");
			
			Child ch = (Child)obj;  // obj 다운 캐스팅
			// 김 / 50000 / 소나타
			System.out.printf("%s / %s /%s \n", 
								ch.getLastName(), ch.getMoney(), ch.getCar());
			
		}
		// 전달 받은 주소의 객체가 Parent 객체인 경우
		else if(obj instanceof Parent) {
			System.out.println("[Parent]");
			 
			Parent p = (Parent)obj;  // Parent로 다운 캐스팅
			
			System.out.printf("%s / %s \n",
							p.getLastName(), p.getMoney());
		}
		
		// 전달 받은 주소의 객체가 Object 객체인 경우
		else {
			System.out.println("[Object는 필드 없음]");
		}
		System.out.println("----------------------------------");
	}
	
	
	/**
	 * 매개 변수의 다형성 테스트
	 */
	public void test1() {
		
		Object o = new Object();
		
		Parent p = new Parent("홍", 100);
		
		Child c = new Child("박", 333, "모닝");
		
		printObject(o);
		printObject(p);
		printObject(c);
		
		// -> 매개 변수의 다형성이 적용되지 않았다면
		// 각 자료형 별로 매개 변수를 전달 받는 메서드를 
		// 계속 오버로딩 해야하는 문제 발생!!

 

#결과

 

#예제2

전달 받은 값에 따라 알맞은 객체를 만들어서 반환하는 메서드

 

[Service]

/**
	 * 전달 받은 값에 따라 알맞은 객체를 만들어서 반환하는 메서드
	 * @param num : 1 - Object / 2 - Parent / 3- Child
	 * @return 생성된 객체 반환
	 */
	public Object getInstance(int num) {
		if(num == 1) return new Object();
		// 생성된 객체 타입 : Object
		// 주소 : 0x100
		
		if(num == 2) return new Parent();
		// 생성된 객체 타입 : Parent
		// 주소 : 0x200
		
		return new Child();
		// 생성된 객체 타입 : Child
		// 주소 : 0x300
		
	}
	
	public void test2() {
		
		Object o1 = getInstance(1); //  Object 객체, 0x100
		
		// 부모 참조변수 = 자식 객체 -> 업 캐스팅 적용
		Object o2 = getInstance(2); // Parent 객체,  0x200 
		Object o3 = getInstance(3); // Child 객체,    0x300
		
		// 매개 변수의 다형성 적용 확인 메서드 호출
		printObject(o1);
		printObject(o2);
		printObject(o3);
		
	}

 

#결과

 

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

[Java]다형성(Polymorphism) 바인딩  (0) 2024.07.31
[Java]반환형의 다형성(Polymorphism)  (0) 2024.07.30
[Java]OOP 메서드(method)  (0) 2024.07.25
[Java]OOP Static  (0) 2024.07.23
[Java]OOP_필드(Field)  (1) 2024.07.23