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 |
댓글