1. 메서드 오버로딩에 대한 개념을 이해하자.
메서드 오버로딩(Overloading)은 같은 이름의 메서드를 여러 개 정의하는 것을 말합니다. 이때 메서드의 시그니처(signature), 즉 메서드 이름과 매개변수의 타입, 개수, 순서가 서로 달라야 합니다. 메서드 오버로딩을 사용하면 같은 기능을 하는 메서드들을 하나의 이름으로 통일할 수 있어 코드의 가독성을 높일 수 있습니다.
package com.overloading;
/**
* 메소드 오버로딩이란
* 같은이름릐 메서드를 여러개 정의하는것
*/
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;
}
//main 함수 -코드의 진입점
public static void main(String[] arge){
//println()--> 메서드 오버로딩 기법이었다.
}// end of main
}
스타크래프트 메서드 오버로딩 활용해서 코드 수정하기
package com.starcraft_v02;
public class Marine { private String name;
private int power;
private int hp;
// 생성자 1
public Marine(String name) {
this.name = name;
this.power = 6;
this.hp = 40;
}
//read only --> getter
public String getName() {
return name;
}
public int getPower() {
return power;
}
public int getHp() {
return hp;
}
//setter 는 안만들 예정
public void attack(Zealot zealot) {
zealot.beAttacked(this.power);
System.out.println(name + " 이 " +getName()+ " 공격합니다.");
}
public void attack(Zergling zergling) {
zergling.beAttacked(this.power);
System.out.println(name + " 이 " + getName() + " 공격합니다");
}
public void beAttacked(int power) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 이미 사망하였습니다.");
//실행 제어권을 반납하고 싶으면 돌아가 코드!!
return;
}
this.hp -= power;
System.out.println(name + "(이)가 공격을 당합니다");
}
public void showInfo() {
System.out.println("-------✨상태창✨------");
System.out.println("마린 이름 : " + name);
System.out.println("마린 공겨력 : " + power);
System.out.println("마린 체력 : " + hp);
}
}
package com.starcraft_v02;
/**
* @jang
*/
public class Zealot {
private String name;
private int power;
private int hp;
//public class Zealot {
// private String name;
// private int power;
//private int hp;
// 생성자 1
public Zealot(String name) {
this.name = name;
this.power = 7;
this.hp = 40;
//public Zealot(String name) {
//this.name = name;
//this.power = 5;
//this.hp = 80;
}
//read only --> getter
public String getName() {
return name;
//
}
public int getPower() {
return power;
}
public int getHp() {
return hp;
}
//setter 는 안만들 예정
public void attack(Zergling zergling) {
zergling.beAttacked(this.power);
System.out.println(name + " 이 "+ zergling.getName() + "을 공격합니다.");
}
public void attack(Marine marine) {
marine.beAttacked(this.power);
System.out.println(name + " 이 " +marine.getName() + "공격합니다");
}
public void beAttacked(int power) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 이미 사망하였습니다.");
//실행 제어권을 반납하고 싶으면 돌아가 코드!!
return;
}
this.hp -= power;
System.out.println(name + "(이)가 공격을 당합니다");
}
public void showInfo() {
System.out.println("-------✨상태창✨------");
System.out.println("질럿 이름 : " + name);
System.out.println("질럿 공겨력 : " + power);
System.out.println("질럿 체력 : " + hp);
}
}
package com.starcraft_v02;
public class Zergling { private String name;
private int power;
private int hp;
// 생성자 1
public Zergling(String name) {
this.name = name;
this.power = 5;
this.hp = 35;
}
//read only --> getter
public String getName() {
return name;
}
public int getPower() {
return power;
}
public int getHp() {
return hp;
}
//setter 는 안만들 예정
public void attack(Zealot zealot) {
zealot.beAttacked(this.power);
System.out.println(name + " 이 "+ getName() + "공격합니다.");
}
public void attack(Marine marine) {
marine.beAttacked(this.power);
System.out.println(name + " 이 "+ getName() + " 공격합니다");
}
public void beAttacked(int power) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 이미 사망하였습니다.");
//실행 제어권을 반납하고 싶으면 돌아가 코드!!
return;
}
this.hp -= power;
System.out.println(name + "(이)가 공격을 당합니다");
}
public void showInfo() {
System.out.println("-------✨상태창✨------");
System.out.println("저글링 이름 : " + name);
System.out.println("저글링 공겨력 : " + power);
System.out.println("저글링 체력 : " + hp);
}
}
package com.starcraft_v02;
/**
* 메서드 오버로딩이 적용된 코드를 실행시켜보자.
*/
import java.util.Scanner;
public class GameTest1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 객체 생성 3 ~ 6
Zealot zealot1 = new Zealot("외계인1");
Zergling zergling1 = new Zergling("괴물1");
Marine marine1 = new Marine("해병1");
// 대상을 선택하고
// 선택 대생 제외하고 누구를 공격할래? --> 공격
// 행위 ......
// while() 1.대상 2. 공격 0.종료
while (true) {
/// 1 2 3 0
/// 1 --> 누구 공격할래 --> 키보드 값 받기 --> 값에 따라서 마린, 저글링
System.out.printf("1. 마린 2. 저글링 3. 질럿 중 하나를 선택하시오 0을 선택시 종료 됩니다 : ");
int choice = sc.nextInt();
if (choice == 1) {
System.out.println("누구를 공격하시겠습니까? 1. 저글링 2. 질럿");
int choice1 = sc.nextInt();
if (choice1 == 1) {
marine1.attack(zergling1);
System.out.println();
} else if (choice1 == 2) {
marine1.attack(zealot1);
}
} else if (choice == 2) {
System.out.println("누구를 공격하시겠습니까? 1. 마린 2. 질럿");
int choice1 = sc.nextInt();
if (choice1 == 1) {
zergling1.attack(marine1);
System.out.println();
} else if (choice1 == 2) {
zergling1.attack(zealot1);
}
} else if (choice == 3) {System.out.println("누구를 공격하시겠습니까? 1. 마린 2. 저글링");
int choice1 = sc.nextInt();
if (choice1 == 1) {
zealot1.attack(marine1);
System.out.println();
} else if (choice1 == 2) {
zealot1.attack(zergling1);
}
} else if (choice == 0) {
System.out.println("게임이 종료 됩니다");
break;
} else {
System.out.println(" 번호를 다시 선택해 주세요");
}
System.out.println();
}
}
}
'JAVA 객체 지향 핵심' 카테고리의 다른 글
(JAVA)Composition(포함 관계) - 15 (2) | 2025.04.21 |
---|---|
(JAVA)상속(Inheritance) - 14 (0) | 2025.04.21 |
(JAVA)전화 번호 관리 프로그램 만들기(연습문제) - 12 (0) | 2025.04.19 |
Book으로 연습문제 재복습 (0) | 2025.04.19 |
(JAVA)배열 복습하기-11 (0) | 2025.04.18 |