Java

2024.04.23 메서드 오버로딩

정훈5 2024. 4. 23. 08:50
학습 목표 

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