둘다 OOP의 개념에서 나오는 것인데.
오버로딩과 폴리몰피즘의 차이는 뭘까.
오버로딩은 함수의 "재정의" 이다. 그 재정의 된 함수 사이에는 구별되는 특징이 있다. 리턴값이 다르다던지, 인풋갯수가 다르다던지, 인풋타입이 다르다던지...
비록 함수의 이름은 같더라도, 구별되는 특징에 따라 다른 함수가 적용되는 것이다. 예를 들어.
public int add (int a , int b)
public double add (double a, double b)
정수를 더하나 실수를 더하나 우리는 같은 더하기 이므로,
직관적인 add라는 작업단위로 읽힐 수 있도록, 이렇게 해주는 것이다.
OOP의 강화라고 볼 수 있지...
폴리몰피즘 다형성? 상속이란 것으로 나타나는 건데 조금 복잡하지만 이해하면 왜 이렇게 쓰는지 알 수 있을듯 하다. 상속을 한다는 것은 부모객체로부터의 공통점이 있다는 얘기이다. 다시 말해서 B, C, D 클래스가 A클래스를 부모 클래스로 뒀다면, A클래스라는 공통점이 B , C, D 사이에 있는 것이다. 그 공통점이 얼마나 클 지 모르겠지만, 주로 우리는 이것을 분류하거나 그룹을 나눌때 사용한다.
일단 간단하게 사용하는 예를 보자.
B클래스가 A클래스를 부모로 두고 있다.
A obj = new B();
이렇게 사용할 수 있다는게 폴리몰피즘이다. 원래는 알다시피 A obj = new A(); 와 같이 앞뒤가 같아야 한다. 하지만 상속관계에 있는 클래스에 한해서 다양한 형태를 가질 수 있다. 이걸 잘 사용하는 예를 들어보자.
곤충 a = new 개미();
곤충 b = new 잠자리();
곤충 c = new 메뚜기();
개미, 잠자리, 메뚜기 클래스는 곤충이란 클래스를 상속해서 사용한다. 그리고 선언을 저렇게 하는 것이다. 저렇게 하면 저 한줄 만으로 상속에 대한 정보를 알 수 있을 뿐만이 아니라, 저렇게 여러 정보가 있을 때 코드를 읽고 구조를 파악하는데 있어서 더욱 직관적이라서 좋다.
'공부생각 > 언어잡지식' 카테고리의 다른 글
[언어잡지식] 함수의 인풋에 배열(array) 직접 넣기 (0) | 2009.06.17 |
---|