아래의 내용은 java_grammer 레파지토리 C02MethodClass 디렉터리에 저장되어있는 내용을 정리하였다.
아래 예제는 C01Method 클래스의 코드 일부다.
먼저, for문을 이용해서 1~10까지의 합(total)을 구하고 출력하는 코드를 작성했다.
int total1 = 0;
for (int i = 0; i < 10; i++) {
total1 += i;
}
System.out.println(total1);
이번엔 같은 방식으로 10~20까지의 합을 구해보자.
int total2 = 0;
for (int i = 10; i < 20; i++) {
total2 += i;
}
System.out.println(total2);
이처럼 코드의 중복이 계속 발생하는 상황이 생기면, 이를 피하기 위해 특정 기능을 메서드로 분리하는 것이 좋다.
이것이 바로 프로그래밍의 기본적인 발전 양상이다 – 중복 제거, 재사용성 향상, 유지보수 용이성 상승.
메서드의 기본 호출 방식은 다음 두 가지다.
클래스메서드와 객체메서드가 있으며, 우선 클래스 메서드의 호출방식만 정리해보겠다.
클래스명.메서드명() 메서드명() 형태로 직접 호출 가능아래는 getTotal 메서드의 호출 예시다.
System.out.println(C01Method.getTotal(30, 40));
System.out.println(getTotal(10, 20));
둘 중 두 번째 호출에서는 클래스명을 생략했는데, 같은 클래스 내에서 호출할 때는 클래스명을 생략할 수 있기 때문이다.
클래스는 객체를 찍어내는 도안 같은 역할을 하지만, 메서드에 static 키워드를 붙이면 객체를 만들지 않아도 바로 호출할 수 있다.
메서드를 정의할 때는 다음과 같은 구성요소로 이루어진다.
public static int getTotal(int start, int end) {
int total = 0;
for (int i = start; i <= end; i++) {
total += i;
}
return total;
}
즉, public static int getTotal(int start, int end)는 "프로젝트 전역에서 접근 가능한 클래스 메서드로, int 값을 입력받아 int를 반환한다"는 의미다.
return 키워드는 단순히 값을 반환하는 역할 외에도 메서드 실행을 강제로 종료시키는 기능이 있다.
예를 들어,
if (조건) {
return; // 이후 코드 실행 안됨
}
void 메서드에서도 return을 사용할 수 있는데, 이때는 “메서드를 강제 종료한다”는 의미로만 사용된다.
다음은 C02MethodPractice 클래스에 작성된 소수 판별기 예제다.
import java.util.Scanner;
public class C02MethodPractice {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int input = Integer.parseInt(sc.nextLine());
if (isPrime(input)) {
System.out.println("입력하신 숫자는 소수입니다.");
} else {
System.out.println("입력하신 숫자는 소수가 아닙니다.");
}
}
입력한 정수를 받아서 isPrime() 메서드를 호출하고, 그 결과에 따라 소수 여부를 출력한다.
이제 핵심 메서드를 살펴보자.
public static boolean isPrime(int num) {
if (num <= 1) {
// return을 만나면 메서드는 즉시 종료
return false;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
false를 반환해 종료한다. true 반환).여기서 return이 여러 번 사용된 점에 주목할 필요가 있다.
조건마다 다른 시점에 return을 걸어 빠르게 메서드를 종료함으로써, 불필요한 반복을 방지한다.
void는 본래 반환값이 없는 메서드 타입이지만, return으로 메서드를 중단할 수는 있다.
public static void voidMethod() {
if (true) {
return; // 메서드 강제 종료
}
System.out.println("hello world");
}
이 코드는 항상 return 조건이 먼저 실행되어 "hello world"는 출력되지 않는다.
즉, return은 값을 반환하지 않더라도 메서드의 흐름 제어용으로 사용될 수 있다.