본문 바로가기

Java/Basic

[Java] 메서드(Method)

- method는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다.

- 기본적으로 수학의 함수와 유사하며, 어떤 값을 입력하면 이 값으로 작업을 수행해서 결과를 반환한다.

- 예를 들어 제곱근을 구하는 메서드 'Math.sqrt()'는 4.0을 입력하면, 2.0을 결과로 반환한다.

- 수학의 함수와 달리 메서드는 입력값과 또는 출력값이 없을 수도 있으며, 심지어는 입력값과 출력값이 모두 없을 수도 있다.

 

- 그저 메서드가 작어븡ㄹ 수행하는데 필요한 값만 넣고 원하는 결과를 얻으면 될 뿐, 메서드가 내부적으로 어떤 과정을 거쳐 결과를 만들어내는지 전혀 몰라도 된다.

- 메서드에 넣을 값과 반환하는 결과만 알면 된다. 그래서 메서드를 내부가 보이지 않는 '블랙박스'라고도 한다.

 

 

메서드를 사용하는 이유

 

1) 높은 재 사용성(reusability)

- Java API에서 재공하는 메서드들을 사용하면서 경험한 것처럼 한번 만들어 놓은 메서드는 몇 번이고 호출할 수 있으며, 다른 프로그램에서도 사용이 가능하다.

 

2) 중복된 코드의 제거

- 프로그램을 작성하다보면, 같은 내용의 문장들이 여러 곳에 반복해서 나타나곤 한다. 이렇게 반복되는 문장들을 묶어서 하나의 메서드로 작성해 놓으면, 반복되는 문장들 대신 메서드를 호출하는 한 문장으로 대체할 수 있다. 그러면 전체 소스 코드의 길이도 짧아지고, 변경사항이 발생했을 때 수정해야할 코드의 양이 줄어들어 오류가 발생할 가능성도 함께 줄어든다.

 


메서드의 선언과 구현

- 메서드는 크게 두 부분, '선언부(header)'와 '구현부(body)'로 이루어져 있다.

- 메서드를 정의한다는 것은 선언부와 구현부를 작성하는 것을 뜻한다.

 

메서드 선언부

- 메서드 선언부는 '메서드의 이름'과 '매개변수 선언', 그리고 '반환타입'으로 구성되어 있다.

- 메서드가 작업을 수행하기 위해 어떤 값들을 필요로 하고 작업의 결과로 어떤 타입의 값을 반환하는지에 대한 정보를 제공한다.

- 메서드의 선언부는 후에 변경사항이 발생하지 않도록 신중히 작성해야 한다. 메서드의 선언부를 변경하게 되면, 그 메서드가 호출되는 모든 곳도 같이 변경해야 하기 때문이다.

 

매개 변수 선언(parameter declaration)

- 매개변수는 메서드가 작업을 수행하는데 필요한 값들(입력)을 제공받기 위한 것이며, 필요한 값의 개수만큼 변수를 선언하며 각 변수 간의 구분은 쉼표','를 사용한다.

- 주의할 점은 일반적인 변수선언과 달리 두 변수의 타입이 같아도 변수의 타입을 생략할 수 없다.

- 선언할 수 있는 매개변수의 개수는 거의 제한이 없지만, 만일 입력해야할 값이 개수가 많은 경우네는 배열이나 참조변수를 사용하면 된다.

- 만일 값을 전혀 입력받을 필요가 없다면 괄호() 안에 아무 것도 적지 않는다.

 

메서드의 이름(method name)

- 메서드의 이름도 앞서 배운 변수의 명명규칙대로 작성하면 된다.

- 메서드는 특정 작업을 수행하므로 메서드의 이름은 'add'처럼 동사인 경우가 많으며, 이름만으로도 메서드의 기능을 쉽게 알 수 있도록 함축적이면서도 의미있는 이름을 짓도록 노력해야 한다.

 

반환타입(return type)

- 메서드의 작업수행 결과(출력)인 '반환값(return type)'의 타입을 적는다.

- 반환값이 없는 경우 반환타입으로 'void'를 적어야한다.

 

메서드의 구현부(method body)

- 메서드의 선언부 다음에 오는 괄호{}를 '메서드의 구현부'라고 하는데, 여기에 메서드를 호출했을 떄 수행될 문장들을 넣는다.

 

return 문

- 메서드의 반환타입이 'void'가 아닌 경우, 구현부 {} 안에 'return 반환값;'이 반드시 포함되어 있어야 한다.

- 작업을 수행한 결과인 반환값으 호출한 메서드로 전달하는데, 이 값의 타입은 반환타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 한다.

- 여러 개의 변수를 선언할 수 있는 매개변수와 달리 return문은 단 하나의 값만 반환할 수 있는데, 메서드로의 입력(매개변수)은 여러 개일 수 있어도 출력(반환값)은 최대 하나만 허용한다.

 

지역변수(local variable)

- 메서드 내에 선언된 변수들은 그 메서드 내에서만 사용할 수 있으므로 서로 다른 메서드라면 같은 이름의 변수를 선언해도 된다.

- 메서드 내에 선언된 변수를 '지역변수(local variable)'이라고 한다.

 


메서드의 호출

- 메서드를 정의했어도 호출되지 않으면 아무 일도 일어나지 않는다.

- 메서드를 호출해야만 구현부 {}의 문장들이 수행된다.

 

인자(argument)와 매개변수(parameter)

- 메서드를 호출할 때 괄호()안에 지정해준 값들을 '인자(argument)' 또는 '인수'라고 하는데, 인자의 개수와 순서는 호출된 메서드에 선언된 매개변수와 일치해야 한다.

- 인자는 메서드가 호출되면서 매개변수에 대입되므로, 인자의 타입은 매개변수의 타입과 이리하거나 자동 형변환이 가능한 것이어야 한다.

3, 5는 메서드 add의 argument
x, y는 parameter

- 메서드에 선언된 매개변수의 개수보다 많은 값을 괄호()에 넣거나 타입이 다른 값을 넣으면 컴파일러가 에러를 발생시킨다.

- 반환타입이 void가 아닌 경우, 메서드가 작업을 수행하고 반환된 값을 대입연산자로 변수에 저장하는 것이 보통이지만, 저장하지 않아도 문제가 되지 않는다.

 

메서드의 실행 흐름

- 같은 클래스 내의 메서드끼리는 참조변수를 사용하지 않고도 서로 호출이 가능하지만 static 메서드는 같은 클래스 내의 인스턴스 메서드를 호출할 수 없다.