본문 바로가기
Java의 정석/객체지향 프로그래밍 II

다형성 (Polymorphism)

by Hwanii_ 2023. 6. 6.
728x90

 

 

 

 

함수와 메서드의 차이

 

1. 함수 :

일반적인 프로그래밍 언어에서 흔히 만들 수 있다.

주어(주체)가 존재 하지 않는다.

== 객체가 존재 하지 않는다.

 

2. 메서드 :

객체지향언어 에서만 작성이 가능 하다.

주어(주체)가 존재 한다.

기존에 사용하는 함수에 주어(주체)를 부여.

 

객체가 실행하는 함수  == 인스턴스 메서드.

 

함수를 실행 시키는 주어(주체) == 객체 (== 참조변수 // 참조변수가 객체를 가리키므로)

 

[ 정리 ]

 

다형성 :

같은 함수를 실행시켜도, 주어(주체)에 따라 다른 기능이 실행되는 현상을 말한다.

 

==

참조변수가 어떤 타입이냐에 따라,

사용할 수 있는 멤버 (멤버변수 + 인스턴스 메서드)의 개수가 달라지거나,

같은 이름의 메서드라도, 다른 기능이 실행되는 현상을 볼 수 있다. (오버라이딩)

 

예시 1)

 

강아지.울음소리(); // 멍멍

고양이.울음소리(); // 야옹

 

서로 같은 이름의 울음소리() 메서드를 사용했지만,

주어(주체) (== 참조변수) 가 달라서,

서로 다른 울음소리가 나오는것을 확인 할 수 있다.

 

예시 2)

 

abstract 포켓몬

abstract 공격()

 

포켓몬[] datas = new 포켓몬[2];

 

datas.add(new 푸린());
datas.add(new 고라파덕());

 

푸린

푸린.공격() // 노래부르기

 

고라파덕

고라파덕.공격() // 물대포

 

datas.get(0) // == 푸린
datas.get(1) // == 고라파덕

 

datas.get(0).공격() :

공격() 메서드는 추상 클래스인 abstract 포켓몬 내부에 있는 추상 메서드 이였다.

그런데, 실제 이 공격() 메서드를 수행하는 주어(주체, 객체, 참조변수) 는 푸린 이다.

이 공격() 메서드는 푸린이 사용하는 것이다.

그래서, 푸린은 노래부르기를 한다.

 

== 동적 바인딩 (오버라이딩이 선행 되어 있어야 한다 !) 

 

 

 

반응형

'Java의 정석 > 객체지향 프로그래밍 II' 카테고리의 다른 글

instanceof 연산자  (0) 2023.06.06
참조변수의 형변환  (0) 2023.06.06
캡슐화와 접근 제어자  (0) 2023.06.06
제어자  (0) 2023.06.06
생성자 super()  (0) 2023.06.05