deblog

오버라이딩과 오버로딩의 차이 본문

IT/JAVA

오버라이딩과 오버로딩의 차이

스콘_ 2021. 4. 28. 14:22
반응형

오버라이딩(Overriding)

 오버라이딩이란 상위클래스의 선언된 메서드를 하위 클래스에 기능에 따라서 메서드를 재정의하여 사용 하는 것이라고 할 수 있습니다.

자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메서드를 상속받습니다.

이렇게 상속받은 메서드는 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수도 있습니다.

 

 오버라이딩의 조건

  1.  오버라이딩이란 메서드의 동작만을 재정의 하는 것이므로, 메서드의 선언부의 기존 메서드와 완전히 같아야 합니다. 하지만 메서드의 반환 타입은 상위클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있습니다.
  2. 상위 클래스의 메서드보다 접근제어자를 더 좁은 범위로 변경 할 수 없습니다.
  3. 상위 클래스의 메서드보다 더 큰 범위의 예외를 선언할 수 없습니다.

오버라이딩 예시

abstract class Duck{
   String kind="오리";
   abstract void fly();
   // body가 없는 메서드는 하나라도 있으면
   // class에서는 반드시 클래스명 앞에 abstract를 붙여야 한다.
   //
   //실제메서드
   void swim() {
      System.out.println(kind+"가 수영을 한다!!");
   }
}
class NormalDuck extends Duck{
   // 상위에 있는 추상메서드는 하위에서 반드시 선언하여야 한다.   
   @Override
   void fly() {
      System.out.println("보통 오리는 날지 못한다");
   }
}
// 상위 인터페이스, 하위 실제 클래스
interface Flyway{
   void fly();
   default void method2() {
      System.out.println("default 실제 메서드");
   }
}
// 인터페이스 implements로 상속 받는다
class Wing01 implements Flyway{
   @Override
   public void fly() {
      System.out.println("날개1호로 하늘을 날다!");
   }
}

오버로딩(Overloading)

메서드 오버로딩이란 같은 이름의 메서드를 중복하여 정의하는 것을 말합니다.

자바에서는 원래 한 클래스의 같은 이름의 메서드를 둘 이상 가질 수 없습니다.

 

하지만 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메서드를 작성할 수 있습니다.

즉, 메서드 오버로딩은 서로 다른 시그니처를 갖는 여러 메서드를 같은 이름으로 정의하는 것이라고 할 수 있습니다,

 

이러한 메서드 오버로딩을 사용함으로써 메서드에 사용되는 이름을 절약할 수 있습니다.

또한, 메서드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 크게 신경을 쓰지 않고 호출할 수 있게 됩니다.

메서드 오버로딩은 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법 중 하나입니다.

 

 

'IT > JAVA' 카테고리의 다른 글

[JAVA] Collection (1)  (0) 2021.08.27
heap과 stack의 차이점은?  (0) 2021.04.28
AOP(Aspect Oriented Programming) 실습(3)  (0) 2021.04.17
AOP(Aspect Oriented Programming) 구현(2)  (0) 2021.04.17
AOP(Aspect Oriented Programming)란?(1)  (0) 2021.04.17
Comments