Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- Java
- Thread
- 상수
- 컴파일
- 인텔리제이 기초 설정
- 포함관계
- 연관관계
- break문
- continue문
- 인텔리제이 한글 깨짐 해결법
- JAVA기초
- 반복문
- Java데이터 타입
- While
- 생성자
- 집합관계
- IntelliJ IDEA
- 형 변환
- this예약어
- 메서드
- for문
- multi-threading
- 시스템 환경 변수 편집
- JAVA객체지향
- OPP개념
- 메서드 오버로딩
- function
- 자바 멀티스레딩
- 접근제어지시자
- java변수
Archives
- Today
- Total
최원종의 개발 블로그
메서드 오버로딩 본문
메서드 오버로딩은 같은 이름의 메서드를 여러 개 정의하는 것.
메서드의 시그니처, 즉 메서드 이름과 매개변수의 타입, 개수, 순서가 서로 달라야 한다.
메서드 오버로딩을 사용하면 같은 기능을 하는 메서드들을 하나의 이름으로 통일할 수 있어 가독성이 높아진다.
메서드 오버로딩 코드
package com.tenco.overloading;
/**
* 메소드 오버로딩이란?
* 같은 이름의 메소드를 여러개 정의 하는 것을 말한다
*/
public class Calculator {
public static void main(String[] args) {
// 잠깐 생각.
// 함수 호출 하려면 ---> 함수 선언이 되어 있어야 한다.
System.out.println(1);
System.out.println(1.1);
System.out.println('A');
System.out.println("문자");
System.out.println(true);
} // end of main
public void printInt(int a){
System.out.println(a);
}
public void printDouble(double a) {
System.out.println(a);
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
public String add( String s1, String s2){
return s1 + s2;
}
}//end of class
반환 타입만 다른 것은 오버로딩이 아님.
public int add(int a, int b) { return a + b; }
public double add(int a, int b) { return (double)(a + b); } // 컴파일 에러!
스타크래프트_v02 (메서드 오버로딩 적용 버전 attack로 묶기)
-Marine
package com.tenco.startcraft_v02;
public class Marine {
private String name;
private int power;
private int hp;
public Marine(String name) {
this.name = name;
power = 4;
hp = 70;
}
//getter
public String getName() {
return name;
}
public int getPower() {
return power;
}
public int getHp() {
return hp;
}
//저글링 공격
public void attack(Zergling zergling) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 사망하여 공격할 수 없습니다");
return;
}
System.out.println(name + "이(가) " + zergling.getName() + "을 공격 합니다");
zergling.beAttacked(this.power);
}
//질럿 공격
public void attack(Zealot zealot) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 사망하여 공격할 수 없습니다");
return;
}
System.out.println(name + "이(가) " + zealot.getName() + "을 공격 합니다");
zealot.beAttacked(this.power);
}
public void beAttacked(int power) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 사망하여 공격할 수 없습니다");
return;
}
this.hp -= power;//공격받으면 hp까임
if (this.hp < 0) {
this.hp = 0;
}
System.out.println(name + "이(가) 공격을 당합니다. (남은 HP : " + this.hp + " )");
}
//상태창
public void showInfo() {
System.out.println("⭐-------상태창-------⭐");
System.out.println("유닛 이름 : " + name + " | 공격력 : " + power + " | 체력 : " + hp);
}
}
-Zealot
package com.tenco.startcraft_v02;
/**
* v01 코드 그대로 작성, 단 attack 이름으로 메소드 오버로딩 기법을 적용하시오
*/
public class Zealot {
private String name;
private int power;
private int hp;
public Zealot(String name) {
this.name = name;
power = 20;
hp = 80;
}
//getter
public String getName() {
return name;
}
public int getPower() {
return power;
}
public int getHp() {
return hp;
}
//저글링 공격
public void attack(Zergling zergling) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 사망하여 공격할 수 없습니다");
return;
}
System.out.println(name + "이(가) " + zergling.getName() + "을 공격 합니다");
zergling.beAttacked(this.power);
}
//마린 공격
public void attack(Marine marine) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 사망하여 공격할 수 없습니다");
return;
}
System.out.println(name + "이(가) " + marine.getName() + "을 공격 합니다");
marine.beAttacked(this.power);
}
public void beAttacked(int power) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 사망하여 공격할 수 없습니다");
return;
}
this.hp -= power;//공격받으면 hp까임
if (this.hp < 0) {
this.hp = 0;
}
System.out.println(name + "이(가) 공격을 당합니다. (남은 HP : " + this.hp + " )");
}
//상태창
public void showInfo() {
System.out.println("⭐-------상태창-------⭐");
System.out.println("유닛 이름 : " + name + " | 공격력 : " + power + " | 체력 : " + hp);
}
}
-Zergling
package com.tenco.startcraft_v02; // 패키지 명시
public class Zergling {
private String name;
private int power;
private int hp;
public Zergling(String name) {
this.name = name;
power = 3;
hp = 50;
}
//getter
public String getName() {
return name;
}
public int getPower() {
return power;
}
public int getHp() {
return hp;
}
//질럿 공격
public void attack(Zealot zealot) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 사망하여 공격할 수 없습니다");
return;
}
System.out.println(name + "이(가) " + zealot.getName() + "을 공격 합니다");
zealot.beAttacked(this.power);
}
//마린 공격
public void attack(Marine marine) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 사망하여 공격할 수 없습니다");
return;
}
System.out.println(name + "이(가) " + marine.getName() + "을 공격 합니다");
marine.beAttacked(this.power);
}
public void beAttacked(int power) {
if (this.hp <= 0) {
System.out.println(name + "이(가) 사망하여 공격할 수 없습니다");
return;
}
this.hp -= power;//공격받으면 hp까임
if (this.hp < 0) {
this.hp = 0;
}
System.out.println(name + "이(가) 공격을 당합니다. (남은 HP : " + this.hp + " )");
}
//상태창
public void showInfo() {
System.out.println("⭐-------상태창-------⭐");
System.out.println("유닛 이름 : " + name + " | 공격력 : " + power + " | 체력 : " + hp);
}
}
-GameTset (실행하는 코드)
package com.tenco.startcraft_v02;
public class GameTest {
public static void main(String[] args) {
//v2에서는 공격을 메서드 오버로딩 활용
Zealot zealot = new Zealot("질럿1");
Marine marine = new Marine("마린1");
Zergling zergling = new Zergling("저글링1");
zealot.attack(marine);
marine.attack(zealot);
zergling.attack(marine);
//println() <-- 오버로딩 기법이다
//println(int a)
//println(double a)
}
}
메서드 오버로딩 실습 문제 (알림 전송 클래스 Notification 만들기)
문제: 우리는 메시지를 보낼 때 단순히 내용만 보낼 때도 있고, 받는 사람을 지정할 때도 있습니다. 메서드 오버로딩을 이용해 send라는 이름 하나로 다양한 알림을 보내는 코드를 완성해 보세요.
요구사항
- send(String message) : 메시지 내용만 출력합니다. (예: "일반 알림: [내용]")
- send(String message, int count) : 메시지를 입력받은 횟수만큼 반복해서 출력합니다.
- send(String receiver, String message) : 받는 사람과 내용을 출력합니다. (예: "[받는 사람]님에게 메시지: [내용]")
-코드
package com.tenco.overloading;
public class Notification {
//1. 메시지만 보내는 메서드
public void send(String message) {
System.out.println("일반 알림 : [" + message + "]");
}
//2. 메시지를 여러번 반복해서 보내는 메서드 (for)
public void send(String message, int count) {
System.out.println("반복 알림 전송 ...");
for (int i = 0; i < count; i++) {
send(message);
}
}
//3. 받는 사람을 지정해서 보내는 메서드
public void send(String receiver, String message) {
System.out.println("[" + receiver + "]님에게 메시지: [" + message + "]");
}
//main 함수 영영(자리 빌려쓰기)
public static void main(String[] args) {
Notification notification = new Notification();
System.out.println("------- 1번 호출 --------");
notification.send("내용");
System.out.println("------- 2번 호출 --------");
notification.send("졸면 안 돼요", 3); // 3번 반복
System.out.println("------- 3번 호출 --------");
notification.send("홍길동" , "내용");
}//end of main
}
'Java > Java 객체지향' 카테고리의 다른 글
| 상속과 접근제어 지시자 (0) | 2026.03.04 |
|---|---|
| 상속(Inheritance) (0) | 2026.03.04 |
| 전화번호 관리하는 프로그램 만들기 (0) | 2026.02.27 |
| Array(배열) (0) | 2026.02.27 |
| static함수 (1) | 2026.02.26 |



