JAVA/기본 이론

JAVA | 메서드(method)

로아다 2023. 3. 18. 22:33
728x90
반응형
메서드 (method)

- 기능을 미리 정의해두고 나중에 불러다 쓰는

- 메서드를 정의한 시점에서는 아무것도 실행되지 않고 어딘가에서 불러다 써야 실행된다.

- 나중에 재사용 가능성이 있는 코드들을 메서드로 만들어두면 작업의 반복을 줄일 수 있다.

 


 

메서드의 매개변수 (argument)

- 메서드 호출할 해당 메서드 전달할 있는

- 메서드 호출할 ()안에 전달하는 값을 인자라고 한다.

- 메서드 정의할 ()안에 선언하는 인자를 받을 수 있는 변수를 매개변수라고 한다.

- 매개변수의 개수에는 제한이 없다.

- 매개변수 타입에 ...을 찍으면 인자를 무한대로 받을 수 있다.

 


 

메서드의 타입 (리턴 타입)

- 메서드의 타입은 메서드 실행 결과 돌아오는 값의 타입을 의미한다.

- void :  메서드 실행하고나면 아무 값도 돌아오지 않는다.

- : 이 메서드는 실행하고나면 해당 타입 값을 반드시 돌려준다.

 


 

  • 다양한 타입의 메서드 실행
public static int getBasket(int apple) {
	if (apple % 10 == 0) {
		return apple / 10; 
	} else {
		return apple / 10 + 1;
	}
}



public static void plusAll(int ... nums) {

// ...으로 받은 매개변수는 자동으로 배열이 되어 있다.

	int sum = 0;

	for (int i = 0; i < nums.length; ++i) {
		sum += nums[i];
	} 

	System.out.println("sum: " + sum);
}



/**
* 이 메서드는 사과의 개수를 입력하면 필요한 바구니의 개수를 출력해주는 메서드다.
* @param apple - 사과의 개수를 입력해주셈 (0 이상)
* @param size - 바구니의 크기를 입력해주셈 (1 이상)
*/
public static void houManyBasket(int apple, int size) {

	if (apple % 10 == 0) {
		System.out.println("basket: " + apple / size);
	} else {
		System.out.println("basket: " + (apple / size + 1));
	}
}
	



public static void plus(int a, int b) {
	System.out.println("plus 결과: " + a + b);
}




public static void rabbit() {
	System.out.println(" /)/)");
	System.out.println("( ..)");
	System.out.println("( >$");
}




public static void main(String[] args) {
	rabbit();
	plus(33, 30);
	plus(123, 4567);
	houManyBasket(80, 10);
	houManyBasket(81, 10);
	
	// 매개변수 ...에는 인자값을 주고싶은만큼 줄 수 있다.
	plusAll(10, 99 , 9999 , 99 ,9);
	plusAll(10);
	plusAll(10);
	plusAll(10);
	plusAll(); // 0으로 출력
	
	// 리턴 타입이 void가 아닌 메서드는 실행 결과가 호출된 장소에 돌아온다. (return)
	int basket = getBasket(13) + getBasket(55) + getBasket(99);
	System.out.println("필요한 총 바구니 개수: " + basket);
	}
}

 

 

 


 

Quiz

# 다음 메서드를 정의하고 올바르게 동작하는지 테스트 해보세요

 

 1. 전달한 문자가 알파벳이면 true를 반환, 아니면 false를 반환하는 메서드

 2. 전달한 숫자가 3의 배수이면 true를 반환, 아니면 false를 반환하는 메서드

 3. 숫자를 하나 전달하면 문자열 "짝수입니다" 또는 "홀수입니다"를 반환하는 메서드

 4. 숫자를 전달하면 해당 숫자의 모든 약수를 int[]로 반환하는 메서드

 5. 전달한 정수가 소수라면 true를 반환하고 아니면 false를 반환하는 메서드

 6. 메세지와 횟수를 전달하면 해당 메세지를 전달한 횟수만큼 반복하는 메서드

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Answer
package answer;

