메서드(method)는 객체지향 프로그래밍에서 클래스 내부에 정의된 함수를 뜻하며, 특정 작업을 수행하는 코드 블록이다. 메서드는 코드의 재사용성과 모듈화를 촉진하며, 코드의 가독성과 유지보수성을 향상시킨다.
메서드는 클래스의 일부로써 해당 클래스에 속하며, 클래스의 객체(instance)에서 호출되며. 다음과 같은 구성 요소로 이루어진다.
메서드 이름: 메서드를 식별하는데 사용되는 이름.
매개변수(Parameter)(파라미터): 메서드가 작업을 수행하는 데 필요한 데이터를 전달하기 위한 변수. 매개변수는 선택적일 수 있다.
반환 유형(Return Type): 메서드가 완료된 후에 반환되는 데이터의 유형을 나타낸다. 반환 유형이 없는 경우에는 void 키워드를 사용.
메서드 본문(Method Body): 메서드가 수행하는 실제 작업을 정의하는 부분.
public class Calculator {
// add 메서드: 두 정수를 더하는 메서드
public int add(int a, int b) {
return a + b;
}
// subtract 메서드: 두 정수를 뺄셈하는 메서드
public int subtract(int a, int b) {
return a - b;
}
// multiply 메서드: 두 정수를 곱셈하는 메서드
public int multiply(int a, int b) {
return a * b;
}
// divide 메서드: 두 정수를 나눗셈하는 메서드
// 주의: b가 0일 경우 ArithmeticException을 발생시킴
public double divide(int a, int b) {
if (b == 0) {
throw new ArithmeticException("Divisor cannot be zero");
}
return (double) a / b;
}
// greet 메서드: 인사말을 출력하는 메서드 (반환 유형이 void)
public void greet(String name) {
System.out.println("Hello, " + name + "!");
}
}
메서드에 전달되는 데이터를 받아들이기 위해 매개변수를 사용. 매개변수는 메서드의 괄호 안에 선언되며, 메서드가 호출될 때 전달되는 값을 저장한다. 매개변수는 메서드 내에서 지역 변수로 취급되며, 해당 메서드 내에서만 사용 가능하다.
예를 들어, 위의 add 메서드에서 int a와 int b는 매개변수이다. 이 메서드를 호출할 때, 두 정수 값을 전달하면 해당 값들이 a와 b에 대입되어 덧셈 연산에 사용된다.
메서드가 완료된 후에 반환하는 데이터의 유형을 지정하는 데 사용된다. 반환 유형은 메서드 선언의 일부로 지정되며, 메서드 본문에서 return 키워드를 사용하여 반환될 데이터를 지정한다. 반환 유형이 없는 경우 void라는 키워드를 사용한1다.
예를 들어, 위의 add, subtract, multiply 메서드는 int형을 반환하므로, 이들 메서드를 호출한 곳에서는 정수 값을 받을 것이다. divide 메서드는 double형을 반환하므로, 실수 값을 받을 것이다.
메서드는 해당 클래스의 객체에서 호출된다. 메서드 호출은 객체의 이름 뒤에 마침표(.)를 사용하여 메서드 이름과 함께 호출된1다. 메서드 호출은 해당 메서드의 매개변수를 포함할 수 있다.
예를 들어, 위의 Calculator 클래스에서 add 메서드를 호출하려면 다음과 같이 할 수 있다.
Calculator calc = new Calculator();
int result = calc.add(5, 3); // add 메서드 호출
System.out.println("결과: " + result); // 결과 출력
위 코드에서는 Calculator 클래스의 인스턴스를 생성하고, 생성된 객체(calc)의 add 메서드를 호출하고 있다. 이 호출은 5와 3을 매개변수로 전달하고, 반환된 결과를 result 변수에 저장한다. 이후 결과를 출력한다.
메서드 오버로딩은 동일한 이름을 가진 메서드가 서로 다른 매개변수 목록을 가질 수 있는 기능이다. 이를 통해 동일한 작업을 수행하는 여러 버전의 메서드를 만들 수 있다. 메서드 오버로딩은 메서드의 이름이나 반환 유형이 달라야 하지만, 매개변수 목록이 서로 달라야 한다.
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
위의 예제에서 add 메서드는 정수형 매개변수를 받는 버전과 실수형 매개변수를 받는 버전 두 가지가 오버로딩되어 있다.
가변 인자는 메서드에 여러 개의 인자를 전달할 수 있도록 해주는 Java의 기능이다. 이를 위해 메서드 선언에서 인자의 유형 뒤에 세 개의 점(...)을 사용한다.
public void printNumbers(int... numbers) {
for (int num : numbers) {
System.out.println(num);
}
}
위의 예제에서 printNumbers 메서드는 가변 인자를 사용하여 여러 개의 정수를 인자로 받을 수 있다.
재귀 메서드는 자신을 다시 호출하여 작업을 수행하는 메서드이다. 이러한 메서드는 종료 조건을 반드시 설정해야 한다. 재귀 메서드를 사용하면 반복적인 작업을 간결하게 표현할 수 있다.
public class Factorial {
public int factorial(int n) {
if (n == 0) {
return 1; // 종료 조건
} else {
return n * factorial(n - 1); // 자신을 다시 호출하여 재귀적으로 계산
}
}
}
위의 예제에서 factorial 메서드는 재귀적으로 자신을 호출하여 팩토리얼을 계산한다.
정적 메서드는 클래스의 인스턴스 없이 직접 클래스 이름으로 호출할 수 있는 메서드이다. 정적 메서드는 static 키워드를 사용하여 선언된다.
public class Utility {
public static int add(int a, int b) {
return a + b;
}
}
위의 예제에서 add 메서드는 Utility 클래스의 정적 메서드로, 클래스 이름을 통해 직접 호출할 수 있다.
이러한 Java 메서드의 고급 개념들을 이해하면 보다 유연하고 강력한 코드를 작성할 수 있다. 메서드는 Java 프로그래밍에서 중요한 개념 중 하나이며, 잘 이해하고 활용하는 것이 중요하다.