- 메서드 오버로딩 / 오버라이딩
1. 메서드 오버로딩: 같은 이름의 메서드를 매개변수의 유형과 개수를 다르게 해서 여러 개 정의하는 것
2. 메서드 오버라이딩: 상위 클래스의 메서드를 하위 클래스가 사용 또는 재정의하는 것.
- 예제: 메서드 오버로딩
예제) 구구단 5단 출력하기
1. MultiplicationTable.java
public class MultiplicationTable {
//매개변수가 다른 print 메서드 3개
void print() {
for (int i=1; i<=10; i++) {
System.out.printf("%d * %d = %d", 5, i, 5*i).println();
}
}
void print(int table) {
for (int i=1; i<=10; i++) {
System.out.printf("%d * %d = %d", table, i, table*i).println();
}
}
void print(int table, int from, int to) {
for (int i=from; i<=to; i++) {
System.out.printf("%d X %d = %d", table, i, table*i).println();
}
}
}
2. MultiplicationTableRunner.java
public class MultiplicationTableRunner {
public static void main(String[] args) {
MultiplicationTable table = new MultiplicationTable();
//메서드 오버로딩: 같은 이름의 메서드를 매개변수의 유형과 개수를 다르게 해서 여러 개 정의하는 것
table.print();
table.print(5);
table.print(6, 11, 20);
}
}
* 주의) 실행할 수 있는 메서드는 메인 메서드가 있는 메서드뿐이다.
메인 메서드가 없기 때문에 MultiplicationTable 클래스는 실행할 수 없다.
- Refactoring
: 코드의 기능을 건드리지 않으면서 구조에만 변화를 주는 것. 같은 내용의 코드 중복을 피하는 방법.
위 예제 중 MultiplicationTable.java에는 3개의 print 메서드의 내용이 모두 동일하다.
//공통 코드 내용
for (int i=1; i<=10; i++) {
System.out.printf("%d * %d = %d", 5, i, 5*i).println();
}
같은 내용의 코드가 중복되면 코드 내용을 수정하려고 할 때 3개의 메서드를 각각 수정해야 하는 불필요한 작업이 생긴다.
따라서 메서드는 같은 내용의 코드 중복을 피하고 일반화할수록 더 쓸모 있다.
아래의 코드처럼 refactoring할 수 있다.
- Refactoring 한 코드
public class MultiplicationTable {
void print() {
print(5);
//또는 print(5, 1, 10);
}
void print(int table) {
print(table, 1, 10);
}
void print(int table, int from, int to) {
//중복 코드가 3개 -> 1개
for (int i=from; i<=to; i++) {
System.out.printf("%d X %d = %d", table, i, table*i).println();
}
}
}
'Java' 카테고리의 다른 글
| 캡슐화, 추상화 개념 및 차이 (0) | 2023.05.31 |
|---|---|
| [java] eclipse에서 디버깅하는 방법 (0) | 2023.05.31 |
| 캡슐화 (0) | 2023.05.31 |
| [java] eclipse 단축키 모음 (0) | 2023.05.30 |
| jshell 사용법 (0) | 2023.05.24 |