클래스안에서 사용되는 함수(function)의 일종인 메서드를 만들기 위해 함수의 개념과 함수의 구조, 그리고 호출될 때 사용되는 메모리에 대해서 배워보도록 하겠습니다.
int(반환하는 결과값의 자료형 없을시 void) add(함수명)(int num1, int num2)(자료형 매개변수1, 자료형 매개변수2)
{
int result; ( 함수 몸체 )
result = num1 + num2 ( body )
return result; (반환값)
}
실습
public class FunctionTest {
//function 1
public static int addNum(int num1, int num2 ) {
int result;
result = num1 + num2;
return result;
}
//function 2
public static void sayHello(String greeting) {
System.out.println(greeting);
}
//function 3
public static int calSum() {
int sum = 0;
int i;
for (i = 0 ; i<=100; i++) {
sum+= i;
}
return sum;
}
public static void main(String[] args) {
// call function1
int n1= 10;
int n2= 20;
int total = addNum(n1,n2);
System.out.println(total); // result = 30
// call function2
sayHello("안녕하세요"); // result = 안녕하세요
// call function3
int num = calSum();
System.out.println(num); // 5950
}
}
메서드는 객체의 기능을 구현하기 위해 클래스 내부에서 구현되는 함수를 뜻합니다. 즉, 메서드를 구현함으로 객체의 기능이 구현되게 됩니다.
메서드의 이름은 사용하는쪽(클라이언트 코드)에 맞게 명명하는게 좋은데 예를들어 학생의 이름을 불러오는 메서드를 만든다다면 getStudentName이라고 짓는 것을 뜻합니다. (서버쪽 입장에서 생각해보면 sendStudnetName이 될 수도 있기 때문입니다.)
또한 함수명은 Camel Notaion에 맞게 시작은 소문자로 하여 단어가 바뀔 때 마다 대문자를 사용해주는게 좋습니다.
public class FunctionTest {
//function 1
public static int addNum(int num1, int num2 ) {
int result;
result = num1 + num2;
return result;
}
public static void main(String[] args) {
// call function1
int n1= 10;
int n2= 20;
int total = addNum(n1,n2);
System.out.println(total); // result = 30
}
}
함수에서 사용되는 메모리는 짐이 쌓여있는 모양의 스택메모리라고 하여 먼저 들어가는것 아래로 쌓이고 사용할때는 위에서부터 꺼내서 사용하는 메모리입니다.
위 예시에 메모리 사용을 생각해 보면, 먼저 메모리에 main 함수가 들어가 있고 함수 안에 포함된 지역변수(함수내에서만 사용되는 변수) args[], n1=10, n=20가 포함되어 있습니다.
그 상태에서 addNum을 호출하면 main함수 위에 addNum이 메모리에 잡히게 되고 그 변수인 num1; num2; result;도 함께 메모리에 잡히게 됩니다.
addNum 함수가 호출되는 순간 main에 있던 n1의 값10이 num1으로 넘어가 대입되고 num2 값도 넘어가게 됩니다.
그 후 addNum이 리턴되고 수행이 끝나게 되면 메모리에는 main함수 부분만 남고 addNum은 메모리에서 사라집니다. (함수는 사용 후 메모리를 반환합니다.)