메서드 정의하기
다음은 일반적인 메서드 선언의 예시입니다:
public double calculateAnswer(double wingSpan, int numberOfEngines,
double length, double grossTons) {
//do the calculation here
}메서드 선언의 필수 요소는 메서드의 반환 타입, 이름, 괄호 () 한 쌍, 중괄호 사이의 본문 {}뿐입니다.
일반적으로 메서드 선언은 순서대로 6가지 구성 요소를 갖습니다:
- 수정자 -
public,private및 나중에 배우게 될 기타 수정자. - 반환 타입 - 메서드에서 반환하는 값의 데이터 타입, 또는 값을 반환하지 않는 경우
void. - 메서드 이름 - 필드 이름에 대한 규칙은 메서드 이름에도 적용되지만 규칙은 약간 다릅니다.
- 괄호 안의 매개변수 목록 - 쉼표로 구분된 입력 매개변수 목록으로, 그 앞에 데이터 타입을 괄호로 묶어
()로 표시합니다. 매개변수가 없는 경우 빈 괄호를 사용해야 합니다. - 예외 목록 - 나중에 설명합니다.
- 중괄호로 묶인 메서드 본문 - 지역 변수 선언을 포함한 메서드 코드가 여기에 들어갑니다.
수정자, 반환 타입 및 매개 변수는 이 섹션의 뒷부분에서 설명합니다. 예외는 이후 섹션에서 설명합니다.
정의: 메서드 선언의 구성 요소 중 두 가지, 즉 메서드 이름과 매개변수 타입이 메서드 서명을 구성합니다.
위에 선언된 메서드의 서명은 다음과 같습니다:
calculateAnswer(double, int, double, double)
메서드 이름 지정하기
메소드 이름은 모두 유효한 식별자가 될 수 있지만 코드 규칙에 따라 메소드 이름이 제한됩니다. 규칙에 따라 메서드 이름은 소문자로 된 동사 또는 소문자로 된 동사로 시작한 다음 형용사, 명사 등으로 구성된 여러 단어로 된 이름이어야 합니다. 여러 단어로 구성된 이름의 경우 두 번째 단어와 다음 단어의 첫 글자는 대문자로 표기해야 합니다. 다음은 몇 가지 예시입니다:
run
runFast
getBackground
getFinalData
compareTo
setX
isEmpty일반적으로 메서드는 클래스 내에서 고유한 이름을 갖습니다. 그러나 메소드 오버로딩 으로 인해 메소드가 다른 메소드와 동일한 이름을 가질 수 있습니다.
메서드 오버로드
Java 프로그래밍 언어는 메서드 오버로드를 지원하며, Java는 메서드 시그니처가 다른 메서드를 구별할 수 있습니다. 즉, 한 클래스 내의 메서드는 매개변수 목록이 다르더라도 동일한 이름을 가질 수 있습니다(이에 대한 몇 가지 자격 조건은 상속 섹션에서 설명합니다).
캘리그래피를 사용하여 다양한 데이터 타입(문자열, 정수 등)을 그릴 수 있고 각 데이터 타입을 그리는 메서드를 포함하는 클래스가 있다고 가정해 보겠습니다. 각 메서드마다 새로운 이름을 사용하는 것은 번거롭습니다(예: drawString(), drawInteger(), drawFloat() 등). Java 프로그래밍 언어에서는 모든 그리기 메서드에 동일한 이름을 사용하되 각 메서드에 다른 인수 목록을 전달할 수 있습니다. 따라서 데이터 그리기 클래스는 draw()라는 이름의 메서드 4개를 선언할 수 있으며, 각 메서드에는 다른 매개변수 목록이 있습니다.
public class DataArtist {
...
public void draw(String s) {
...
}
public void draw(int i) {
...
}
public void draw(double f) {
...
}
public void draw(int i, double f) {
...
}
}오버로드된 메서드는 메서드에 전달되는 인수의 수와 타입에 따라 구분됩니다. 코드 샘플에서 draw(String s)와 draw(int i)는 서로 다른 인자 타입을 필요로 하기 때문에 별개의 고유한 메서드입니다.
컴파일러가 구분할 수 없기 때문에 이름이 같고 인수의 수와 타입이 같은 메서드를 두 개 이상 선언할 수 없습니다.
컴파일러는 메서드를 구분할 때 반환 타입을 고려하지 않으므로 반환 타입이 다르더라도 동일한 서명을 가진 두 개의 메서드를 선언할 수 없습니다.
참고: 오버로드된 메서드는 코드 가독성을 크게 떨어뜨릴 수 있으므로 신중하게 사용해야 합니다.