Overloading
Overload의 사전적 의미는 "초과 적재", "과부하"이다.
전혀 느낌이 오지 않는다. 무엇을 쌓는다는 건가?!
Overloading을 한마디로 정의하자면!
할 수 없다. 어휘력 부족......😿
그러니까. 그. 뭐냐. Um... Java에 class가 있다.
class에 메소드를 만드는데 메소드 이름을 중복으로 여러 개 만든다.
원래 메소드 이름이 중복되면 에러가 발생하지만 약간의 규칙을 준수하여 만들면 에러가 발생하지 않고 만들 수 있다. 이것을 Overloading이라 한다.
여기서 의문이 든다.
왜 같은 이름의 메소드를 굳이! 여러 개 만들까?!
Overloading 예제
메소드 Overloading
public class Overloading {
public int sumMethod(int a, int b) {
return a + b;
}
public int sumMethod(int a, int b, int c) {
return a + b + c;
}
public double OverloadingMethod(int a, double b) {
return a + b;
}
public double OverloadingMethod(double a, int b) {
return a + b;
}
public void UseMethod() {
int resultA = OverloadingMethod(1, 2);
int resultB = OverloadingMethod(1, 2, 3);
double resultC = OverloadingMethod(1, 1.6);
double resultD = OverloadingMethod(1.6, 1);
System.out.println("===resultA===" + resultA); //3
System.out.println("===resultB===" + resultB); //6
System.out.println("===resultC===" + resultC); //2.6
System.out.println("===resultD===" + resultD); //2.6
}
}
👉 public class Overloading { .. }
Overloading class를 만들었다. class내부에 sum 하는 기능을 가진 메소드를 만들어 보자.
👉 public int sumMethod(int a, int b) { .. }
첫 번째 메소드는 int타입 a, b를 받아 덧셈하는 기능이다.
👉 public int sumMethod(int a, int b, int c) { .. }
두 번째 메소드는 int타입 3개를 받아 덧셈하는 기능이다.
👉 public int sumMethod(int a, double b) { .. }
세 번째 메소드는 int, double타입 각각 한 개씩 받아 덧셈하는 기능이다.
👉 public int sumMethod(double a, int b) { .. }
네 번째 메소드는 세 번째 메소드의 파라미터 순서만 바꿨다.
👉 public void UseMethod() { .. }
위에서 만든 3개의 메소드들의 호출하여 실제로 사용하는 메소드다.
위 코드를 살짝만! 봐도 4개의 메소드의 공통점과 차이점을 쉽게 파악할 수 있다.
공통점은 덧셈하는 기능이다.
차이점은 덧셈의 개수 또는 타입, 순서가 다르다.
Overloading은 같은 기능을 가진 메소드들을 이름으로 분리하지 않고 파라미터 타입, 개수, 순서로 구분 지어 사용할 수 있게 한다. 만약, Overloading을 하지 않는다면 어떻게 될까?
Overloading을 하지 않을 경우 아래 코드와 같이 이름으로 구분 지어야 한다.
sumMethodTwoInt, sumMethodThreeInt, sumMethodString......
만약, 동일한 기능에 다른 타입의 메소드가 더 필요하다면?!
public class Overloading {
public int sumMethodTwoInt(int a, int b) {
return a + b;
}
public int sumMethodThreeInt(int a, int b, int c) {
return a + b + c;
}
public String sumMethodString(String a, String b) {
return a + b;
}
public void UseMethod() {
int resultA = sumMethodTwoInt(1, 2);
int resultB = sumMethodThreeInt(1, 2, 3);
String resultC = sumMethodString("Hello", "World");
System.out.println("===resultA===" + resultA);
System.out.println("===resultB===" + resultB);
System.out.println("===resultC===" + resultC);
}
}
"생활코딩"에서 많이 언급되는 말이 있다.
"지금은 코드가 몇 줄 없지만 만약 코드가 1억 줄이 있다고 상상해보세요!"
위 생코님의 말씀대로 덧셈 기능을 가진 메소드들이 1억 개 있다고 생각해보자. (1억 개는 너무 많은가....)
Overlading을 하지 않을 경우 1억 개의 이름을 각각 네이밍 해서 만들어야 한다.
아마 메소들 만들다가 코딩 끝나지 싶다.
정리하면, Overloading은 동일한 기능을 가진 메소드의 파라미터 값(매개변수)을 다양하게 받기 위해 사용된다.
동일한 기능을 메소드명으로 구분하게 된다면 프로그램이 커질수록 메소드는 많아지고 관리는 힘들어진다.
이를 방지하기 위해 같은 기능을 가진 메소드는 네이밍을 같게하고 파라미터 타입, 개수, 순서를 다르게 하여 메소드의 다양성을 보장한다.
생성자 Overloading
이번에는 생정자 Overloading이다.
메소드 Overloading과 특별한 차이는 없다.
생성자 Overloading에서는 생성자의 매개변수의 개수를 다르게 해서 동일한 생성자를 다양하게 만들 수 있다.
public class Overloading {
private String morning;
private String lunch;
private String dinner;
public Overloading(String morning) {
this.morning = morning;
}
public Overloading(String morning, String lunch) {
this.morning = morning;
this.lunch = lunch;
}
public Overloading(String morning, String lunch, String dinner) {
this.morning = morning;
this.lunch = lunch;
this.dinner = dinner;
}
}
Overloading 규칙
- 메서드 이름을 같게 한다.
- 매개변수의 개수 or 타입 or 순서를 다르다.
- return타입은 Overloading에 영향을 받지 않는다.
즉, 매개변수는 같고 return타입만 다른 경우 Overloading은 성립되지 않는다.
'개발노트 > Java' 카테고리의 다른 글
[Java Wrapper Class] 래퍼 클래스 파헤치기 (1) | 2024.06.13 |
---|---|
[Java Immutable Object] 불변 객체 파헤치기 (0) | 2024.05.20 |
[Java Basic] 자바 표준 라이브러리 소개 (0) | 2024.05.14 |
[Java Final] 키워드 파헤치기 (0) | 2024.05.09 |
개발 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!