오버로딩 (Overloading)
- 같은 메서드에 인자 값과 자료형이 다른 경우 오버로딩을 사용함
- 파라미터의 타입 또는 갯수가 달라야함
- 인자 값이 여러개인 경우 자료형과 순서를 그대로 따라가야 한다
아래는 클래스 하나를 생성하고 이름이 같고 자료형은 다른 메서드 여러개를 만들어
절대값을 출력하기 위해 메서드에 인자 값을 각각 다른 자료형으로 출력했을 때
해당 인자 값이 같은 메서드를 찾아 출력되게 한 코드이다
OverloadingAbsoluteNum test = new OverloadingAbsoluteNum();
System.out.println(test.abs(-5));
System.out.println(test.abs(-3.14));
System.out.println(test.abs(-20L));
class OverloadingAbsoluteNum {
// int형 파라미터 1개를 전달받은 abs() 메서드
public int abs(int n) {
if(n < 0) {
n = -n;
}
return n;
}
// double형 파라미터 1개를 전달받는 abs() 메서드
public double abs(double n) {
if(n < 0) {
n = -n;
}
return n;
}
// double형 파라미터 1개를 전달받는 abs() 메서드
public long abs(long n) {
if(n < 0) {
n = -n;
}
return n;
}
}
가변인자 또는 비정형인자 (...)
- 배열의 수는 0 부터 무한
- 인덱스 0 부터 시작하는 배열이 되기 때문에 사용자에 의해 파라미터 값이 부족해서 연산/실행이 되지 않는 경우가 있으니 체크해줄 필요가 있다
- 가변인자는 항상 파라미터의 마지막에 와야한다
기본 문법
public void cal(char opr, int... nums) {
...
}
아래는 가변인자(비정형인자)를 이용한 계산기 코드이다
public static void main(String[] args) {
// 가변인자를 활용한 계산기
Calculator3 c = new Calculator3();
c.cal('+', 2, 3); // 2 + 3 = 5 출력
c.cal('+', 2, 3, 5); // 2 + 3 + 5 = 10 출력
c.cal('+', 2, 3, 5, 10); // 2 + 3 + 5 + 10 = 20 출력
c.cal('-', 10, 2); // 10 - 2 = 8 출력
c.cal('-', 10, 2, 3); // 10 - 2 - 3 = 5 출력
c.cal('-', 10, 2, 3, 5); // 10 - 2 - 3 - 5 = 20 출력
c.cal('*', 10, 2); // 10 * 2 = 20 출력
c.cal('*', 10, 2, 3); // 10 * 2 * 3 = 60 출력
c.cal('/', 10, 2); // 10 / 2 = 5 출력
c.cal('/', 10, 2, 3); // 10 / 2 / 3 = 1 출력
}
class Calculator3 {
public void cal(char opr, int... nums) {
// 최소한 피연산자(데이터)가 2개 이상일 때만 연산 수행
if(nums.length < 2) {
System.out.println("피연산자가 부족합니다!");
return;
}
int total = nums[0]; // 연산을 누적할 변수(배열의 첫번째 숫자를 초기값으로 저장)
// 다음 연산은 배열의 두번째 숫자부터 시작
if(opr == '+') {
System.out.print(nums[0]);
for(int i = 1; i < nums.length; i++) {
System.out.print(" + " + nums[i]);
total += nums[i];
}
} else if(opr == '-') {
System.out.print(nums[0]);
for(int i = 1; i < nums.length; i++) {
System.out.print(" - " + nums[i]);
total -= nums[i];
}
} else if(opr == '*') {
System.out.print(nums[0]);
for(int i = 1; i < nums.length; i++) {
System.out.print(" * " + nums[i]);
total *= nums[i];
}
} else if(opr == '/') {
System.out.print(nums[0]);
for(int i = 1; i < nums.length; i++) {
System.out.print(" / " + nums[i]);
total /= nums[i];
}
}
System.out.println(" = " + total);
}
}
'BackEnd > Java' 카테고리의 다른 글
생성자 (Constructor) (0) | 2020.02.12 |
---|---|
패키지(Package)와 import (0) | 2020.02.11 |
Getter, Setter (0) | 2020.02.11 |
메서드 (method) (0) | 2020.02.04 |
배열 (Array) (1) | 2020.01.23 |