[CS][Java] 오버로딩과 오버라이딩

손경이·2024년 5월 6일
0

CS Study

목록 보기
25/25

오버로딩과 오버라이딩


오버로딩과 오버라이딩은 자바의 다형성(Polymorphism)을 구현하는 핵심 개념입니다.

용어 정리
다형성은 객체 지향 프로그래밍의 3대 특성 중 하나로, 같은 이름의 메서드나 연산자를 상황에 맞게 다르게 동작하도록 하는 것을 말합니다.

오버로딩과 오버라이딩은 객체지향 프로그래밍 기법입니다. 이름이 비슷해 보이지만 하는 역할을 아예 다릅니다.

오버로딩 : 같은 이름이지만 다른 입력값을 가지도록 구현할 수 있는 기술입니다. 인수의 개수, 인수의 타입, 인수의 순서가 다른 여러 개의 메서드를 구현할 수 있습니다. 반환 타입은 포함 되지 않습니다.

오버라이딩 : 상위 클래스를 상속(추상클래스) 받거나 또는 구현하는(인터페이스) 경우 추상 메서드를 오버라이딩 합니다. 이때 하위 클래스에서 @Override 어노테이션을 사용해서 메서드를 재정의 할 수 있습니다.


> 오버로딩(Overloading)

  • 매개변수(argument)의 개수, 매개변수의 타입, 매개변수의 순서가 다르다는 것을 의미합니다.
    • 반환 타입은 오버로딩의 조건에 포함되지 않습니다.
  • 오버로딩을 통해 하나의 메서드 이름으로 다양한 기능을 구현할 수 있습니다.
  • 컴파일러가 오버로딩된 메서드 호출을 실제 해당하는 메서드로 연결해줍니다.
    • 런타임 동안 연결이 이루어지는 것이 아닙니다.
  • 오버로딩의 대표적인 예시
    • System.out.println() 입니다.
    • println() 메서드는 여러 데이터 타입을 지원하는 오버로딩을 제공합니다.

> 오버라이딩(Overriding)

  • 상위 클래스에 있는 메서드를 하위 클래스에서 재정의 하는 것입니다.
  • 상속 관계에 있는 클래스 간에 메서드 이름, 매개변수, 반환 타입이 동일해야 합니다.
  • 최소한의 코드 변경으로 새로운 기능을 추가할 수 있게 합니다.
  • 상위 클래스를 상속(추상클래스) 받거나 또는 구현하는(인터페이스) 경우 추상 메서드를 오버라이딩 합니다. 이때 하위 클래스에서 @Override 어노테이션을 사용해서 메서드를 재정의 할 수 있습니다.
  • 추상클래스 예시
package Example;

public abstract class Animal {
    String name;
    int age;
    
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public void move() {System.out.println("이동한다");}
    public void eat() {System.out.println("먹는다");}
    public abstract void bark(); //짖는 소리는 동물마다 다르므로 추상메서드로 생성
}
package Example;

// 추상클래스 Animal을 상속 받은 Dog 클래스
public class Dog extends Animal{

    public Dog(String name, int age) {
        super(name, age);
    }
    
    // 상위 클래스의 추상 메서드를 오버라이딩해서 구현
    @Override //메서드 오버라이딩
    public void bark() {
        System.out.println("멍멍!!");
    }; 
}

추상클래스와 인터페이스


참고

0개의 댓글