Java의 다형성

zihooy·2023년 5월 3일
0

Java Programming

목록 보기
8/21
post-thumbnail

Java의 기본 개념 중 다형성에 대해 알아보자

🏹 다형성

다형성이란, 여러가지 형태를 가질 수 있는 것을 말한다.

다음의 예시를 통해 이해해보자.

동물의 울음소리를 출력하는 프로그램을 작성한다고 하면,
아주 기본적으로는 각 동물마다 cry() 메소드를 선언할 수 있다.

그러나 이는 새로운 동물이 추가될 때마다 작성해야 하는 코드가 추가되므로 비효율적이다 !

하지만 만약 cry() 메소드를 가진, Animal이라는 class를 extends한다면..?

// 이 Animal을 만든 시점에는 어떤 결과(..., 어흥1, 어흥2)가 나올지 모른다 >> 다형성 프로그램 
class Animal {
	void cry() {
		System.out.println("...");
	}
}

class Tiger extends Animal {
	@Override
	void cry() {
		System.out.println("어흥1");
	}
}

class Lion extends Animal {
	@Override
	void cry() {
		System.out.println("어흥2");
	}
}

class Snake extends Animal {
}

public class hello {
	public static void main(String[] args) {
		Animal a = new Tiger();	//업캐스팅 
		a.cry();
		Animal b = new Lion();	//업캐스팅 
		b.cry();
		Animal c = new Snake();	//Snake에 cry가 없으므로 부모에 있는 cry 호출 
		c.cry();
		
		
		//실행의 흐름이 다를 뿐(아래 코드는 부모로 올라가 않음), 실행 결과는 같다. 
		Tiger a1 = new Tiger();	
		a1.cry();
		Lion b1 = new Lion();	
		b1.cry();
		Snake c1 = new Snake();	
		c1.cry();
	}
}

class Animal {
	void cry() {System.out.println("...");}
}

class Tiger extends Animal {
	void cry() {System.out.println("어흥1");}
}

class Lion extends Animal {
	void cry() {System.out.println("어흥2");}
}

class Zoo {
//	void sound(Tiger t) {
//		t.cry();
//	}
//	void sound(Lion l) {
//		l.cry();
//	}
// 이렇게 하면 새로운 동물이 들어올 때마다 코드를 수정해야 함..
	
	void sound(Animal a) {	// 어떤 동물이 들어와도 가능 ~
		a.cry();
	}
}

public class hello {
	public static void main(String[] args) {
		Zoo z = new Zoo();
		z.sound(new Tiger());
		z.sound(new Lion());
		
	}
}

아래와 같이 sound() 안에 Animal 객체를 넣는다면,

	void sound(Animal a) {	// 어떤 동물이 들어와도 가능 ~
		a.cry();
	}

아래와 같이 간편하게 여러 동물을 생성할 수 있다 !

		z.sound(new Tiger());
		z.sound(new Lion());
profile
thisIsZihooLog

0개의 댓글