JAVA
[JAVA] 오버로딩/Overloading
minsukim.kms
2022. 7. 26. 13:38
메서드 오버로딩
- 같은 이름의 메서드를 여러개 정의하는 것
- 오버로딩을 사용함으로서 메서드에 사용되는 이름을 절약할 수 있다.
- 메서드를 호출할 때 전달해야할 매개변수 타입이나 개수에 대해 신경 쓰지 않고 호출할 수 있다.
(자바에서는 한 클래스 내에 같은 이름의 메서드를 둘 이상 가질 수 없다.
하지만, 매개변수의 개수나 타입을 다르게 하면 하나의 이름으로 메서드를 작성할 수 있다.)
오버로딩 성립조건
- 메서드 이름이 같아야 한다
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 자료형과는 같아야 한다.
올바른 예제 )
class overloading
{
int sum(int x, int y) {
return x+y;
}
//매서드 오버로딩
int sum(int x, int y, int z) {
return x + y + z;
}
int sum(int x, int y, int z, int k) {
return x + y + z + k;
}
}
public class MethodOverloading {
public static void main(String[] args) {
overloading ob = new overloading();
System.out.println("sum(int x, int y) : "+ob.sum(10, 20));
System.out.println("sum(int x, int y, int z) : "+ob.sum(10, 20, 30));
System.out.println("sum(int x, int y, int z, int k) : "+ob.sum(10, 20, 30, 40));
//하나의 변수를 가지고 여러 결과를 낼 수 있음.
}
}
매서드 이름이 같고, 매개변수가 다르게 하여 오버로딩 하였다.
오버로딩으로 인해 메인 메서드에서 같은 이름의 메서드를 가지고 매개변수 개수를 다르게 하여 호출 가능하다.
결과 )
sum(int x, int y) : 30
sum(int x, int y, int z) : 60
sum(int x, int y, int z, int k) : 100
틀린 오버로딩 예제 )
class NotOverloading
{
int sum(int x, int y) {
return x+y;
}
//매서드 오버로딩x
double sum(double x , double y) {
return x + y;
}
double sum(int x, double y, float z) {
return x + y + z;
}
String sum(String str1,String str2) {
return str1 + str2;
}
}
반환 타입이 다르기 때문에 모두 오버로딩이 성립되지 않는다.
Car 예제 )
Car 클래스에서 여러 속성을 가진 Car를 출력할 수 있도록 오버로딩 하기
class Car{
//속성
public String owner;
public int speed;
public int fuel;
public String cupholder1;
public String cupholder2;
//오버로딩
void AddCupholder(String b1) {
this.cupholder1=b1;
}
void AddCupholder(String b1,String b2) {
this.cupholder1=b1;
this.cupholder2=b2;
}
void ShowInfo() {
System.out.println("소유자 : " + owner);
System.out.println("현재속도 : " + speed + "km/h");
System.out.println("연료량 : " + fuel);
System.out.println("CUP1 : " + cupholder1);
System.out.println("CUP2 : " + cupholder2);
}
}
public class CarMain {
public static void main(String[] args) {
Car hong = new Car();
hong.owner = "홍길동";
hong.speed = 50;
hong.fuel = 100;
//hong.AddCupholder("식혜");
//오버로딩을 함으로서 바로 위 코드를 통해 식혜 만을 입력해도 되고,
//아래의 코드로 식혜와 아아 둘 다 입력해도됨.
hong.AddCupholder("식혜","아아");
hong.ShowInfo();
기능 추가(함수 오버로딩)
AddCupholder(String b1) : void > 멤버변수 cupholder1에 b1 문자열 저장
AddCupholder(String b1,String b2) : void > 멤버변수 cupholder1,2에 각각 b1,b2 저장
ShowInfo():void : owner,speed,fuel,cupholder1,cupholder2를 각각 출력하는 메서드 생성
결과 )
소유자 : 홍길동
현재속도 : 50km/h
연료량 : 100
CUP1 : 식혜
CUP2 : 아아
참고 사이트 : tcpschool.com