함수와 메서드의 차이
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 |