오버로딩(Overloading)
하나의 클래스 내에 같은 이름의 메소드를 여러 개 정의를 한다. 매개변수의 개수 또는 타입이 다르게 구현이 되어야 한다. 반환 타입의 경우 오버로딩을 구현하는데 아무런 영향을 주지 못 함.
ptint() 메서드도 이미 오버로딩으로 지정이 되어있다!
public static void main(String[] args) {
MyMath mm = new MyMath();
System.out.println("mm.add(3, 3) 결과 : " + mm.add(3, 3));
System.out.println("mm.add(3L, 3) 결과 : " + mm.add(3L, 3));
System.out.println("mm.add(3, 3L) 결과 : " + mm.add(3, 3L));
System.out.println("mm.add(3L, 3L) 결과 : " + mm.add(3L, 3L));
//int[] a = new int[] {100, 200, 300};
int[] a = {100, 200, 300};
System.out.println("mm.add(a) 결과 : " + mm.add(a));
}
}
class MyMath{
int add(int a, int b)
{
System.out.print("int add(int a, int b) - ");
return a+b;
}
long add(long a, int b)
{
System.out.print("int add(long a, int b) - ");
return a+b;
}
long add(int a, long b)
{
System.out.print("int add(int a, long b) - ");
return a+b;
}
long add(long a, long b)
{
System.out.print("int add(long a, long b) - ");
return a + b;
}
int add(int[] a)
{
System.out.print("int add(int[] a) - ");
int sum = 0;
for(int i=0; i<a.length; i++)
{
sum += a[i];
}
return sum;
}
}
이름은 같지만 타입이 다른 매개변수들이다.
이런것을 보고 오버로딩이라고 한다.
System.out.println("mm.add(3, 3) 결과 : " + mm.add(3, 3));
- 끝부터 계산을 한다. mm.add(3, 3)
메소드로 이동 -> 위에서 아래부터 실행을 함 -> 프린트부터 출력을 함 -> 메인 클래스 출력을 함 -> 리턴은 마지막에 출력이 된다.
long add(long a, int b)
{
System.out.print("int add(long a, int b) - ");
return a+b;
}
메소드 부분에서 int와 long이 있는 경우는 리턴 타입을 long으로 바꿔주어야한다. 그 이유는 long이 int보다 값이 크기 때문이다. 형변환 때문에 큰 쪽으로 맞춘 것임
int add(int[] a)
{
System.out.print("int add(int[] a) - ");
int sum = 0;
for(int i=0; i<a.length; i++)
{
sum += a[i];
}
return sum;
}
누적 값은 무조건 0으로 초기화를 해줘야한다.
시작값이 넘어 온다는 말은 반드시 정의가 되어 있어야 한다.
자바에서는 배열에서 (배열명에) .lenth를 가지고 있다.
자바에서 일반 변수(sum)는 초기화를 시키지 않으면 변수를 쓸 수 없음
return a[0] + a[1] + a[2];
배열 변수의 경우 이렇게 안 하는 이유
이 문제에서는 가능하지만.. 메인 값이 늘어나는 경우에 메소드까지 바꾸어주어야 하니까 for문을 사용한다.
회사면접 TIP
오버로딩과 오버라이딩의 차이 알아야 됨!!
공통모듈 개발자
우리 회사에서 쓰는 프로그램들을 직접 만든다.
'개발일지 > Java + Spring' 카테고리의 다른 글
211027 Java - 초기화 블록 순서, 생성자 없이 인스턴스 블록에서 구현 (2) (0) | 2021.10.27 |
---|---|
211027 Java - 생성자를 통한 인스턴스 복사 (1) (0) | 2021.10.27 |
클래스 - 참조형 반환타입, 같은 클래스 내 클래스/인스턴스 메소드 (0) | 2021.10.26 |
211022 Java - 메소드(클래스/인스턴스/기본형/참조형) (0) | 2021.10.22 |
클래스 파일 확인 - 같은 파일에 있는 클래스가 나눠져서 저장? (0) | 2021.10.21 |