자바 메소드
목차
메서드, 메소드(Method)라고도 합니다. 멤버펑션(Member Function) 이라고도 말합니다. 간단히 클래스가 사용할 수 있는 함수를 말합니다.
수학에서 함수란 F(x) = y 같은 것인데 이것도 쉽게 말해 Input 이 있고 Output 이 있는 처리기입니다.
프로그래밍에서 함수도 비슷하다고 볼 수 있습니다. int function (int a, int b) 이라면 a와 b를 투입해서 int 형 자료를 반환하는 함수입니다.
기본 메소드(main)
아래에서 보면 Main 은 클래스 이고 public static void main 은 함수이고 System.out.println 도 함수입니다.
public static void main 이건 많이 봐왔죠? 여기서 한번은 설명하고 가겠습니다.
main 함수는 항상 이 형식을 유지해야 합니다. 자바 표준입니다.
public 은 누구나 가져다 쓸 수 있는 상태를 말합니다. 즉 외부 패키지에서 프로그램을 시작할 수 있음. static 은 정적 함수로 본래 class 의 인스턴스를 만들지 않아도 사용할 수 있음을 믜미합니다. void 는 반환값이 없습니다.
조금 말이 어려울 수 있을 것 같은데 각각의 단원에서 상세한 내용을 다루겠습니다.
어쨋든 main 메소드라는 것은 프로그램이 실행하면 한번은 돌아가는 코드입니다.
public class Main { public static void main(String[] args) { System.out.println("Hello Java"); } }
이들도 클래스 안에 있습니다. 자바는 모든 것이 객체지향이기 때문에 혼자 독립해있는 함수는 없습니다.
사용자 함수를 정의 해보겠습니다. 클래스 안에 있는 함수를 메소드라고 하니까 이제부터 메소드라고 부르겠습니다.
사용자 메소드 정의
자바 메소드는 클래스 안에 정의합니다.
public class Main { public static void main(String[] args) { myClass mc = new myClass(); mc.myFunction(); } } class myClass{ void myFunction(){ System.out.println("new Function"); } }
new Function
간단하게 myClass 라는 클래스에 myFunction 이라는 함수를 만들었습니다.
이를 프로그램의 시작지점인 main 함수에서 실행시킵니다. 클래스는 사용하기 전에 인스턴스를 생성해야 하지만 이 키워드 static 을 쓰면 인스턴스를 생성하지 않고 클래스에서 바로 함수를 사용합니다.
매개변수와 반환값이 있는 함수
함수에서 매개변수는 입력되는 값, 반환값은 돌려주는 값입니다. 예를 들어 제곱이다.
public class Main { public static void main(String[] args) { System.out.println("square 3: " + square(3)); System.out.println("square 4: " + square(4)); System.out.println("square 5: " + square(5)); } public static int square(int number){ return number*number; } }
square 3: 9 square 4: 16 square 5: 25
public static int square(int number) 가 의미하는 것은 좀 길어 보입니다. square 앞의 int는 반환값 자료형 ( ) 안에 있는 int 는 입력되는 매개변수를 의미합니다. 제곱은 그냥 제곱하면 되니까 숫자를 넣어서 출력해봅니다.
여러개의 매개변수
public static void main(String[] args) { int result = add(7, 3); System.out.println("add 7 + 3 = " + result); } public static int add(int a, int b){ return a + b; }
add 7 + 3 = 10
반환값은 하나가 되도 매개변수는 여러개가 가능합니다. ,콤마로 구분하는 변수를 여러개 이어 넣으면 됩니다. 몇개까지 변수를 넣을 수 있느지는 모르겠지만 딱히 제한이 없습니다.
다만 그렇게 많은 양의 변수를 만들어 사용하는 것보다는 인덱싱이 되는 배열같은 자료타입이 유리합니다.
void 함수
void 는 비어있는 이라는 뜻으로 void 함수는 반환값이 없다. 혹은 반환값을 정할 수 없다 정도로 사용합니다. 제일 처음 사용하는 void main 도 void 죠. 자바 메인함수도 자신을 호출한 시스템에 딱히 반환할 값이 없는 것입니다.(JVM에게)
return 예약어
return 도 역시 예약어입니다. 예약어(Reserved Words) 혹은 키워드 (Keywords) 라고 하는 단어는 컴파일러가 사용자에 앞서 미리 선점한 단어를 말합니다. 컴파일러가 사용할 단어이므로 사용자는 이 단어들에 다른 뜻을 부여할 수 없습니다. 컴파일러 규칙입니다.
또한 함수 진행도중 return 을 만나면 함수를 종료합니다.
반환값의 처리
반환값에 대하여는 좀 전 위의 코드처럼 바로 반환값을 사용하는 방식도 있고 같은 타입 변수에 저장하는 방법도 있습니다.
public static void main(String[] args) { int result = square(5); System.out.println("square 5: " + result); } public static int square(int number){ return number*number; }
int result 를 사용하여 함수로 부터 결과값을 받았습니다. 함수의 수행이 종료되면 그가 다루고 있던 값도 모두 사라지게 됩니다. 따라서 정말 보존해야 하는 중요 데이터타입 1개를 바깥에서 호출한 측에 반환합니다)
요약
자바 메소드를 부르는 단어가 많아서 조금 헷갈릴 수 있습니다. 메소드, 메서드, 멤버펑션, 함수 등 결국 같은 말이지만 함수를 이야기할 때는 기능적인 측면을 강조하는 것이고 메소드는 클래스와의 관계를 이야기 하는 것 입니다.
클래스와 메소드는 너무 떨어져서 바라볼 필요는 없습니다. 클래스 안에 메서드가 포함되있기 때문에 그 안에서 어떻게 사용할 것인가가 중요합니다.
C에서의 함수 사용법도 뒤로가면 점점 어려워지는데, 자바는 객체지향 프로그래밍이기 때문에 메서드에서 해야할 일이 좀 있습니다. 함수 오버로딩, 오버라이딩, 캐스팅 등 성급하게 생각하지 않고 하나씩 알아가면 좋을 것 같습니다.
외부참조문서
Java Methods 자바 메소드 (w3schools.com)
자바 튜토리얼 (5-3) 함수/ 자바 메소드(Java Method)