본문 바로가기

Java/Java 객체지향 핵심 - 2

메서드 오버로딩 - 16

🔔 학습 목표

1. 메서드 오버로딩에 대한 개념을 이해하자.

 

 

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;
	}

//	public int number(int sum) {
//		for(int i = 0; i <= 10; i+=2) {
//			sum = 0 + i;
//		}
//		return sum;
//	}
//	
//	public int number(int a) {
//		for(a = 0; a<= 10; i +=2) {
//			sum = 0 +i;
//		}
//		return sum;
//	}

} // end of class

 

메서드 오버로딩 기법을 활용   -   attack 오버로딩

package starcraft.ver02;

public class Marine {
	
	private String name;
	private int power;
	private int hp;
	
	public Marine(String name) {
		this.name = name;
		power = 4;
		hp = 70;
	}
	
	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);
	}
	
	
	
	// 자신이 공격을 당합니다.
	public void beAttacked(int power) {
		// 방어적 코드
		if(hp <= 0) {
			System.out.println("[" + this.name + "] 이미 사망하였습니다.");
			hp = 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);
	}
	

} // 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;
	}
	
	// getter
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getPower() {
		return power;
	}
	
	public int getHp() {
		return 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) {
		// 방어적 코드
		if(hp <= 0) {
			System.out.println("[" + this.name + "] 이미 사망하였습니다.");
			hp = 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);
	}
	
} // end of class
package starcraft.ver02;

public class Zergling {
	
	private String name;
	private int power;
	private int hp;
	
	public Zergling(String name) {
		this.name = name;
		power = 3;
		hp = 50;
	}
	
	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);
	}
	
	// 저글링이 마린을 공격합니다.  attackMarine
	public void attack(Marine m) {
		System.out.println(this.name + " 이 " + m.getName() + " 을 공격합니다.");
		m.beAttacked(this.power);
	}
	
	
	// 자신이 공격을 당합니다.
	public void beAttacked(int power) {
		// 방어적 코드
		if(hp <= 0) {
			System.out.println("[" + this.name + "] 이미 사망하였습니다.");
			hp = 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);
	}
	
	// get, set - 단축키 Alt + Shift + s
	
} // end of class