학습 목표
1. 메서드 오버로딩에 대한 개념을 이해하자.
메서드 오버로딩에 대한 개념을 이해하자.
메서드 오버로딩(Overloading)은 같은 이름의 메서드를 여러 개 정의하는 것을 말합니다. 이때 메서드의 시그니처(signature), 즉 메서드 이름과 매개변수의 타입, 개수, 순서가 서로 달라야 합니다. 메서드 오버로딩을 사용하면 같은 기능을 하는 메서드들을 하나의 이름으로 통일할 수 있어 코드의 가독성을 높일 수 있습니다.
package basic.ch16;
/*
* 메서드 오버로딩이란?
* 같은 이름의 메서드, 함수를 여러개 정의하는 것을 말한다.
* 단, 매개변수의 개수가 다른던지 해야한다.
*/
public class Calculator {
// 코드의 시작
// 덧셈 메서드 생성
public int add(int a, int b) {
return a + b;
} // 정수
public double add(double a, double b) {
return a + b;
} // 실수
public int add(int a, int b, int c) {
return a + b + c;
} // 정수
// 문자열 더하는 기능
public String add(String str1, String str2) {
return str1 + str2;
} // 문자열
} // end of class
메서드 오버로딩 기법을 활용
package starcraft.ver02;
public class Zealot {
// 멤버 변수
private String name;
private int power;
private int hp;
// 생성자
public Zealot(String name) {
this.name = name;
power = 5;
hp = 80;
} // end of Zealot()
// getter , setter 설정
// 단축키 : alt + shif + s --> getter 누른다.
// getter 메소드 MainTest 에서 보여주기 위해
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPower() {
return power;
}
public void setPower(int power) {
this.power = power;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
// 질럿이 저글링을 공격합니다.
public void attack(Zergling z) { // 객체와 객체간의 상호작용
System.out.println(this.name + " 이 " + z.getName() + " 을 공격합니다.");
z.beAttacked(this.power);
}
// 질럿이 마린을 공격합니다.
public void attack(Marine m) { // 객체와 객체간의 상호작용, 참조값을 받아와야 한다.
System.out.println(this.name + " 이 " + m.getName() + " 을 공격합니다.");
m.beAttacked(this.power);
}
// 자신이 공격을 당합니다.
public void beAttacked(int power) {
// hp = hp - power;
// 방어적 코드 작성
// 80 -- 72 == 5
// 5 - 75 == -70
if (hp <= 0) {
System.out.println("[" + this.name + "]" + "이미 사망하였습니다.");
hp = 0; // 체력이 0 밑으로 출력되는 것을 막기위해 0 으로 지정함
return; // 함수 종료
}
hp -= power;
}
public void showInfo() {
System.out.println("==== 상태창 ====");
System.out.println("이름 : " + this.name);
System.out.println("공격력 : " + this.power);
System.out.println("생명력 : " + this.hp);
}
}
package starcraft.ver02;
public class Zergling {
// 멤버 변수
private String name;
private int power;
private int hp;
// 생성자
public Zergling(String name) {
this.power = 3; // 공격력 설정
this.hp = 50; // 체력 설정
} // end of Zergling()
// getter , setter 설정
// 단축키 : alt + shif + s --> getter 누른다.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPower() {
return power;
}
public void setPower(int power) {
this.power = power;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
// 저글링이 질럿을 공격합니다. attackZealot
public void attack(Zealot z) {
System.out.println(this.name + "이 " + z.getName() + "을 공격합니다.");
z.beAttacked(power);
}
// 저글링이 마린을 공격합니다. attackZealot
public void attack(Marine m) {
System.out.println(this.name + "이" + m.getName() + "을 공격합니다.");
m.beAttacked(power);
}
// 자신이 공격을 당합니다.
public void beAttacked(int power) {
// hp = hp - power;
// 방어적 코드 작성
// 80 -- 72 == 5
// 5 - 75 == -70
if (hp <= 0) {
System.out.println("[" + this.name + "]" + "이미 사망하였습니다.");
hp = 0; // 체력이 0 밑으로 출력되는 것을 막기위해 0 으로 지정함
return; // 함수 종료
}
hp -= power;
}
public void showInfo() {
System.out.println("==== 상태창 ====");
System.out.println("이름 : " + this.name);
System.out.println("공격력 : " + this.power);
System.out.println("생명력 : " + this.hp);
}
}
package starcraft.ver02;
public class Marine {
// 멤버 변수
private String name;
private int power;
private int hp;
// 생성자 단축키 : ctrl + sapce + enter
public Marine(String name) {
this.power = 4; // 공격력 설정
this.hp = 70; // 체력 설정
} // end of Marine()
// getter , setter 설정
// 단축키 : alt + shif + s --> getter 누른다.
// getter 메소드 MainTest 에서 보여주기 위해
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPower() {
return power;
}
public void setPower(int power) {
this.power = power;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
// 마린이 질럿을 공격합니다. attackZealot
public void attack(Zealot z) {
System.out.println(this.name + " 이 " + z.getName() + " 을 공격합니다.");
z.beAttacked(this.power);
}
// 마린이 저글링을 공격합니다. attackZergling
public void attack(Zergling z) {
System.out.println(this.name + " 이 " + z.getName() + " 을 공격합니다.");
z.beAttacked(this.power);
}
// 자신이 공격을 당합니다. beAttacked
public void beAttacked(int power) {
// hp = hp - power;
// 방어적 코드 작성
// 80 -- 72 == 5
// 5 - 75 == -70
if (hp <= 0) {
System.out.println("[" + this.name + "]" + "이미 사망하였습니다.");
hp = 0; // 체력이 0 밑으로 출력되는 것을 막기위해 0 으로 지정함
return; // 함수 종료
}
hp -= power;
}
public void showInfo() {
System.out.println("==== 상태창 ====");
System.out.println("이름 : " + this.name);
System.out.println("공격력 : " + this.power);
System.out.println("생명력 : " + this.hp);
}
}
--------------------------
package basic.ch16;
public class ziro {
// 메서드 연습하기
public int sum(int a, int b) {
return a + b;
} // sum 함수
public int sum(int a, int b, int c) {
return a + b + c;
} // int 타입의 sum 메서드 오버로딩 -> 기존 매개변수의 개수에서 1개 추가했음
public double sum(double a, double b) {
return a + b;
}
public double sum(double a, double b, double c) {
return a + b + c;
} // double 타입의 sum 메서드 오버로딩 -> 기존 매개변수의 개수에서 1개 추가
public static void main(String[] args) {
}
} // end of class
'Java' 카테고리의 다른 글
| 2024.04.23 Composition(포함관계) (0) | 2024.04.23 |
|---|---|
| 2024.04.23 상속(Inheritance) (0) | 2024.04.23 |
| 2024.04.22 전화번호관리 프로그램 만들기 (0) | 2024.04.22 |
| 2024.04.22 배열에 활용 (도서 관리 프로그램) (0) | 2024.04.22 |
| 2024.04.22 배열에 대해서 알아 보자 (0) | 2024.04.22 |