메소드란 무엇일까요?
package Test01;
public class Test999 {
public static void main(String[] args) {
}
}
처음 자바에서 코드를 작성해볼때 우리는 위와같이 의미를 모르는 코드들을 씁니다.
이곳에서 바로 public static void main(String[] args) 이곳이 메소드입니다.
아직 감이 안잡히실겁니다.
차례차례 풀이해보자면 Test01이라는 패키지 안의 Test999라는 클래스에서 main이라는 메소드를 실행하라는 뜻입니다.
조금 더 자세히 설명하자면 public은 접근제어자로 어디서든 접근이 가능하다는 뜻이고 static은 main메소드를 static메모리 안에서 실행한다는 것을 어렵게 적어놓은 것이죠.
이곳에서 중요한점은 main입니다. 자바는 객체지향형 언어입니다. 객체들을 여러개 선언을 해서 사용할 수 있다는 뜻입니다.
쉽게말해 여러개의 클래스를 연결해서 사용해야 하는데 컴퓨터의 입장에서는 어디가 시작인지 알수가 없습니다.
따라서 시작 부분이 어디인지 알기위해서 규칙을 정하는데 이 규칙이 main은 자바에서 '프로그램의 시작'이라는 뜻입니다.
그럼 이번에는 메소드를 정의하고 호출하는 방법을 알아보겠습니다.
package Test01;
public class Test999 {
public static void main(String[] args) {
String name = "java"; // 1
hello(name); // 2 메소드 호출부
System.out.println("Program End"); // 3
}
public static void hello(String name) { // 4 메소드 정의부
System.out.println("Hello World"); // 5
System.out.println("Hello " + name); // 6
}
}
위의 코드와 같이 메소드를 새로 정의하는 방법은 위와 같습니다.
public : 접근제어자
static : static 메모리에서 실행
void : 메소드에서 반환할 값이 없을 때 지정
hello : 메소드의 이름
String name : 메소드에 넣을 변수
이렇게 지정한뒤 { }안에 코드를 적으면 됩니다.
그 다음 호출하는법은 더욱 간단합니다.
바로 메소드의 이름을 쓰고 메소드에 넣을 값을 지정하면됩니다.
그러면 main부분부터 실행이 되는데 코드의 실행순서는 1 - 2 - 4 - 5 - 6 - 2 - 3 입니다.
중요한 부분은 2번에서 해당 메소드를 실행한 후 다시 2번으로 돌아온다는 것을 주의하시면 됩니다.
위에서 간단하게 만든 코드에서는 반환할 값이 없어서 "public static void hello(String name)" 이렇게 반환할 값을 쓰는곳에 void라는 단어를 사용했었습니다. 그럼 다른값을 반환하려면 어떻게 해야할까요.
예를 들기위해 이번에는 사각형의 넓이와 둘레를 구하는 함수를 만들어 보겠습니다.
package zz;
import java.util.Scanner;
public class Run {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int width = sc.nextInt();
int height = sc.nextInt();
int area = getArea(width, height);
int circum = getCircum(width, height);
System.out.println(area);
System.out.println(circum);
}
public static int getArea(int width, int height) {
int result = width * height;
return result;
}
public static int getCircum(int width, int height) {
int result = (width + height) * 2;
return result;
}
}
위처럼 void를 사용했던 자리에 int를 사용하여 어떤 값을 반환할지 지정해주었습니다. int이외에도 자기가 반환하고 싶은 자료형을 써주면 됩니다.
또한 위처럼 한 클래스에 메소드를 여러개 정의하여 사용할 수 있습니다. 지금처럼 메소드나 클래스가 몇개 안되면 크게 문제가 되지는 않습니다. 하지만 추후에 큰 프로젝트를 진행하게 되면 수십개의 클래스와 메소드들이 생기게 됩니다. 이때 기능에 따라 클래스와 메소드를 분리해주면 문제가 생길 때 쉽게 발견할수 있고 유지보수가 쉬워진다는 장점이 있습니다.