본문 바로가기
Java/기본 개념 및 클래스

[Java] 37. 메서드 오버로딩

글: Song hyun 2024. 4. 23.
728x90
반응형

[Java] 37. 메서드 오버로딩

 



1. 메서드 오버로딩
(1) 메서드 오버로딩의 정의메서드 오버로딩(Method Overloading)은 같은 이름의 메서드를 여러 개 정의하는 것을 의미한다.  이 때 메서드의 시그니처(Signature), 즉 메서드의 이름과 파라미터가 달라야 한다.
-메서드 오버로딩을 사용하면, 같은 기능을 하는 메서드들을 하나의 이름으로 통일할 수 있어, 가독성을 높일 수 있다.

*메서드 오버로딩은 System.out.println이다.  
-System.out.println은 하나의 메서드로 여러 자료형을 출력할 수 있는, 대표적인 메서드 오버로딩 기능이다.

 

 

2. 예제 보며 이해하기

 기존의 코드는 각각의 캐릭터(질럿/마린/저글링)들이 상대편 캐릭터를 공격하게 되면,

캐릭터별로 다른 형태의 메서드를 사용하여 코드가 길었다. (ex: 질럿 공격시-attackZealot 메서드 사용)

// 마린이 질럿을 공격합니다.
public void attackZealot(Zealot z) {
	System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
	z.beAttacked(this.power);
}

	// 마린이 저글링을 공격합니다.
public void attackZergling(Zergling z) {
	System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
	z.beAttacked(this.power);
}

 

 

하지만, 아래와 같이 상위 클래스인 Unit에 attack메서드를 생성한 뒤로는,

캐릭터마다 별도의 메서드를 생성해줄 필요가 없게 되었다.

// 마린이 질럿을 공격합니다.
public void attack(Zealot z) {
	System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
	z.beAttacked(this.power);
}

	// 마린이 저글링을 공격합니다.
public void attack(Zergling z) {
	System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
	z.beAttacked(this.power);
}

package basic.ch16;

public class Profile {
	public static void main(String[] args) {
		Profile p1=new Profile("엄송현",20);
		
		p1.print();
		p1.print("헬로키티");
		p1.print(0);
		p1.print("지나가는 사람",30);
		
	}
	private String name;
	private String country;
	private int temperture;
	
	public Profile(String name, int temperture) {
		this.name=name;
		this.temperture=temperture;
	}
	
	
	public void print() {
		System.out.println("내 이름은 "+this.name+"입니다.");
		System.out.println("오늘의 날씨는 "+this.temperture+"도 입니다.");
	}
	
	public void print (String name) {
		System.out.println("내 이름은 "+name+"입니다.");
	}
	public void print (int temperture) {
		System.out.println("오늘의 날씨는 "+temperture+"도 입니다.");
	}
	public void print (String name, int temperture) {
		System.out.println("내 이름은 "+name+"이고, 오늘의 날씨는 "+temperture+"입니다.");
	}
}
728x90
반응형