Language/Java

[Java] 오버로딩 & 오버라이딩 Overloading / Overriding

yujindonut 2023. 1. 31. 16:27
728x90

오버로딩(Overloading)

overloading = 과적하다

자바에서는 하나의 메소드 이름으로 여러 기능을 구현함.

 

오버로딩의 조건

- 메소드의 이름이 같아야함

- 매개변수의 개수나 타입이 달라야함

‼️ 리턴값만 다른것, 접근제어자가 다른 것은 오버로딩이 가능하지 않다.

 

오버로딩의 적용범위

같은 클래스 내에서 적용된다.

 

사용이유

- 같은 기능을 하는 메소드를 하나의 이름으로 사용가능하다

- 메소드의 이름을 절약할 수 있다.

 

print()함수를 정의한다고 생각해보자.

void print(int price);

void print(Double price, int price);

void print(String content);

다양한 타입의 매개변수들을 집어넣어도 아주 잘 출력이 되는 것을 확인할 수 있고, 수많은 메소드의 이름을 지어줘야할것을 하나의 메소드 이름으로 재사용이 가능해서 이름을 절약할 수 있다.

 


오버라이딩(Overriding)

부모클래스로부터 상속받은 메소드를 자식 클래스에서 재정의

상속받은 메소드를 그대로 사용할 수도 있고, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩해서 사용

 

오버로딩의 조건

- 메소드의 이름, 매개변수, 리턴값이  모두 같아야함

- @Override 어노테이션 사용

@Override
오버라이딩을 검증하는 기능을 하는 주석(Annotation)
오버라이딩이 실제로 시행되지 않으면 컴파일시 오류를 출력함
선언부(이름, 매개변수, 리턴값)가 부모 클래스의 메소드와 완벽히 일치해야함 

접근제어자는 다르게 설정이 가능

🫧 자식 클래스에서 오버라이딩하는 메소드의 접근 제어자는 부모 클래스보다 더 좁게 설정할 수 없음

🫧 예외는 부모클래스의 메소드보다 많이 선언할 수 없음
- 자식 클래스에서는 부모클래스의 예외범위보다 더 큰 범위의 예외를 throws 할 수 없다.

🫧 static 메소드 <-> 인스턴스 메소드 변경 불가
- 부모클래스에서 static인 것을 자식클래스에서 인스턴스메소드로 변경이 불가능하고 그 반대도 불가
- 부모클래스의 static 메소드를 자식에서 같은 이름으로 정의할 수 있지만 이것은 다시 정의하는 것이 아니라 같은 이름의 static메소드를 새로 정의하는 것이다.

 

 

728x90