JAVA 정리노트

JAVA 의 다형성

Dodledd 2024. 1. 24. 17:46

다형성이란?

다형성은 자바의 가장 중요한 3대 요소[각주:1] 중에 하나이다.

다형성은 객체에 따라 다르게 동작하게 해주거나 어떤 메소드가 다른 객체에서 다른 방법으로 동작할 수 있게 해주는 것이다.

그 예로 저번에 공부했었던 메소드 오버로드[각주:2] 또는 오버라이딩[각주:3] 도 다형성에 포함된다.

 

예시를 들어 설명하면 할아버지->아빠->나 순으로 상속이 됐다면 어떤 선언을 하냐에 따라 기능을 사용 할 수 있고 없고가

갈리게 된다. 클래스가 3개 있다고 생각해보자.  할아버지 = grandfather,  아빠 = father, 나=me 위 순서로 extends 했다.

 

부모타입 참조변수 = grand,  부모타입 객체를 다루면 밑 처럼 된다.

grandfather grand = new grandfather(); 이렇게 선언하면 할아버지는 할아버지의 기능만 사용 가능하다

 

업캐스팅!

업캐스팅은 자식클래스의 객체가 부모클래스의 객체로 형변환 되는 것이다. (큰 기능중에 조상님의 기능만 사용한다?)

grandfather gf = new father(); 실제로 쓸 수 있는 영역은 아빠기능까지 사용 가능하지만 아빠의 기능 안에 할아버지 기능을 가르키고 있기 때문에 그냥은 사용이 불가능하다.

father fa = new me(); 이것도 마찬가지로 사용할 수 있는 기능은 나로 좀 더 많아졌지만 아빠는 아빠 기능을 가르키고 있기 때문에 그냥 사용이 불가능하다.

 

 

다운캐스팅!

위의 경우를 해결하기 위해 있는게 다운 캐스팅이다.

예외로 할아버지가 나의 기능을 사용할 수 있게 해주는 것이다.

 

만약 내 클래스(me)클래스에 fight 라는 메소드가 있으면 할아버지클래스에서는 사용하지 못한다.

하지만 ((me)grand).fight(); 라고 작성한다면 강제형변환이 일어나서 (할아버지 클래스에서 적혀있지않은) = 내 클래스에 존재하는 메소드(fight) 를 사용할 수 있게 되는 것이다.

 

((자식클래스)부모클래스).자식클래스의 메소드() 로 작성하면 된다.

 

그럼 다형성을 왜 쓰는가?

다형성이라는 건 상속관계를 사용하면 발생하는데 상속관계일 때 여러가지의 객체를 하나의 타입으로 관리가 가능하다.

예를들면 부모클래스의 생성자에서 초기화 한 것을 자식객체에서 오버라이딩하거나 자식객체에서 부모객체의 생성자도 초기화가 가능하다.

위의 이유로 객체를 또 새로 만들 필요가 없다. = 재사용성이 높아진다.

또한 클래스간의 의존성을 낮춰 결합도가 낮아진다는 장점이 있다.

  1. 0.추상화 1.캡슐화 2.상속 3.다형성 [본문으로]
  2. 매개변수의 개수나 이름에 따라 컴퓨터가 인식하는 것을 다르게 하여 원하는 대로 사용할 수 있게함 [본문으로]
  3. 부모객체에서 선언된 메소드를 자식 객체에서 자식이 다르게 사용할 수 있도록 덮어쓰는 것 [본문으로]