728x90
반응형
이번 글에서는 자바에서 자주 쓰이는 메소드의 형태를 소개하려고 한다.
오버로딩에 관한 예제 코드이다.
나는 사칙 연산을 Main class에서 하려고 하는데 이 때 Calculator라는 클래스를 새로 설계하여 사용할 것이다.
Calculator.java
public class Calculator {
//멤버 메소드
//더하기 메소드
int sum(int x, int y) {
return x + y;
}
//빼기 메소드
int subtract(int x, int y) {
return x - y;
}
//곱셈 메소드
int multiply(int x, int y) {
return x * y;
}
//나눗셈 메소드
int divide(int x, int y) {
return x / y;
}
//실수형 값에 대한 사칙연산 메소드를 추가
//유사 기능을 단순히 자료형이 다르다고해서 메소드 이름을 별도로 만들면 나중에 사용하는 쪽에서 매우 불편
//메소드 이름은 같고 파라미터는 다른 메소드를 제작
//method overloading
double sum(double x, double y) {
return x + y;
}
double subtract(double x, double y) {
return x - y;
}
double multiply(double x, double y) {
return x * y;
}
double divide(double x, double y) {
return x / y;
}
//문자열 데이터를 받아서 int로 바꾸어 산술 연산하는 메소드
int sum(String x, String y) {
int a = Integer.parseInt(x);
int b = Integer.parseInt(y);
return a + b;
}
}
Main.java
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 10;
int b = 4;
//사칙연산을 해주는 계산기 객체 생성(메소드만 있는 클래스)
Calculator cal = new Calculator();
int sum = cal.sum(a, b);
System.out.println(sum);
int sub = cal.subtract(a, b);
System.out.println(sub);
int mul = cal.multiply(a, b);
System.out.println(mul);
int div = cal.divide(a, b);
System.out.println(div);
//실수형 숫자에 대한 사칙연산 의뢰
//메소드 오버로딩에 대한 학습
double c = 3.5;
double d = 4.6;
//메소드 오버로딩
System.out.println(cal.sum(c, d));
System.out.println(cal.subtract(c, d));
System.out.println(cal.multiply(c, d));
System.out.println(cal.divide(c, d));
//원한다면 문자열 데이터의 산술 연산 기능도 만들 수 있다
System.out.println("123" + "456");
System.out.println(cal.sum("123", "456"));
//별외기능
//메소드 파라미터를 만들 때 "가변길이 인자"라는 문법
Test t = new Test();
t.aaa();
t.aaa(10);
t.aaa(10, 20);
System.out.println(t.bbb());
System.out.println(t.bbb(10));
System.out.println(t.bbb(5, 3));
System.out.println(t.bbb(4, 2, 6));
}
}
class Test {
//가변 길이 인자 [...]
void aaa(int... n) {
//가변 길이 인자 변수 n은 배열의 참조 변수
//System.out.println(n); //[I@xxxxxxx 출력
for (int i = 0; i < n.length; i++) {
System.out.print(n[i] + " ");
}
System.out.println();
}
//가변 길이 인자는 오버로딩 불가
int bbb(int... n) {
int sum = 0;
for (int t : n) {
sum += t;
}
return sum;
}
}
먼저 메소드를 오버로딩하여 사용하는 이유는 간단하다.
같은 이름의 메소드를 사용하는데 불편함을 덜기 위해서이다.
지금 위의 예제처럼 덧셈을 하고싶을 때, 원래대로는 정수형 메소드와 실수형 메소드의 이름을 나눠야 한다.
하지만, 메소드 오버로딩을 통해 같은 이름 하나로 두 작업을 모두 할 수 있다.
이 경우, 이클립스에서 sum()이라는 메소드를 호출할 때 자동완성으로 두 줄이 뜨게되고
당연히 둘 중에 한 메소드를 선택해 파라미터의 타입을 맞춰쓰면 된다.
그리고 Calculator.java를 쭉 내리면서 보다보면 문자열 데이터를 입력받아 정수형 덧셈을 하는 메소드가 있는데
사실 이 메소드는 예외의 소지가 다분하다. 이는 추후에 예외에 관한 글로 다시 소개해보도록 하겠다.
이어서, Main.java에 Test라는 클래스에서 가변 길이 인자라는 문법을 사용했는데
지금까지 본 클래스들 중에 이 문법을 사용하는 메소드는 보지 못했다.
그리고 당연하게도 이 메소드는 오버로딩이 불가능하다. 왜냐하면, 파라미터의 개수가 정해져 있지 않기 때문이다.
728x90
반응형
'Language > Java' 카테고리의 다른 글
자바의 접근 제한자(Access Modifier) (0) | 2022.04.28 |
---|---|
자바의 변수 종류 (0) | 2022.03.25 |
자바에서의 메소드 (0) | 2022.03.10 |
자바의 패키지 (0) | 2022.03.07 |
자바의 클래스 소개 (0) | 2022.03.02 |