본문 바로가기

backup

오버로딩과 오버라이딩

C++이나 Java 같은 객체지향 언어를 하면서 혼동 되는 개념 중 하나가 오버로딩과 오버라이딩입니다.

 

 

 

 

 

 

 

오버로딩은 메소드의 이름은 같지만 매소드 변수 타입이 다른 형태로 새로운 매소드를 추가하는 것을 의미합니다.

반면 오버라이딩은 상속 받은 메소드의 내용을 변경하는 것입니다. 매소드 변수 타입이 이 경우 같습니다.

 

 

class C{

public :

virtual int a(int);

void b(C*);

 

이라는 기반 클랙스가 있을 때

 

 

class D : public C

{

public :

int a(int);

int b(C*);

}

 

라고 정의를 하면 a라는 매소드는 이 클래스에서 상속을 받아서 재정의를 하였는데, 매소드의 이름과 매소드 변수가 모두 같습니다. 이 경우를 오버라이딩이라고 합니다.

 

반면 b라는 매소드는 반환하는 변수 타입이 void에서 int로 변했습니다. 이경우 매소드의 이름은 같지만 완전히 새로운 매소드가 된 것입니다. 이 경우를 오버로딩이라고 합니다.

 

새로운 클래스를 만들어서 연산자 오버로딩을 하는데, 정수 + 정수는 이미 정의가 되어 있지만, class A + class A는 정의 되어 있지 않았으므로 매소드 이름만 같은 새로운 매소드를 만들어 내는 것을 의미합니다.