Java Class Methods
자바 클래스 메서드 (Class Methods): 개념 및 사용법
자바 클래스 메서드(Class Methods)는 클래스의 동작을 정의하는 함수로, 객체가 수행할 동작을 기술합니다. 메서드는 클래스의 중요한 구성 요소로, 클래스 내에서 정의된 데이터를 처리하고, 특정 작업을 수행하는 데 사용됩니다. 이 글에서는 자바 클래스 메서드의 종류, 선언 방법, 사용법 등을 예제와 함께 설명합니다.
메서드란?
- *메서드(Method)**는 특정 작업을 수행하는 코드 블록입니다. 메서드는 클래스 내부에서 정의되며, 호출될 때 해당 작업을 수행합니다. 메서드는 객체의 동작을 구현하는 역할을 하며, 반복적인 작업을 효율적으로 처리할 수 있도록 도와줍니다.
메서드의 기본 구조
메서드는 반환 타입, 메서드 이름, 매개변수, 본체로 구성됩니다.
반환타입 메서드이름(매개변수) {
// 메서드 본체
// 메서드가 수행할 코드
}
예시: 메서드 선언
public class MyClass {
// 메서드 선언
public void sayHello() {
System.out.println("Hello, World!");
}
}
위 예제에서 sayHello()
는 반환 값이 없는 (void
) 메서드로, 단순히 "Hello, World!"를 출력하는 작업을 수행합니다.
메서드의 구성 요소
- 반환 타입(Return Type): 메서드가 작업을 완료한 후 반환하는 값의 타입입니다. 반환 값이 없는 경우
void
를 사용합니다. - 메서드 이름(Method Name): 메서드를 호출할 때 사용하는 이름입니다. 자바에서는 소문자로 시작하는 이름을 사용합니다.
- 매개변수(Parameter): 메서드가 입력값을 받을 때 사용하는 변수입니다. 메서드 내에서 사용될 값을 전달받습니다.
- 본체(Body): 메서드가 수행할 작업을 정의한 코드 블록입니다.
메서드의 종류
자바에서 메서드는 크게 두 가지로 나뉩니다:
- 인스턴스 메서드(Instance Methods): 객체가 호출할 수 있는 메서드로, 객체의 상태(인스턴스 변수)를 조작하거나 사용합니다.
- 클래스 메서드(Class Methods, 정적 메서드): 클래스 자체에서 호출할 수 있는 메서드로, 객체의 상태와 무관하게 동작합니다.
static
키워드를 사용하여 선언합니다.
1. 인스턴스 메서드 (Instance Methods)
인스턴스 메서드는 객체의 상태를 조작하거나 객체의 속성을 사용하는 메서드입니다. 인스턴스 메서드를 호출하려면 해당 메서드가 정의된 클래스의 객체를 생성해야 합니다.
인스턴스 메서드 예제
public class Car {
// 인스턴스 변수
String model;
int speed;
// 생성자
public Car(String model, int speed) {
this.model = model;
this.speed = speed;
}
// 인스턴스 메서드
public void accelerate(int increase) {
speed += increase;
System.out.println(model + " accelerates to " + speed + " km/h.");
}
public void brake(int decrease) {
speed -= decrease;
System.out.println(model + " slows down to " + speed + " km/h.");
}
}
public class Main {
public static void main(String[] args) {
// Car 객체 생성
Car myCar = new Car("Tesla Model S", 0);
// 인스턴스 메서드 호출
myCar.accelerate(60); // 출력: Tesla Model S accelerates to 60 km/h.
myCar.brake(20); // 출력: Tesla Model S slows down to 40 km/h.
}
}
결과:
Tesla Model S accelerates to 60 km/h.
Tesla Model S slows down to 40 km/h.
위 예제에서 accelerate()
와 brake()
는 Car
클래스의 인스턴스 메서드로, 객체의 속성(speed
)을
조작하는 메서드입니다. 각 메서드는 특정 객체에 대해서만 호출할 수 있습니다.
2. 클래스 메서드 (Class Methods)
클래스 메서드는 객체가 아닌 클래스 자체에서 호출할 수 있는 메서드입니다. static
키워드를 사용하여 선언하며, 클래스 변수나 다른 클래스 메서드에만
접근할 수 있습니다. 인스턴스 변수에는 접근할 수 없습니다.
클래스 메서드 예제
public class Calculator {
// 클래스 메서드 (static 메서드)
public static int add(int a, int b) {
return a + b;
}
public static int subtract(int a, int b) {
return a - b;
}
}
public class Main {
public static void main(String[] args) {
// 클래스 메서드 호출
int result1 = Calculator.add(5, 3); // 출력: 8
int result2 = Calculator.subtract(10, 4); // 출력: 6
System.out.println("Addition: " + result1);
System.out.println("Subtraction: " + result2);
}
}
결과:
Addition: 8
Subtraction: 6
위 예제에서 add()
와 subtract()
는 Calculator
클래스의 클래스 메서드입니다. Calculator
클래스의 인스턴스를 생성하지 않고 바로 메서드를 호출할 수 있습니다.
메서드 오버로딩 (Method Overloading)
메서드 오버로딩은 동일한 이름의 메서드를 여러 개 정의하는 것을 의미합니다. 단, 매개변수의 수나 타입이 달라야 합니다. 오버로딩된 메서드는 입력값에 따라 호출됩니다.
메서드 오버로딩 예제
public class Calculator {
// 메서드 오버로딩
public int add(int a, int b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
public double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(2, 3)); // 출력: 5
System.out.println(calc.add(2, 3, 4)); // 출력: 9
System.out.println(calc.add(2.5, 3.7)); // 출력: 6.2
}
}
결과:
5
9
6.2
위 예제에서 add()
메서드는 세 가지 형태로 정의되었습니다. 자바는 전달된 매개변수의 타입과 개수에 맞는 메서드를 자동으로 선택하여 호출합니다.
메서드 반환 값 (Return Value)
메서드는 특정 작업을 수행한 후 호출한 곳으로 값을 반환할 수 있습니다. 반환 값이 있는 메서드는 반환 타입을 지정해야 하며, return
키워드를 사용하여 값을 반환합니다.
반환 값이 있는 메서드 예제
public class Rectangle {
int width;
int height;
// 생성자
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
// 메서드가 넓이를 반환함
public int calculateArea() {
return width * height;
}
}
public class Main {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle(5, 10);
int area = rectangle.calculateArea(); // 메서드 호출 후 반환된 값 저장
System.out.println("Area: " + area); // 출력: Area: 50
}
}
결과:
Area: 50
위 예제에서 calculateArea()
메서드는 int
값을 반환하며, 호출된 후 계산된 값을 호출한 곳으로 돌려줍니다.
메서드의 접근 제어 (Access Modifiers)
자바에서는 메서드의 접근 범위를 제어하기 위해 접근 제어자를 사용합니다:
- public: 어디서나 메서드에 접근할 수 있습니다.
- private: 클래스 내부에서만 접근할 수 있습니다.
- protected: 같은 패키지 또는 상속받은 클래스에서만 접근할 수 있습니다.
- default(접근 제어자를 명시하지 않은 경우): 같은 패키지에서만 접근할 수 있습니다.
접근 제어자 예제
class Person {
// private 메서드
private void printPrivate() {
System.out.println("This is a private method.");
}
// public 메서드
public void printPublic() {
System.out.println("This is a public method.");
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
// person.printPrivate(); // 오류 발생: private
메서드는 외부에서 호출 불가
person.printPublic(); // 출력: This is a public method.
}
}
결과:
This is a public method.
위 예제에서 printPrivate()
메서드는 private
로 선언되어 클래스 외부에서는 호출할 수 없습니다. 반면,
printPublic()
메서드는 public
으로 선언되어 외부에서도 호출 가능합니다.
요약
- 메서드는 클래스의 동작을 정의하는 코드 블록입니다.
- 인스턴스 메서드는 객체를 통해 호출되며, 객체의 상태를 조작할 수 있습니다.
- 클래스 메서드는
static
으로 선언되어 객체 생성 없이 호출할 수 있습니다. - 메서드 오버로딩을 통해 동일한 이름의 메서드를 매개변수의 형태에 따라 여러 개 정의할 수 있습니다.
- 메서드에는 접근 제어자를 사용하여 외부에서 접근 가능한 범위를 제어할 수 있습니다.
자바에서 메서드를 잘 활용하면 코드의 재사용성과 가독성을 높이고, 객체 지향적인 프로그래밍을 구현할 수 있습니다.