메소드

Dorothy·2022년 11월 28일
0

항해99

목록 보기
8/17

메소드 선언

메소드 선언은 리턴 타입, 메소드 이름, 매개 변수 선언의 메소드 선언부와 실행 블록으로 구성된다.

리턴 타입

메소드를 실행한 후의 결과값을 말한다.
리턴값이 있을 경우엔 반드시 명시되어야하며 리턴값이 없을 경우 void로 대체한다.

여기서 void란
빈 공간, 공허감, ~하나도(전혀) 없는, 텅 빈의 의미

예를 들어 전자계산기라는 객체에서 전원을 켜는 powerOn() 메소드와 두 수를 나누는 기능인 divide() 메소드가 있다고 가정하면, powerOn() 메소드는 전원을 켜기만 하기때문에 리턴값이 없어서 void로 기술한다. 반대로 divide() 메소드는 나눗셈의 결과를 리턴해야 하므로 double 타입을 지정해주어야 한다.

void powerOn() {

}

double divide(int x, int y) {

}

리턴값이 있느냐 없느냐에 따라서 메소드를 호출하는 방법도 달라진다.

powerOn();

double result = divide(10, 20);
//divide(10,20);

powerOn() 메소드는 변수에 저장할 내용이 없기때문에 호출만 하면 되고, divide() 메소드는 10을 20으로 나눈 후 0.5라는 값을 리턴하므로 double 타입으로 변수를 선언한다.
만약 리턴값이 중요하지 않고, 메소드 실행이 중요할 경우에는 변수를 선언하지 않고 호출할 수도 있다.

메소드 이름

  • 숫자로 시작하면 안 되고, $와 _를 제외한 특수 문자 X
  • 관례적으로 메소드 이름은 소문자로 시작하되, 다른 단어가 혼합된 이름이면 뒤이어 오는 단어의 첫 글자는 대문자로 작성한다.
  • 메소드가 어떤 기능을 수행하는지 쉽게 알 수 있도록 기능에 대한 이름으로 지어주는 것이 좋다.
void run() {}
void startEngine() {}
String getName() {}
int[] getScores() {}

매개 변수 선언

메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용
앞서 나온 powerOn() 메소드는 전원만 켜면 되기때문에 매개 변수가 필요 없고, divide() 메소드는 나눗셈할 두 수가 필요해서 int타입의 변수 두 개를 선언했다.

매개 변수의 개수를 모를 경우

매개 변수는 개수가 이미 정해져 있는 것이 일반적이지만 어떤 상황에서는 메소드를 선언할 때 매개 변수의 개수를 알 수 없는 경우도 있다. 예를 들어 여러 개의 수를 모두 합산하는 메소드를 선언해야 한다면 몇 개의 매개 변수가 입력될지 알 수 없기 때문에 매개 변수의 개수를 결정할 수 없다.

해결책으로는 두 가지 정도가 있다.

매개 변수를 배열 타입으로 선언

sum() 메소드를 호출할 때 배열을 넘겨줌으로써 배열의 항목 값들을 모두 전달할 수 있고, 배열의 항목 수는 호출할 때 결정된다.

//메소드 선언
int sum(int[] values) {}

//메소드 실행
int[] values = {1,2,3};
int result = sum(values);

int result = sum(new int[] {1,2,3,4,5});

배열타입으로 선언 시 메소드를 호출하기 전에 배열을 생성해야하는 불편한 점이 있다.

배열 생성하지 않고 값의 목록만 넘겨주는 방식

그래서 배열을 생성하지 않고 값의 목록만 넘겨주는 방법 있는데, 아래와 같이 매개 변수 안에 ...을 사용해서 선언하게 되면 메소드 호출 시 넘겨준 값의 수에 따라 자동으로 배열이 생성되고 매개값으로 사용된다.

//메소드 선언
int sum(int ... values) {}

//메소드 호출
int result = sum(1,2,3);

리턴(return)문

리턴값이 있는 메소드

메소드 선언에 리턴 타입이 있는 메소드는 반드시 리턴문을 사용해서 리턴값을 지정해야 한다. 리턴값은 리턴 타입이거나 리턴 타입으로 변환될 수 있어야 한다.

int plus(int x, int y) {
	int result = x + y;
    return result;
}

리턴값이 없는 메소드

void로 선언된 메소드에서도 리턴문을 사용할 수 있는데, 이것은 리턴값을 지정하는 것이 아니라 메소드 실행을 강제 종료시키는 역할을 한다.

다음은 gas 값이 0보다 클 경우 계속해서 while문을 실행하고, 0일 경우 리턴문을 실행해서 run() 메소드를 즉시 종료한다.

void run() {
	while(true) {
    	if(gas > 0) {
        	System.out.println("달립니다.");
        	gas -= 1;
        } else {
        	System.out.println("멈춥니다");
            return;
        }
    }
}

만약 while문 뒤에 실행문이 추가적으로 더 있을 경우에는 break문을 사용해야 한다.

+리턴문 이후의 실행문은 결코 실행되지 않기 때문에 return 이후에 실행문이 오면 "Unreachable code"라는 컴파일 에러가 발생한다.

0개의 댓글