본문 바로가기
JAVA

오버로딩(Overloading), 오버라이딩(Overriding)

by winteringg 2022. 9. 9.

1. 오버로딩 (Overloading)
1) 하나의 클래스에 같은 이름의 메서드를 여러개 정의하는 것.
  - 매개변수 개수나 자료형은 다르지만 메서드명은 같은 메서드를 여러개 정의하는 것.
2) 성립 조건
  - 메서드 이름이 같아야 함.
  - 매개 변수의 개수 또는 타입, 순서가 달라야 함.
  - 리턴(반환) 타입은 같든 다르든 상관 없음.

[오버로딩 예시]

//파라미터가 없음
int add() { return 0; }

//파라미터가 1개
int add(int a) { return a; }
    
//파라미터가 2개
long add(long a, long b) { return a + b; }
[오버로딩 틀린 예시]

int add(int a, int b) { return a + b; }

int add(int x, int y) { return x + b; }


4) 장점
  - 변수처럼 메서드 이름도 구분이 된다면, 개발자는 여러개의 이름을 가진 메서드를 구현해야 함.
  - 사용자는 그 많은 메서드를 외워야 하고, 개발자들은 메서드 작명하기에 어려움을 겪음.
  - 오버로딩을 사용하면 메소드의 이름을 절약할 수 있음.
  - 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있음.
  - 동일하거나 유사한 일을 수행하는 메서드가 전달받는 매개변수에 따라 각기 다른 연산을 하는 경우 유용함.
  - 필요한 이유는 ? 매개 값을 다양하게 받아서 처리할 수 있도록 하기 위함.

2. 오버라이딩 (Overriding)
1) 상속받은 부모 클래스의 메서드를 자식 클래스에서 재정의 하는 것.
2) 오버라이딩 조건
  - 부모 클래스의 메서드 선언부와 동일해야 함. (이름, 매개변수, 리턴 값이 모두 같아야 함.)
  - 새로운 예외(Exception)를 throws 할 수 없음.
  - 접근 제어자를 부모 클래스의 메서드보다 더 강하게, 좁은 범위로 변경할 수 없음.
    * public 을 default 나 private 으로 수정할 수 없음.
    * 반대로 default 는 public 으로 수정할 수 있음.
3) 오버라이딩 효과
  - 부모 메서드는 숨겨지는 효과 발생. 재정의된 자식 클래스의 메서드가 우선순위로 실행 됨.
4) 선언부는 바꾸지 못하고, 구현부만 수정 가능함.
5) 예외는 부모 클래스의 메서드보다 많이 선언할 수 없음.
6) @Override 어노테이션
  - 컴파일러에게 부모 클래스의 메서드와 선언부가 동일한지 검사토록 지시하는 기능.
  - 정확한 메서드 재정의를 위해 붙여주는 것이 좋음.

3. 오버로딩 vs 오버라이딩
1) 오버로딩 - 기존에 없는 새로운 메서드를 정의하는 것 (new)
2) 오버라이딩 - 상속받은 메서드를 내용을 재정의 하는 것 (change)
3) 오버로딩 : 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있음.
4) 오버라이딩 : 부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하는 것. 상속받은 메서드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩 할 필요가 생김.    

 

 

참고 : [도우출판] JAVA의 정석(3ND EDITION)-자바의 정석 최신 Java 8.0 포함 Chapter 6.객체지향 프로그래밍 |

'JAVA' 카테고리의 다른 글

Java - 제네릭스 (Generics)  (0) 2022.10.29
예외 처리 (Exception)  (1) 2022.09.10
인터페이스 (Interface)  (0) 2022.09.02
Map 컬렉션 (HashMap, TreeMap)  (0) 2022.08.28
Set 컬렉션 (HashSet, TreeSet)  (0) 2022.08.28

댓글