JAVA 객체 지향 핵심

(JAVA)메서드 오버로딩 - 13

mynote6676 2025. 4. 21. 13:23

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();

        }



    }

}