어느언어에서나 중요한 개념인 오버로딩과 오버라이딩 개념을 확인해보겠습니다.

 

간단하게 개념은 아래와 같습니다. 

 

기본개념


overloading : 같은 메소드명을 파라미터 또는 리턴 타입을 달리 하여 다르게 생성 할 수 있는 개념

overriding : 상속관계에서 부모 클래스가 가지고 있는 메소드를 자식 클래스에서 동일 한 메소드명으로 사용하는 개념

 

모두 같은 메소드명을 어떤식으로 재사용하느냐가 중요합니다.

그럼 샘플코드를 보며 확인해보겠습니다.

 

Overriding


먼저 overriding을 확인해보겠습니다.

 

아래와 같이 Player 클래스와 SoccerPlayer 클래스를 생성했습니다.  두 클래스는 서로 상속관계입니다.

상속관계이기 때문에 SoccerPlayer클래스는 Player클래스의 모든 것(속성, 메소드)를 사용할 수 있습니다.

SoccerPlayer 객체를 하나 생성하고 shoot() 메소드를 실행해보겠습니다.

 

실행하면 아래와 같이 정상적으로 1이 출력됩니다.

 

그럼, 오버라이딩의 개념을 활용해 부모클래스의 shoot() 메소드를 자식 클래스에서 다르게 구현해보겠습니다.

SoccerPlayer 객체에서 shoot() 메소드를 다시 정의해서 로직을 구현했습니다.

실행을 해보면, 아까와 다르게 1이 출력되는것이 아닌, SoccerPlayer에서 정의한 값이 출력됩니다.

이처럼 오버라이딩은 부모클래스의 메소드를 자식클래스에서 다르게 정의해서 사용하는 것을 말합니다.

 

오버라이딩의 경우 부모 클래스와 동일한 리턴 타입과 파라미터를 가져야 합니다.

아니면 아래처럼 오류가 발생합니다.

 

 

Overloading


그럼 오버로딩 개념에 대해서 확인해보겠습니다.

오버로딩은 같은 메소드명을 매개변수(파라미터), 리턴타입을 달리해 정의하는 것을 말합니다.

 

아래와 같이 pass()라는 동일 메소드명을 다양한 방식으로 정의해보았습니다.

같은 메소드명이지만 매개변수, 리턴타입이 달라져도 동일하게 생성 및 사용이 가능합니다.

 

단 오버로딩의 경우, 매개변수(파라미터)타입은 모두 달라야 합니다.

리턴타입만 달리하는 경우 오류가 발생합니다.

 

 

LIST
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기