본문 바로가기

개발일지/Java + Spring

메소드 오버로딩

오버로딩(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

오버로딩과 오버라이딩의 차이 알아야 됨!!

 

 

공통모듈 개발자

우리 회사에서 쓰는 프로그램들을 직접 만든다.