1. 메서드 선언 문법
Java에서 메서드 선언은 요리책의 레시피와 비슷합니다. 메서드가 무엇을 반환하는지(타입), 이름이 무엇인지, 어떤 재료(매개변수)가 필요한지 적고, 실제 레시피(메서드 본문)를 작성합니다.
일반 형태:
tip_vozvrashchaemogo_znacheniya imyaMetoda(parametry)
{
// 여기에 명령을 작성합니다
}
- 반환 타입 — 메서드가 무엇을 반환하는지(예: int, 아무것도 반환하지 않을 때는 void, String 등).
- 메서드 이름 — Java 규칙에 맞는 이름을 정합니다.
- 매개변수 — 메서드가 사용할 변수 목록(비어 있을 수도 있음).
- 메서드 본문 — 중괄호 { } 안에 작성하는 명령들.
매개변수가 없는 메서드 예시
void printHello()
{
System.out.println("안녕, 세상!");
}
설명: void — 반환값이 없습니다. printHello — 이름. () — 매개변수가 없습니다.
매개변수가 있는 메서드 예시
void printName(String name)
{
System.out.println("안녕, " + name + "!");
}
설명: void — 값을 반환하지 않습니다. printName — 메서드 이름. String name — String 타입의 매개변수 1개.
여러 매개변수가 있는 메서드 예시
void printSum(int a, int b)
{
System.out.println("합계: " + (a + b));
}
설명: 매개변수는 쉼표로 구분합니다. 메서드 내부에서는 일반 변수처럼 사용하며, + 연산자가 덧셈을 수행합니다.
중요!
- 메서드는 클래스 내부에서 선언하며, 다른 메서드 안에는 선언하지 않습니다.
- Java에서는 메서드 안에 메서드를 선언할 수 없습니다 — “마트료시카”는 안 됩니다.
2. 메서드 호출
메서드를 선언하는 것은 “커피 만들어 드립니다”라고 간판을 거는 것과 같습니다. 실제로 커피를 얻으려면 메서드를 호출해서 이름을 쓰고 매개변수 값을 전달해야 합니다.
메서드 호출 방법
메서드가 같은 클래스에 있고 static으로 선언되어 있다면(main처럼) 단순히 이름으로 호출할 수 있습니다:
printHello();
printName("Alisa");
printSum(3, 5);
메서드가 static이 아니라면 객체를 통해 호출해야 합니다(이는 나중에 클래스와 객체를 배울 때 다룹니다).
예시: main에서 메서드 호출
public class MethodsDemo
{
public static void main(String[] args)
{
printHello();
printName("Bob");
printSum(10, 20);
}
static void printHello()
{
System.out.println("안녕, 세상!");
}
static void printName(String name)
{
System.out.println("안녕, " + name + "!");
}
static void printSum(int a, int b)
{
System.out.println("합계: " + (a + b));
}
}
주의: 메서드들은 static 한정자로 선언되어 있어 main에서 호출할 수 있습니다(main도 static입니다).
3. 매개변수와 인수: 무엇일까요?
매개변수 — 메서드를 선언할 때 괄호 안에 선언하는 변수들입니다.
인수 — 메서드를 호출할 때 실제로 전달하는 값들입니다.
비유: 매개변수는 ‘장보기 목록’, 인수는 실제로 장바구니에 담는 물건입니다.
예시
static void greet(String name) // name — 매개변수
{
System.out.println("안녕, " + name + "!");
}
public static void main(String[] args)
{
greet("Katya"); // "Katya" — 인수
greet("Vasya"); // "Vasya" — 인수
}
greet("Katya")를 호출하면, 메서드 내부에서 변수 name은 "Katya"와 같아집니다.
여러 매개변수
static void printInfo(String name, int age)
{
System.out.println("이름: " + name + ", 나이: " + age);
}
public static void main(String[] args)
{
printInfo("Masha", 25);
printInfo("Petya", 31);
}
주의! 매개변수의 타입과 순서는 메서드를 선언한 것과 일치해야 합니다.
4. 실습: 나만의 메서드 작성
사용자 이름을 포함해 인사말을 출력하는 메서드
static void sayHelloTo(String name)
{
System.out.println("안녕, " + name + "!");
}
public static void main(String[] args)
{
sayHelloTo("Andrey");
sayHelloTo("Elvira");
}
두 수의 합을 계산하는 메서드
static void printSum(int a, int b)
{
int sum = a + b;
System.out.println("합계: " + sum);
}
public static void main(String[] args)
{
printSum(7, 8);
printSum(15, -5);
}
배열의 요소를 출력하는 메서드
static void printArray(int[] array)
{
System.out.print("배열: ");
for (int i = 0; i < array.length; i++)
{
System.out.print(array[i] + " ");
}
System.out.println();
}
public static void main(String[] args)
{
int[] nums = {1, 2, 3, 4, 5};
printArray(nums);
}
같은 문자열을 n번 출력하는 메서드
static void repeatPrint(String text, int n)
{
for (int i = 0; i < n; i++)
{
System.out.println(text);
}
}
public static void main(String[] args)
{
repeatPrint("Java — 멋져요!", 3);
}
5. 메서드가 애플리케이션 구성에 주는 도움
간단한 콘솔 게임이나 계산기를 만든다고 해도, 각 작업을 메서드로 나누면 코드가 훨씬 이해하기 쉬워집니다.
예시: 미니 계산기
public class Calculator
{
public static void main(String[] args)
{
printGreeting();
printSum(3, 7);
printDifference(10, 4);
}
static void printGreeting()
{
System.out.println("계산기에 오신 것을 환영합니다!");
}
static void printSum(int a, int b)
{
System.out.println("합계: " + (a + b));
}
static void printDifference(int a, int b)
{
System.out.println("차이: " + (a - b));
}
}
앞으로 곱셈, 나눗셈, 숫자 배열 처리 등 새로운 메서드를 추가하면서 애플리케이션을 확장하더라도, 코드가 한 줄로 길게 늘어진 ‘담요’처럼 되지 않게 유지할 수 있습니다.
6. 유용한 포인트
메서드 이름
- 메서드 이름은 보통 소문자로 시작하며 camelCase를 사용합니다: printSum, sayHelloTo, calculateArea.
- 이름은 동작을 드러내야 합니다. doStuff나 method1 같은 이름은 피하세요.
매개변수 순서
- 호출 시 매개변수의 순서와 타입을 지키세요.
- 메서드가 printInfo(String name, int age)를 받는다면, printInfo(25, "Masha")처럼 호출할 수 없습니다.
같은 이름의 메서드를 둘 이상 선언할 수 있을까요?
네, 매개변수 목록(타입 또는 개수)이 다르면 가능합니다. 이를 메서드 오버로딩이라고 합니다:
static void printSum(int a, int b) { /* ... */ }
static void printSum(int a, int b, int c) { /* ... */ }
이 주제는 별도의 강의에서 다룰 예정입니다 — 지금은 Java가 같은 이름의 메서드를 하나로 제한하지 않는다는 것만 알고 있으면 됩니다.
7. 메서드와 매개변수에서 흔한 오류
오류 1: 호출 시 매개변수의 개수나 타입이 일치하지 않음.
메서드가 printSum(int a, int b)로 선언되었는데 printSum(5)처럼 호출하면, 그런 메서드는 존재하지 않는다고 컴파일러가 알려줍니다. 마찬가지로 printSum("다섯", 7) — 타입 오류입니다.
오류 2: 매개변수와 인수를 혼동함.
메서드 선언에는 매개변수(예: int a, int b)를, 호출에는 인수(printSum(5, 7))를 씁니다. main에서 같은 이름의 변수를 굳이 만들 필요는 없습니다 — 중요한 것은 타입과 순서의 일치입니다.
오류 3: 메서드 안에서 또 다른 메서드를 선언하려 함.
Java에서는 메서드를 클래스 수준에서만 선언할 수 있습니다. 다른 메서드 내부에서는 선언할 수 없습니다.
오류 4: static 없이 main에서 호출하려 함.
main에서 메서드를 호출하려면, 선언에 static을 붙이거나 객체를 생성하여 그 객체의 메서드로 호출하세요. 자세한 내용은 OOP를 배울 때 다룹니다.
GO TO FULL VERSION