클래스안에서 사용되는 함수(function)의 일종인 메서드를 만들기 위해 함수의 개념과 함수의 구조, 그리고 호출될 때 사용되는 메모리에 대해서 배워보도록 하겠습니다.
함수란?
함수(function)
- 함수는 다른 프로그램 언어들에도 많이 사용되는 개념으로 하나의 기능을 구현 하는 일련의 코드를 뜻합니다. 함수의 길이와는 상관없이 하나의 기능만을 합니다.
- 함수로 구현된 기능은 필요한 여러곳에서 호출되어서 사용됩니다. 예를 들어 더하기라는 함수가 있다면 거리를 더하던 숫자를 더 하던 성적을 더하던 더하기라는 한 기능을 여러 곳해서 호출해서 사용하게 됩니다..
- 그렇기 때문에 재사용이 가능하고, 기능이 분리되어서 작성 되기 때문에 가독성이 좋고 이후에 유지 보수하는데 도움이 된다는 장점이 있습니다.
함수의 입력과 반환
- 입력값 => 함수 => 결과값의 구조로 되어 있으며 함수에 따라서 입력값이나 반환값이 없을 수 도 있습니다.
- Java에서는 입력값을 매개변수, 결과값을 반환값이라고 부릅니다.
함수 정의 하기
- 함수는 이름, 매개변수(입력값), 반환 값(결과 값), 함수 몸체(body) 4가지로 구성되지만 매개변수와 반환 값은 경우에 따라 생략 될 수 있습니다.
- 다음은 더하기 함수 예시이고 아래에 각 항목별 설명을 괄호로 붙여봤습니다.
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
}
}
- function1은 addNum 함수로 num1, num2에 매개변수를 입력하여 int result의 반환값을 내보내는 함수입니다.
- function2는 String 매개 변수를 출력해주는 함수로 반환값이 없어 void라고 써줍니다.
- function3은 1~100 까지 더하는 함수로 매개변수는 없고 반환값이 int인 함수입니다.
- 함수는 기능이고 자체 출력이 되지 않기 때문에 호출해서 사용해야 합니다. main에 3가지 함수를 호출해서 알맞은 함수명과 알맞은 매개변수를 괄호안에 넣으면 함수기능에 따라 결과값을 출력합니다.
매서드(method)
- 메서드는 객체의 기능을 구현하기 위해 클래스 내부에서 구현되는 함수를 뜻합니다. 즉, 메서드를 구현함으로 객체의 기능이 구현되게 됩니다.
- 메서드의 이름은 사용하는쪽(클라이언트 코드)에 맞게 명명하는게 좋은데 예를들어 학생의 이름을 불러오는 메서드를 만든다다면 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은 메모리에서 사라집니다. (함수는 사용 후 메모리를 반환합니다.)
'Java' 카테고리의 다른 글
[Java] 클래스와 객체 - 예제(1) (0) | 2020.07.10 |
---|---|
[Java] 클래스와 객체 - 인스턴스, 힙 메모리 (0) | 2020.07.09 |
[Java] 클래스와 객체 - 객체지향 프로그래밍과 클래스 (0) | 2020.07.09 |
[Java] 캘린더 만들기 - 일정 등록 / 검색 기능 구현하기 (0) | 2020.07.08 |
[Java] 캘린더 만들기 - 자동으로 요일을 계산하는 달력 (0) | 2020.07.08 |