반복문, 조건문, 변수, 상수와 같은 것들은 사실상 프로그램을 만드는 가장 중요한 도구들이라고 할 수 있다. 지금부터 배우게 될 메소드나 객체지향과 같은 개념들은 웅장하고, 결함이 없고, 유지보수가 쉬운 애플리케이션을 만들기 위한 기법들이라고 할 수 있다. 이것들 없이도 프로그램을 만들 수는 있지만, 이것들 없이 규모있는 애플리케이션을 만든다는 것은 현실적으로 어려운 일이다. 지금까지 만드는 방법을 배웠다면 이제부터는 잘 만드는 방법을 익히는 것이라고 해도 과언이 아니다.
메소드(method)는 코드를 재사용할 수 있게 해준다. 이번 시간에는 경제적으로 로직을 작성하는 방법에 대해서 알아볼 것이다.
public static void main(String[] args) {
return
}
main이라고 하는 것이 바로 메소드이다. 메소드를 만들 때 public static이라고 적어야 한다고 일단은 기계적으로 이해하자.
직접 메소드를 만드는 것을 정의라고 하고, 만들어진 메소드를 실행하는 것을 호출이라고 한다.
main 메소드는 규칙이다. 즉 약속이다. 만들고 싶은 프로그램이 있다면 반드시 public static void main(String[] args)가 이끄는 중괄호 안에 실행되기를 기대하는 로직을 위치시켜야 한다. 이것은 약속이기 때문에 여러분은 약속을 지켜야 한다. 그렇게 코드를 작성하면 자바를 실행할 때 자바는 여러분이 작성한 main 메소드를 실행하게 되는 것이다. 여러분은 main 메소드를 작성하고, 자바는 main 메소드를 실행하는 관계라고 할 수 있다.
결론: 메서드를 통해 재활용할 수 있다.
외부의 자극이 입력이라면 반응은 출력이라고 할 수 있다. 우리가 아는 쓸모있는 대부분의 프로그램이 사용자의 입력에 따라서 다른 결과를 출력한다. 메소드는 프로그램 안에서 동작하는 하나의 작은 프로그램이라고 할 수 있다. 입력 값에 따라서 출력 값을 달리 제공한다면 더욱 쓸모 있는 프로그램이 될 수 있을 것이다.
메소드의 입력 값은 매개변수(parameter)를 통해서 이루어진다. 호출에서 입력한 값을 로직으로 매개 한다는 의미에서 이러한 변수를 매개변수라고 부른다. 영어로는 parameter다. 그리고 메소드를 호출할 때 전달된 값을 '인자' 영어로는 argument라고 한다. 관습적으로는 매개변수와 인자를 구분하지 않고 부르는 경우도 많다.
package com.yuri.javatutorials.method;
public class MethodDemo4 {
public static void numbering(int limit) {
int i = 0;
while (i < limit) {
System.out.println(i);
i++;
}
}
public static void main(String[] args) {
numbering(10);
}
}
10이라는 인자를 주고, 그 값을 파라미터로 받음!
package com.yuri.javatutorials.method;
public class MethodDemo5 {
public static void numbering(int init, int limit) {
int i = init;
while (i < limit) {
System.out.println(i);
i++;
}
}
public static void main(String[] args) {
numbering(1, 5);
}
}
/*
1
2
3
4
*/
돌려준다. 출력과 관련되어 있다.
[❗] 메소드를 이해하는 Tip
메소드 이해하고 싶을 때 정의부를 보면 너무 복잡하다. 그래서 그 메소드를 어떻게 사용하고, 입력과 출력값을 본 후 그 메소드가 어떤 용도인지 이해할 수 있다. 전체적인 모습을 먼저 봐라 !!
package com.yuri.javatutorials.method;
public class MethodDemo6 {
public static String numbering(int init, int limit) {
int i = init;
// 만들어지는 숫자들을 output이라는 변수에 담기 위해서 변수에 빈 값을 주었다.
String output = "";
while (i < limit) {
// 숫자를 화면에 출력하는 대신 변수 output에 담았다.
output += i;
i++;
}
// 중요!!! output에 담겨 있는 문자열을 메소드 외부로 반환하려면 아래와 같이 return 키워드 뒤에 반환하려는 값을
// 배치하면 된다.
return output;
}
public static void main(String[] args) {
// 메소드 numbering이 리턴한 값이 변수 result에 담긴다.
String result = numbering(1, 5);
// 변수 result의 값을 화면에 출력한다.
System.out.println(result);
}
}
메소드 내에서 사용한 return은 return 뒤에 따라오는 값을 메소드의 결과로 반환한다. 동시에 메소드를 종료시킨다. 한가지 잊지 말아야 할 점은 return을 통해서 반환할 값의 데이터 형식을 메소드의 이름 옆에 명시해주어야 한다는 것이다.
numbering 은 메소드 이름, numbering 라는 메소드는 반드시 String을 리턴하게 해준다는 의미이다.
JavaScript나 PHP와 같은 언어들에 익숙한 개발자에게는 까다롭고 귀찮게 느껴질 수 있는 부분이다. 하지만 메소드가 리턴 할 값을 명시함으로서 numbering이라는 메소드는 반드시 문자열의 값을 리턴한다는 것을 보장할 수 있는 장점이 있다. 모든 일에는 장점과 단점이 있다. 장단의 다면성을 충실하게 응시할 때 적합함을 얻을 수 있다.
만약 반환 값이 없다면 아래와 같이 void를 적어준다.
이 글은 생활코딩의 자바 강좌를 바탕으로 정리한 내용입니다.