KT DS

[KT DS 보강] 메소드 응용

가은(JANE) 2025. 3. 12. 17:51

Q1. 숫자를 곱해서 반환시키는 함수 만들기

public class Method{

	//Overriding
	// - 똑같은 메소드를 여러개 만드는 방법
	
	/**
	 * 숫자를 곱해서 반환시키는 함수
	 * @param number 곱할 숫자 10
	 * @param times 곱할 횟수 5
	 * @return 10 * 10 * 10 * 10 * 10
	 */

	public static int multiplication(int number, int times) {
		int result = 1;
		for(int i =0; i<times; i++) {
			// i = 0, 1, 2, 3, 4 총 5번 반복.
			result *= number;
		}
		
		return result;
	}
	
	public static void main(String[] args) {
		int multiplicationResult = multiplication(10, 5);
		System.out.println(multiplicationResult);
	}

}

 

오버로딩

-> 메소드에서만 중복생성을 허락하는 경우가 있다.

: 파라미터의 타입과 개수가 다를 때만 가능!

이름이 다르다고 되는 게 아님
타입이 다르기 때문

 

Q2. 제곱수 출력하는 함수 만들기

public class Method{

    public static int multiplication(int number) {
            return number*number;
	}
    public static void main(String[] args) {
            int multiplicationResult = multiplication(10, 5);
            System.out.println(multiplicationResult);

            int result = multiplication(10);
            System.out.println(result);
            int result2 = multiplication(5);
            System.out.println(result2);
            int result3 = multiplication(100000,2);
            System.out.println(result3);
	}
}

자 여기서 뭐가 문제일까?

 

오버플로우

마지막이 답이 틀리다!

오버플로우가 발생!!

public class Method{
	//Overriding
	// - 똑같은 메소드를 여러개 만드는 방법
	public static long multiplication(long number) {
		return number*number;
	}
	
	/**
	 * 숫자를 곱해서 반환시키는 함수
	 * @param number 곱할 숫자 10
	 * @param times 곱할 횟수 5
	 * @return 10 * 10 * 10 * 10 * 10
	 */
	public static long multiplication(long number, long times) {
		long result = 1;
		for(int i =0; i<times; i++) {
			// i = 0, 1, 2, 3, 4 총 5번 반복.
			result *= number;
		}
		
		return result;
	}
	
	public static void main(String[] args) {
		long multiplicationResult = multiplication(10, 5);
		System.out.println(multiplicationResult);
		
		long result = multiplication(10);
		System.out.println(result);
		long result2 = multiplication(5);
		System.out.println(result2);
		long result3 = multiplication(100000,2);
		System.out.println(result3);
	}
}

 

int에서 long으로 바꾸면 된다!

 

main에서 multiplication(10)을 실행함. 

long multiplication(10)이 됨.

return multiplication(number,2)가 실행함.

-> 파라미터가 2개이기 때문에 본인을 호출하지 않는 것임.

이렇게 되면 재귀호출임!

무한굴레~

 

- 디버깅

초록줄부터 실행할 차례이다.

stack

method클래스에서 main을 실행하고 있는데, 30번째 줄에서 멈췄다

stack이 쌓임

함수가 함수를 부르면 스택이 하나 쌓임.

method 클래스에서 multiplication을 실행하고 있는데,

8번라인을 실행할 차례이다.

 

number라는 파라미터의 값이 10이다.

-> 8번 라인은 multiplication을 반환하는 것.(return = 할당하는 연산자와 같음)

반환 되어서 Pop됨

-> multiplication이 100이라는 숫자를 반환시켰다.

'KT DS' 카테고리의 다른 글

[KT DS 보강] Primitive와 Reference  (0) 2025.03.17
[KT DS 보강] 메소드 기초  (0) 2025.03.10
[KT DS] Package와 Import와 접근 제어자  (0) 2025.02.06
[KT DS] 클래스  (0) 2025.02.06
[KT DS 25기] 메소드  (1) 2025.02.04