Day15 - 다형성

2021. 3. 8. 13:49JAVA 공부

이번에는 다형성에 대해서 알아 봅시다

 

다형성

일단 다형성은 이러한 뜻을 가지고 있는데, 그냥 '여러가지 형태가 있다' 라고 생각하시면 될 것 같습니다

다형성에는 , 이미 배웠던 오버라이딩과 오버로딩이 있는데요

여기서 알아볼 다형성은 클래스의 상속 관계에서 일어나는 일입니다.

 

하나의 객체가 여러가지 유형으로 사용될 수 있습니다.

변수로 생각을 해봅시다. int 변수는 double 변수로 캐스팅 할수 있죠?

int a = 10;

double = a;

이런 식으로..... 그러면, a의 값은 10.0 이 됩니다.

이 형식을 고대로 클래스라고 생각을 해봅시다.

 

Parents p = new Chile();

자식 클래스가 부모 클래스로 저장이 된다.

즉. 상속을 전제하고 있습니다.

부모 클래스를 상속받는 다른 모든 자식 클래스는 이렇게 부모 클래스에 저장이 가능합니다.

 

그럼 이런 다형성이라는 기능은 왜 사용할까요?

타입을 하나로 통일하기 위해서 사용 합니다.

 

Person 부모 클래스가 있고, 자식 클래스 Student, Teacher, Employee 3개가 있다고 생각을 해봅시다.

저는 Student, Teacher, Employee 객체들을 다 같이 관리를 하고 싶어요

이럴 때 사용하라고 다형성이 있는 겁니다.

※ 그냥 Person 에서 자식클래스들을 배열로 가지고 있으면 안되나? 싶을 수 있는데, 다음 포스팅에서 알아볼게요

 

클래스에서 저장되어 있는 메서드 같은 경우. overriding 된 메서드를 실행합니다.

즉. 자식 클래스를 부모 클래스에 저장하고, overriding 되어 있는 메서드를 실행할 경우. 자식 클래스의 메서드를 실행합니다.

 

 

예제를 봅시다.

먼저 부모 클래스 A 를 만들고, A를 상속받는 자식 클래스 B,C 를 만들었습니다.

A - B 를 상속 받는 D 클래스

A - C 를 상속 받는 E 클래스

평소 저희가 이렇게 사용을 했었습니다. 그러면 이제 다형성을 적용해보죠

요렇게 사용이 가능합니다

 

자 그러면, 생각을 해봅시다. 저희 부모클래스 최상위 클래스가 뭐죠? Object 입니다.

이렇게 Object 에 모든 타입을 저장할 수 있는데, Object 에는 지금 당장 저희가 사용할 메서드가 별로 없어서, 모든 타입의 변수(값)를 다 Object로 만드는건 별로 효율적이지 않다고 합니다.

 

이번에는, 오버라이딩을 사용해서 메서드를 확인 해봅시다.

부모 클래스와 자식 클래스에 메서드 들을 만들어 주고, MainClass 에서 확인 해보겠습니다

원래 저희가 위처럼 사용을 했었습니다.

다형성을 적용해서 이렇게 사용할 수 있습니다.

그런데 보면, 부모클래스로 만들었기 때문에, 자식클래스가 가진 method03 은 오류가 나는걸 알 수 있습니다.

즉. Child 클래스가 Parent로 형변환(캐스팅) 됐다고 생각하시면 될 거 같네요.

변수로 생각을 해보면, short s = (short)10; 처럼

그러면 s에 들어갈 때, 10이 메모리 크기가 short형으로 작아져서 값이 저장이 되죠.

그런 것 처럼, 클래스도 메모리 크기가 축소된다 라고 생각하세요

실제로, c와 p1 은 같은 주소를 가지고 있습니다.

다만 p1이 축소된 범위를 가지고 있는 겁니다

 

그러면, 문제가 1개 있죠?

자식 클래스에서 가진 메서드를 사용을 못하게 되네요?

그래서 다시 사용할 수 있도록 해줄 수도 있습니다.

다만, 위 코드처럼 부모 클래스에 자식클래스를 넣어 준 상태에서만 가능합니다.

이렇게 하면 오류가 납니다 ~

 

이번에는 다형성에 대해 알아 보았습니다.

 

고생하셨습니다

 

다음은, 다형성을 이용한 메서드를 만드는 시간을 가져 보겠습니다