1. 개요
자바 생성자 게시물에서 this 키워드를 설명할 때, 오버로딩의 정의를 간략하게 설명하고
상세한 것은 추후에 하겠다고 하며 넘어간 적이 있었다.
이번엔 오버로딩에 대해 좀 더 상세하게 설명해 보도록 하겠다.
2. Overloading
① 오버로딩의 정의
- 자바에서 메서드를 다루는 기법 중 하나
- Overloading: 과적하다, 너무 많이 주다. (사전적인 의미)
- 매개변수의 개수, 타입을 다르게 해서 같은 이름의 메서드가 존재할 수 있게 하는 기법
- 오버로딩, 메서드 오버로딩은 객체 지향 프로그래밍 언어의 특징 중 하나인
'다형성(Polymorphism)'을 구현하는 방법 중 하나이다.
아래는 메서드 오버로딩의 성립 조건이다.
자바로 프로그래밍을 하다 보면 오버로딩을 활용할 일도 많으니 잘 기억해 두자.
- 메서드의 이름이 같아야 한다.
- 메서드의 매개변수의 개수, 타입은 달라야 한다.
② 오버로딩 예제
메서드 오버로딩의 정의와 성립 조건에 대해 알아봤으니
간단한 예제를 풀어보고 설명을 마치도록 하겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | //메서드 오버로딩 예제 //오버로딩된 메서드 설명하기. class Main { public static void main(String[] args) { Example a = new Example(); a.plus(5, 10); //15 a.plus(5, 10, 15); //30 a.plus("Hello", "_World"); //Hello_World } } class Example { //int형 메서드 plus int plus(int a, int b){ System.out.println(a + b); return a+b; } //Overloading //int형 메서드 plus 오버로딩 //매개변수의 개수를 다르게 함. int plus(int a, int b, int c){ System.out.println(a + b + c); return a+b+c; } //Overloading //int형 메서드 plus 오버로딩 //메서드의 타입, 매개변수의 타입을 다르게 함. (개수는 같음) String plus(String a, String b){ System.out.println(a + b); return a+b; } } | cs |
상단의 소스코드를 확인해 보면 메서드의 이름은 'plus'로 똑같이 했지만
리턴타입을 같게 했지만 매개변수의 개수를 다르게 하거나
리턴타입과 매개변수의 타입을 다르게 했지만 개수를 같게 해서
메서드 오버로딩을 구현한 것을 확인할 수 있을 것이다.
이제 프로그램을 실행해 보자. 아래와 같은 출력 결과가 나온 것을 확인할 수 있을 것이다.
Main 클래스에서 Example의 객체를 만들고
참조변수 a를 통해서 Example 객체의 메서드를 실행시킨다.여기서 메서드의 인자로 넣은 값의 개수나 타입에 따라해당 조건에 맞는 메서드가 실행됐다는 것을 위의 출력결과를 통해서 알 수가 있다.
③ 오버로딩과 오버라이딩
Overloading과 Overriding
이 둘을 비교하기 전에 오버라이드의 정의를 알고 넘어가 보자.
Overriding
- 부모 클래스로부터 상속받은 메서드를, 자식 클래스에서 재정의해서 사용할 수 있는 기능
- 메서드의 이름, 매개변수의 개수, 타입이 같으면 상속받은 메서드를 덮어쓴다.
오버로딩과 오버라이딩은 공통점과 차이점이 존재하는 것을 알 수 있을 것이다.
이 둘의 특징을 비교한 것을 표로 한번 정리해 봤다.
오버로딩 (Overloading) | 오버라이딩 (Overriding) | ||||||
메소드 명 | 메소드의 이름은 같아야한다. | ||||||
매개변수 개수, 타입 | 달라야한다. (최소 개수나 타입 둘 중 하나가 달라야 한다.) |
같아야한다. (매개변수 개수, 타입 모두 같아야한다.) |
|||||
return type | 상관 없음 (같거나 다른 것에 구애받지 않음) | 같아야 한다. |
오버로딩과 오버라이딩은 메서드의 이름이 같아야 한다는 공통점이 존재하지만
매개변수나 반환 타입에 대해서는 서로 다른 점이 존재한다는 것을 확인할 수 있다.
3. 마치며
이로써 메서드 오버로딩에 대한 설명이 끝났다.
이번에 작성한 글에는 이전과 다르게 조금 다른 방식을 사용했다는 것을 알 수 있을 것이다.
일단 자바 문법 정리본을 다 업로드하기 전까지는 그대로 둘 것이다.
그리고 정리본을 전부 다 올리고 나서는
용어나 양식 같은 부분을 전부 다 통일시키는 수정 작업을 진행할 필요가 있을 것 같다.
전체적으로 약간 중구난방의 느낌이 없잖아 있으니 말이다...
다음에 작성할 글은 객체 지향 프로그래밍의 특징 중 하나인 '다형성'에 대한 것이다.
이것도 빠른 시일 내에 올려보도록 하겠다.
'Programming > Java' 카테고리의 다른 글
[Java] 15. 추상 클래스 (0) | 2023.01.26 |
---|---|
[Java] 14. 다형성 (Polymorphism) (0) | 2023.01.20 |
[Java] 12. 캡슐화와 접근 제어자 (0) | 2023.01.16 |
[Java] 11. 생성자 (Constructor) (0) | 2023.01.16 |
[Java] 10. 상속 (Inheritance) (0) | 2022.12.22 |