[JAVA] 메서드 오버로딩 1탄
@욕심쟁이
·2020. 8. 19. 09:23
반응형
메서드 오버로딩(Method Overloading) = 메서드 다중 정의
- 시그니처(리턴타입, 메서드명, 매개변수 중) 매개변수(파라미터)가 다른 메서드를 여러번 정의하는 것
- 동일한 작업을 수행하는 메서드의 매개변수 타입이 다를 때 메서드 이름을 별도로 구분하지 않고,
같은 이름의 메서드를 매개변수만 달리 하여 여러번 정의하는 것
→ 메서드 호출 시점에서 전달되는 데이터 타입에 따라 매개변수 타입이 일치하는 해당 메서드를 자동으로 호출함
- 매개변수 이름만 다르거나, 리턴타입만 다른 것은 오버로딩이 아님
- 똑같은 메서드이름 중 자기타입에 맞는 메서드로 감
예제1)
public class Ex {
public static void main(String[] args) {
NormalMethod nm = new NormalMethod();
nm.abs(-10);
nm.dAbs(-3.3);
nm.lAbs(-30L);
System.out.println("------------------------");
OverloadingMethod om = new OverloadingMethod();
om.abs(-10); // public void abs(int num) {} 메서드가 호출됨
om.abs(-3.3); // public void abs(double num) {} 메서드 호출됨
om.abs(-30L); // public void abs(long num) {} 메서드 호출됨
// => 즉, 메서드 파라미터 전달 시, 매개변수를 구분할 수 있으면
// 메서드 오버로딩이 성립되는 것으로 간주하고 오류 발생 없음!
}
}
class OverloadingMethod {
// 정수 1개를 전달받아 절대값을 계산하여 출력하는 abs() 메서드 정의
// => int, double, long 타입에 대한 각 메서드를 abs() 이름으로 통일
// 단, 매개변수 타입만 int, double, long 으로 구분
public void abs(int num) {
// 전달받은 정수 num 이 음수일 경우 양수로 변환 후 출력
// 아니면 그대로 출력
if(num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
//매개변수의 타입이 같고, 변수명만 다른 것은 오버로딩이 아니다!
//public void abs(int num2) {} // 컴파일 에러 발생!
//매개변수가 같고, 리턴타입만 다른 것은 오버로딩이 아니다!
//public int abs(int num) {} // 컴파일 에러 발생!
// int형이 아닌 다른 타입 매개변수를 선언하면 오버로딩이 성립됨!
public void abs(double num) {
// 전달받은 실수 num 이 음수일 경우 양수로 변환 후 출력
// 아니면 그대로 출력
if(num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
public void abs(long num) {
// 전달받은 long 타입 정수 num 이 음수일 경우 양수로 변환 후 출력
// 아니면 그대로 출력
if(num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
}
class NormalMethod {
// 정수 1개를 전달받아 절대값을 계산하여 출력하는 abs() 메서드 정의
public void abs(int num) {
// 전달받은 정수 num 이 음수일 경우 양수로 변환 후 출력
// 아니면 그대로 출력
if(num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
// double 타입 실수를 전달받는 메서드를 별도로 정의
// => 메서드명도 식별자이므로 중복되면 안된다!
public void dAbs(double num) {
// 전달받은 정수 num 이 음수일 경우 양수로 변환 후 출력
// 아니면 그대로 출력
if(num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
// long 타입 정수를 전달받는 메서드 별도 정의
public void lAbs(long num) {
// 전달받은 정수 num 이 음수일 경우 양수로 변환 후 출력
// 아니면 그대로 출력
if(num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
// 데이터 1개를 전달받아 출력하는 print() 메서드
public void intPrint(int data) {
System.out.println(data);
}
public void StringPrint(String data) {
System.out.println(data);
}
public void doublePrint(double data) {
System.out.println(data);
}
}
예제2)
public class Test{
public static void main(String[] args) {
// 정수 또는 실수 2개를 전달받아 덧셈 결과를 출력하는 프로그램
// => 메서드 오버로딩 활용
PlusClass pc = new PlusClass();
pc.plus(10, 20); // 10 + 20 = 30 출력
pc.plus(1.5, 1.5); // 1.5 + 1.5 = 3.0 출력
//int,double전달시 double, double전달
}
}
class PlusClass {
public void plus(int num1, int num2) {
int result = num1 + num2;
System.out.println(num1 + " + " + num2 + " = " + result);
}
public void plus(double num1, double num2) {
double result = num1 + num2;
System.out.println(num1 + " + " + num2 + " = " + result);
}
}
반응형
'IT > JAVA' 카테고리의 다른 글
[JAVA] 메서드 오버로딩 3탄 (0) | 2020.08.19 |
---|---|
[JAVA] 메서드 오버로딩 2탄 (0) | 2020.08.19 |
[JAVA] 접근제한자(Public, Protected, Private, Default) (0) | 2020.08.18 |
[JAVA]멤버변수(필드) (0) | 2020.08.12 |
[JAVA] 객체지향프로그래밍(OOP) 2 (0) | 2020.08.12 |