Java 메서드는 입력값을 매개변수로 받고, 한 가지 일을 처리한 뒤 결과를 반환하도록 코드를 묶는 단위다. 계산기, 문자열 가운데 글자, 거듭제곱, 나눗셈 판별 예제를 같은 구조로 구현하면 매개변수 → 처리 → 반환값 → 호출의 흐름이 선명해진다.
클래스·객체와 메서드의 관계가 먼저 필요하다면 Java 메서드와 객체지향: 클래스·생성자·상속 한 번에 정리를 읽고 이 실전 예제로 이어가면 된다.
좋은 메서드의 기준: 이름만 보고 역할을 알 수 있고, 입력과 출력이 분명하며, 잘못된 입력을 조용히 숨기지 않는다.

호출값이 매개변수로 전달되고 계산 결과가 호출 지점으로 돌아오는 메서드 흐름
1. 메서드 선언은 네 부분으로 읽는다
static int add(int num1, int num2) {
return num1 + num2;
}int는 반환형, add는 메서드명, 괄호 안의 num1과 num2는 매개변수다. return을 만나면 메서드 실행이 끝나고 계산 결과가 호출 지점으로 돌아간다.
add(7, 5) 호출 → num1 = 7, num2 = 5 전달 → 덧셈 → 12 반환
static 메서드인 main에서 객체 생성 없이 바로 부르려면 예제 메서드도 static으로 선언한다. 객체와 함께 사용하는 인스턴스 메서드는 동작 방식이 다르지만, 매개변수와 반환값을 읽는 원리는 같다.
| 요소 | 예시 | 역할 |
|---|---|---|
| 반환형 | int, String, void | 호출 지점으로 돌려줄 값의 자료형 |
| 메서드명 | calculate | 동작을 나타내는 이름 |
| 매개변수 | int base | 메서드가 처리할 입력값 |
| 반환문 | return result; | 결과를 돌려주고 실행 종료 |
2. 연산자에 따라 계산하는 calculate()
숫자 두 개와 연산자를 매개변수로 받는다. 여러 if문보다 switch문을 쓰면 허용하는 연산자와 각 반환값이 한눈에 보인다. 나눗셈 결과의 소수 부분을 보존하기 위해 반환형은 double로 정했다.
static double calculate(double num1, double num2, char operator) {
switch (operator) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
if (num2 == 0) {
throw new IllegalArgumentException("0으로 나눌 수 없습니다.");
}
return num1 / num2;
default:
throw new IllegalArgumentException("지원하지 않는 연산자입니다.");
}
}calculate(50, 15, '-') → 35.0
calculate(50, 15, '*') → 750.0
calculate(10, 4, '/') → 2.5지원하지 않는 연산자를 받았을 때 0을 반환하면 실제 계산 결과 0과 오류를 구분할 수 없다. 예외로 잘못된 입력을 알리는 편이 안전하다.
3. 홀수·짝수 길이를 모두 처리하는 getMiddle()
길이가 홀수면 가운데 한 글자, 짝수면 가운데 두 글자를 반환한다. 문자열을 배열로 쪼갤 필요 없이 substring(start, end)를 사용하면 시작 위치와 끝 위치만 계산할 수 있다.
시작 위치 (length - 1) / 2 · 끝 위치 length / 2 + 1
static String getMiddle(String word) {
if (word == null || word.isEmpty()) {
throw new IllegalArgumentException("빈 문자열은 처리할 수 없습니다.");
}
int length = word.length();
int start = (length - 1) / 2;
int end = length / 2 + 1;
return word.substring(start, end);
}getMiddle("power") → "w"
getMiddle("test") → "es"
getMiddle("A") → "A"substring의 두 번째 인덱스는 포함되지 않는다. test의 길이는 4이므로 start = 1, end = 3이고 인덱스 1과 2의 es가 반환된다.
4. 반복문으로 거듭제곱을 계산하는 power()
base를 exponent번 곱한다. 누적 곱의 시작값은 반드시 1이어야 한다. 시작값을 특정 밑인 2로 고정하면 power(3, 4)처럼 다른 밑을 넣었을 때 잘못된 결과가 나온다.
static long power(int base, int exponent) {
if (exponent < 0) {
throw new IllegalArgumentException("지수는 0 이상이어야 합니다.");
}
long result = 1;
for (int i = 0; i < exponent; i++) {
result *= base;
}
return result;
}power(2, 3) → 8
power(3, 4) → 81
power(7, 0) → 10제곱 결과가 1인 이유도 시작값에서 드러난다. exponent = 0이면 반복문이 한 번도 실행되지 않고 초기값 1이 그대로 반환된다. 큰 수는 long 범위도 넘을 수 있으므로 실제 대용량 계산에는 BigInteger가 필요하다.
5. 나누어떨어지는지 boolean으로 반환하는 isDivide()
판별 결과가 참 또는 거짓이라면 문자열 대신 boolean을 반환하는 편이 명확하다. 단, 나누는 수가 0이면 나머지 연산을 할 수 없으므로 먼저 검사해야 한다.
static boolean isDivide(int dividend, int divisor) {
if (divisor == 0) {
throw new IllegalArgumentException("0으로 나눌 수 없습니다.");
}
return dividend % divisor == 0;
}isDivide(10, 2) → true
isDivide(10, 3) → falsecondition ? true : false처럼 삼항 연산자를 덧붙일 필요는 없다. dividend % divisor == 0 자체가 이미 boolean 값이다.
6. 네 메서드를 한 번에 실행하는 전체 코드
public class MethodExamples {
public static void main(String[] args) {
System.out.println(calculate(50, 15, '-'));
System.out.println(calculate(10, 4, '/'));
System.out.println(getMiddle("power"));
System.out.println(getMiddle("test"));
System.out.println(power(2, 3));
System.out.println(power(3, 4));
System.out.println(power(7, 0));
System.out.println(isDivide(10, 2));
System.out.println(isDivide(10, 3));
}
static double calculate(double num1, double num2, char operator) {
switch (operator) {
case '+': return num1 + num2;
case '-': return num1 - num2;
case '*': return num1 * num2;
case '/':
if (num2 == 0) {
throw new IllegalArgumentException("0으로 나눌 수 없습니다.");
}
return num1 / num2;
default:
throw new IllegalArgumentException("지원하지 않는 연산자입니다.");
}
}
static String getMiddle(String word) {
if (word == null || word.isEmpty()) {
throw new IllegalArgumentException("빈 문자열은 처리할 수 없습니다.");
}
int length = word.length();
return word.substring((length - 1) / 2, length / 2 + 1);
}
static long power(int base, int exponent) {
if (exponent < 0) {
throw new IllegalArgumentException("지수는 0 이상이어야 합니다.");
}
long result = 1;
for (int i = 0; i < exponent; i++) {
result *= base;
}
return result;
}
static boolean isDivide(int dividend, int divisor) {
if (divisor == 0) {
throw new IllegalArgumentException("0으로 나눌 수 없습니다.");
}
return dividend % divisor == 0;
}
}7. 메서드 예제에서 자주 틀리는 부분
반환형과 실제 반환값이 다른 경우
String을 반환한다고 선언했다면 모든 정상 경로에서 문자열을 반환해야 한다. 결과가 필요 없는 출력 전용 메서드만 void를 사용한다.
정수 나눗셈으로 소수 부분이 사라지는 경우
10 / 4는 두 피연산자가 정수면 2다. 계산기처럼 소수 결과가 필요하면 매개변수와 반환형을 double로 선언한다.
문자와 문자열 따옴표를 혼동하는 경우
연산자 한 글자는 '+'처럼 작은따옴표를 쓰는 char다. "+"는 String이므로 char operator와 비교할 수 없다.
거듭제곱 누적값을 base로 고정하는 경우
초기값을 base로 두고 반복 횟수를 하나 줄이는 구현도 가능하지만 0제곱을 별도로 처리해야 한다. result = 1에서 정확히 지수만큼 곱하면 모든 0 이상의 지수를 같은 규칙으로 처리한다.
핵심 요약
- 메서드는 매개변수로 입력을 받고 반환형에 맞는 결과를 돌려준다.
- 계산기는 잘못된 연산자와 0 나누기를 예외로 처리한다.
- 가운데 글자는 문자열 길이로 시작·끝 인덱스를 계산한다.
- 거듭제곱의 누적 곱은 1에서 시작하고 지수만큼 반복한다.
- 참·거짓 판별은
boolean으로 반환하고 0으로 나누는 입력을 먼저 막는다. - 정상 결과와 오류가 섞이지 않도록 입력 조건을 명확히 검사한다.
'자격증·공부 아카이브 > Java 기초' 카테고리의 다른 글
| Java 자릿수와 진법 변환: 숫자 합·10진수·2진수 원리 (0) | 2026.07.30 |
|---|---|
| Java 배열 문제 풀이: 조건 필터링·배수·정렬·가장 가까운 두 수 (0) | 2026.07.30 |
| Java 별찍기 완전정리: 이중 for문으로 삼각형·역삼각형·피라미드 출력 (0) | 2026.07.30 |
| Java 메서드와 객체지향: 클래스·생성자·상속 한 번에 정리 (0) | 2026.07.16 |
| Java 조건문·반복문·배열: 코딩테스트 입문 (0) | 2026.07.15 |