import java.util.Arrays;
import java.util.Scanner;

public class C01_FunctionQuiz {
	/*
       # 다음 메서드를 정의하고 올바르게 동작하는지 테스트 해보세요

         1. 전달한 문자가 알파벳이면 true를 반환, 아니면 false를 반환하는 메서드

         2. 전달한 숫자가 3의 배수이면 true를 반환, 아니면 false를 반환하는 메서드

         3. 숫자를 하나 전달하면 문자열 "짝수입니다" 또는 "홀수입니다"를 반환하는 메서드

         4. 숫자를 전달하면 해당 숫자의 모든 약수를 int[]로 반환하는 메서드

         5. 전달한 정수가 소수라면 true를 반환하고 아니면 false를 반환하는 메서드

         6. 메세지와 횟수를 전달하면 해당 메세지를 전달한 횟수만큼 반복하는 메서드
	 */

	// 1. 전달한 문자가 알파벳이면 true를 반환, 아니면 false를 반환하는 메서드
	public static boolean isAlphabet(char ch) {
		return ch <= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z';
	}
	
	// 2. 전달한 숫자가 3의 배수이면 true를 반환, 아니면 false를 반환하는 메서드
	public static boolean isNumMul3(int num) {
		return num % 3 == 0;
	}
	
	// 3. 숫자를 하나 전달하면 문자열 "짝수입니다" 또는 "홀수입니다"를 반환하는 메서드
	public static String checkEvenOdd(int num) {
		return num % 2 == 0 ? "짝수입니다." : "홀수입니다.";
	}
	
	// 4. 숫자를 전달하면 해당 숫자의 모든 약수를 int[]로 반환하는 함수
	public static int[] yaksu(int num) {
		// null : 아직 가리키는게 없음
		// 배열 또는 대문자로 시작하는 타입을 초기화 할때 사용한다.
		
		int[] yaksuArr = null;
		int size = 0;
		
		for (int i = 1; i <= num; ++i) {
			if (num % i == 0) {
				// 새로운 약수가 발견될 때마다 크기가 1 증가한 배열을 새로 생성
				int[] newArr = new int[++size];
				
				// 이전 배열의 내용을 모두 새로운 배열에 복사 (비어있지 않다면)
				if (yaksuArr != null) {
					for (int j = 0; j < yaksuArr.length; ++j) {
						newArr[j] = yaksuArr[j];
					}
				}
				// 새로운 배열의 맨 마지막에 새로 발견한 약수를 추가
				newArr[newArr.length - 1] = i;
				
				// 방금 새로 만든 배열을 약수 배열로 만든다.
				yaksuArr = newArr;
			}
		}
		return yaksuArr;
	}
	
	// 5. 전달한 정수가 소수라면 true를 반환하고 아니면 false를 반환하는 메서드
	public static boolean isSosu(int num) {
		// 해당 숫자를 2부터 제곱근까지 나누어 봤을 때 나누어 떨어지는 게 존재하면 false
		for (int i = 2; i <= Math.sqrt(num); ++i) {
			if (num % i  == 0) {
				return false;
			}
		}
		return true;
	}
	
	// 6. 메세지와 횟수를 전달하면 해당 메세지를 전달한 횟수만큼 반복하는 메서드
	public static void repeat(String message, int time) {
		
		for (int i = 0; i < time; ++i) {
			System.out.print(message);
		}
	}
	
	public static void main(String[] args) {
		
		// (1)
		Scanner sc = new Scanner(System.in);
		
		if (isAlphabet(sc.next().charAt(0))) {
			System.out.println("알파벳입니다.");
		} else {
			System.out.println("알파벳이 아닙니다.");
		}
		
		// (4)
		// 한번에 yaksu 메서드 값을 같이 적어 실행이 가능함
		System.out.println(Arrays.toString(yaksu(55))); 
		
		// (5)
		System.out.println(isSosu(13));
		
		// (6)
		repeat("hello!", 5);
	}
}
728x90
반응형