1. 오버로딩(Overloading)
교재 p.154-155 / 4.3 생성자와 메소드 오버로딩
1️⃣ 오버로딩(Overloading)이란?
같은 메서드 이름을 사용하지만, 매개변수의 개수나 타입이 다른 여러 메서드를 정의하는 것
(함수 이름이 같아도 매개변수 타입 내용이나 위치, 개수 다르거나 하면 다른 함수로 인식)
2️⃣ 오버로딩의 조건
메서드 이름은 같아야 하고, 다음 중 하나라도 달라야 한다
- 매개변수 개수
void print(int a)
void print(int a, int b)- 매개변수 타입
void print(int a)
void print(double a)- 매개변수 순서
void print(int a, String b)
void print(String b, int a)⚠ 반환 타입만 다르다고 해서 오버로딩이 되지는 않는다.
int sum(int a, int b)
double sum(int a, int b) // ❌3️⃣ 오버로딩의 장점
- 함수 하나만 기억하면 됨 → 이 기술이 없으면 함수 이름을 다 다르게 하고, 그 이름을 기억해야 함
ex) sout → 인수, 스트링, 더블을 출력하느냐에 따라 함수가 다른데 오버로딩을 지원하기 때문에 sout 하나로 모든 것 출력 가능
4️⃣ 오버로딩의 한계
- 객체가 많을수록 오버로딩을 수도 없이 만들어야 함 → 객체가 2개면 오버로딩 4개, 객체가 3개면 오버로딩 9개(경우의 수-제곱)
→ 그래서 배워야 하는 게 추상화!(재판관, 가구) → 객체 지향 프로그래밍
5️⃣ 교재 예제
1) MyMath(p.154)
package ex04;
public class MyMath {
int add(int x, int y){return x+y;}
int add(int x, int y, int z){return x+y+z;}
int add(int x, int y, int z, int w){return x+y+z+w;}
public static void main(String[] args) {
MyMath obj;
obj = new MyMath();
System.out.print(obj.add(10,20)+" ");
System.out.print(obj.add(10,20,30)+" ");
System.out.print(obj.add(10,20,30,40)+" ");
}
}
6️⃣ 실습
package ex04.game;
public class Zealot {
int hp = 100;
int attack = 10;
}package ex04.game;
public class Dragoon {
int hp = 100;
int attack = 5;
}package ex04.game;
public class GameApp {
// 책임 : u1 -> u2 공격
static void start(Zealot u1, Dragoon u2){
u2.hp = u2.hp - u1.attack;
}
static void start(Dragoon u1, Zealot u2){ // 함수 이름 같아도 매개변수 다르면 다른 함수로 인식 -> 오버로딩
u2.hp = u2.hp - u1.attack;
}
static void start(Zealot u1, Zealot u2){
u2.hp = u2.hp - u1.attack;
}
public static void main(String[] args) {
Zealot z1 = new Zealot();
Zealot z2 = new Zealot();
Dragoon d1 = new Dragoon();
start(z1,d1);
// 1. 드라군의 상태확인
System.out.println(d1.hp);
start(d1,z1);
// 2. 질럿의 상태확인
System.out.println(z1.hp);
start(z1,z2);
System.out.println(z2.hp);
System.out.println(); // 오버로딩의 장점
System.out.println(1);
System.out.println("");
System.out.println(1.2);
System.out.println(true);
}
}
Share article