1. 글을 작성하는 이유
오버라이딩과 오버로딩 항상 세트로 등장하는 개념이지만 시간이 지나면 헷갈리곤 합니다.
시간이 지났을 때, 작성한 글을 읽으며 기억을 떠올리기 위해서 작성합니다.
2. 오버라이딩
1). 개념
- 상속 관계에 있는 클래스 간에 같은 이름의 메서드를 정의하는 기술입니다.
- 만약 자식클래스가 부모클래스에서 선언된 것과 같은 메서드를 가질 때, 메서드 오버라이딩이라고 합니다.
2). 오버라이딩 성립조건
- 오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야 합니다. (오버라이딩 = 메서드 바디를 다시 작성하는 것)
- 접근제한자, 리턴타입, 메서드이름, 매개변수, 예외처리가 같아야 합니다. (5가지를 '메서드 시그니처' 라고 합니다.)
- 접근제한자는 조상클래스의 메서드보다 좁은 범위로 변경할 수 없습니다.
- 예외처리는 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없습니다.
- final이 지정된 메서드는 오버라이드 할 수 없습니다.
- interface를 구현하여 오버라이드 할 때는 반드시 public 접근 제어자를 사용해야 합니다.
3). @Override 명시를 권장하는 이유
- 안써도 코드는 동작하지만, 코드의 가독성을 증가시키고 컴파일러가 어노테이션이 붙은 코드에서 에러를 감지해주기 때문에 명시하는 것을 권장합니다.
4). 오버라이딩 사용이유
- 자식클래스가 부모클래스의 메서드를 상속 받아도 다른 기능을 사용하고자 하는 경우에 사용합니다.
3. 오버로딩
1). 개념
- 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것 입니다.
2). 오버로딩 성립조건
- 메서드 이름이 같아야 합니다.
- 매개변수(파라미터)의 개수 또는 순서, 타입이 달라야 합니다. (반환 타입이 다른 것은 오버로딩 성립 조건이 아닙니다!!)
3). 오버로딩 사용이유
- 메서드의 이름을 절약할 수 있습니다.
- 코드의 재사용성이 증가합니다.
4). 대표적인 오버로딩 메서드
- print() :
이 메서드는 매개변수로 지정하는 값의 타입에 따라서 호출되는 print 메서드가 달라집니다.
이를 통해서 우리는 print가 무언가를 출력한다는 점을 알 수 있고 코드의 재사용성이 증가합니다.
4. 다형성(<-> 단형성)
1). 개념
- 자바의 다형성은 객체를 다양한 형태로 사용하고 관리할 수 있는 자바의 대표적인 특징 중 하나입니다.
- 오버라이딩
- 오버로딩
- 상속의 다형성
2). 장점
- 개발자가 여러 객체를 하나의 타입으로 관리가 가능하기 때문에 코드 관리가 편해 유지보수가 용이합니다.
- 코드의 재사용성이 증가합니다.
- 확장성이 좋고, 결합도가 강하지 않은 프로그래밍을 할 수 있습니다.
3). 원리
- 실행 시점에 동적 바인딩이 일어나 부모클래스가 자식클래스의 멤버함수에 접근하여 실행할 수 있습니다.
5. 결론
오버라이딩은 부모로부터 받은 메서드의 로직(내부)을 원하는 대로 변경하는 것이고,
오버로딩은 한 클래스 내에, 여러 개의 같은 이름의 메서드를 정의 하는 것을 말합니다