메소드의 개념
메소드(method)
자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메소드(method)를 가집니다.
그중에서 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.
메소드의 사용 목적
클래스에서 메소드를 작성하여 사용하는 이유는 중복되는 코드의 반복적인 프로그래밍을 피할 수 있기 때문입니다.
또한, 모듈화로 인해 코드의 가독성도 좋아집니다.
그리고 프로그램에 문제가 발생하거나 기능의 변경이 필요할 때도 손쉽게 유지보수를 할 수 있게 됩니다.
메소드 정의
클래스에서 메소드를 정의하는 방법은 일반 함수를 정의하는 방법과 크게 다르지 않습니다.
자바에서 메소드를 정의하는 방법은 다음과 같습니다.
문법
접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부
// 구현부
}
1. 접근 제어자 : 해당 메소드에 접근할 수 있는 범위를 명시합니다.
2. 반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시합니다.
3. 메소드 이름 : 메소드를 호출하기 위한 이름을 명시합니다.
4. 매개변수 목록(parameters) : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들을 명시합니다.
5. 구현부 : 메소드의 고유 기능을 수행하는 명령문의 집합입니다.
메소드 시그니처(method signature)란 메소드의 선언부에 명시되는 매개변수의 리스트를 가리킵니다.
만약 두 메소드가 매개변수의 개수와 타입, 그 순서까지 모두 같다면, 이 두 메소드의 시그니처는 같다고 할 수 있습니다.
다음 예제는 Car 클래스의 accelerate() 메소드를 정의하는 예제입니다.
예제
class Car {
private int currentSpeed;
private int accelerationTime;
...
① public void accelerate(int speed, int second) { // 선언부
// 구현부
System.out.println(second + "초간 속도를 시속 " + speed + "(으)로 가속함!!");
}
...
}
위 예제의 ①번 라인에서는 accelerate() 메소드를 정의하고 있습니다.
이 메소드는 public 접근 제어자를 사용하여 선언되어 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있습니다.
반환 타입에는 어떠한 값도 반환하지 않는다는 의미를 가진 void를 명시합니다.
그 다음으로 메소드의 이름을 명시하고, 매개변수로 int형 변수인 speed와 second를 전달받습니다.
이렇게 전달받은 매개변수를 가지고 메소드 구현부에서 고유한 작업을 수행할 수 있는 것입니다.
메소드 호출
자바에서 위와 같은 방법으로 정의한 메소드는 멤버 참조 연산자(.)를 사용하여 호출할 수 있습니다.
자바에서 메소드를 호출하는 방법은 다음과 같습니다.
문법
1. 객체참조변수이름.메소드이름(); // 매개변수가 없는 메소드의 호출
2. 객체참조변수이름.메소드이름(인수1, 인수2, ...); // 매개변수가 있는 메소드의 호출
다음 예제는 앞서 정의한 accelerate() 메소드를 호출하는 예제입니다.
예제
Car myCar = new Car(); // 객체를 생성함.
myCar.accelerate(60, 3); // myCar 인스턴스의 accelerate() 메소드를 호출함.
다음 예제는 실제로 accelerate() 메소드를 정의하고 호출하는 예제입니다.
예제
class Car {
private int currentSpeed;
private int accelerationTime;
public void accelerate(int speed, int second) {
System.out.println(second + "초간 속도를 시속 " + speed + "(으)로 가속함!!");
}
}
public class Method01 {
public static void main(String[] args) {
Car myCar = new Car(); // 객체 생성
myCar.accelerate(60, 3); // 메소드 호출
}
}
실행 결과
3초간 속도를 시속 60(으)로 가속함!!