5. 메서드(Method) 정의와 호출
메서드(Method)?
메서드(Method)란? 어떠한 기능을 수행하기 위한 명령문들의 집합입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class Method {
public static void main(String[] args) {
int[] Array = new int[5];
for (int i = 0; i < 5; i++) {
Array[i] = i;
}
for (int i = 0; i < 5; i++) {
System.out.printf("%d", Array[i]);
System.out.println();
}
for (int i = 0; i < 5; i++) {
System.out.printf("%d", Array[i]);
System.out.println();
}
}
}
|
cs |
위 코드를 살펴보겠습니다. 10행부터 13행 부분의 반복문이 15행부터 18행에서 또 다시 반복되고 있습니다. 그런데 해당 반복문이 두 개
가 아닌 수십 혹은 수백 개가 존재하고, 5번 반복이 아닌 10번 반복으로 코드를 수정해야 하는 상황이라고 가정해보겠습니다.
그러면 우리는 i < 10으로 모두 코드 수정해야 한다는 절망적인 상황에 처하게 될 것이고, 이미 코드가 수없이 중복되어 상당히 복잡해진
상황입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class Method {
static void NumberArray(int[] Array) {
for (int i = 0; i < 5; i++) {
System.out.printf("%d", Array[i]);
System.out.println();
}
}
public static void main(String[] args) {
int[] Array = new int[5];
for (int i = 0; i < 5; i++) {
Array[i] = i;
}
NumberArray(Array);
NumberArray(Array);
}
}
|
cs |
이번에는 메서드를 통해 해당 반복문을 사용해보았습니다. 5번 반복이 아닌 10번 반복으로 코드를 수정해야할 때 이제 모든 반복문에 대
해 일일이 수정하는 것이 아닌, NumberArray 메서드 내에서 한번만 수정하면 모두 해결됩니다. 또, 반복적인 코드가 이제는 두 줄로 줄어
들었습니다! 따라서 메서드가 코드의 중복 제거, 재사용, 좋은 가독성 등의 장점을 가진다는 것을 확인해볼 수 있었습니다.
메서드 정의
위 NumberArray 메서드 코드를 다시 살펴보겠습니다.
static void NumberArray(int[] Array)
3행에 해당하는 이 부분이 메서드 선언부라고 합니다. 반환할 타입, 메서드명, 경우에 따라서 매개변수가 들어가게 됩니다.
3행 여는 중괄호 { 부터 8행의 닫는 중괄호 } 까지가 메서드 구현부라고 합니다. 실제로 메서드를 호출해서 사용되는 부분입니다.
이번에는 다른 예제인 덧셈을 수행하는 메서드를 생성해보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class Method {
static int Add(int a, int b) {
int result = a + b;
return result;
}
public static void main(String[] args) {
int result = Add(1, 3);
System.out.println(result);
}
}
|
cs |
메서드 선언부에 이번에는 반환할 타입이 int형, 메서드명 Add, 매개변수 int a와 int b가 들어가 있습니다. 하나씩 살펴보겠습니다.
int형 a와 b를 매개변수로 받아 연결하여 덧셈을 수행하고 그 결과값으로써 돌려줄 때 int형으로 돌려준다고 생각하시면 되겠습니다.
좀 더 쉽게 설명드리자면~
매개변수 a와 b는 Add 메서드가 호출될 때, 1과 3을 건네 받고 메서드 내에서 1과 3을 더하여 다시 돌려주는 방식입니다.
연결 매개체로써 역할을 수행한다고 생각하시면 이해가 편하실 것 같습니다. 이때 1과 3은 int형으로 사용될 것이므로 int a, int b
가 되겠습니다. 1과 3을 더해 최종적으로 되돌려줄(반환) 값 또한 int형이므로 메서드의 반환 타입이 int Add(~~) 으로 선언되었습니다.
따라서, 입력값인 매개변수는 반환 타입에 따라 void 인 경우 0개, 위 코드처럼 두 값을 더할 경우에는 2개, 그 외 여러 값을 더할 경우 4개
등 로직에 따라 0개부터 n개가 선언될 수 있습니다. 하지만 출력값인 반환값은 void의 경우에는 0개, int 등과 같이 타입이 존재할 때에는
1개만 출력(반환)될 수 있습니다. 따라서 한 메서드에 하나의 로직(기능)만을 수행할 수 있도록 작성해주셔야 하고, void의 경우에는 반환값
이 존재하지 않으므로 return 값이 존재하지 않습니다. (return에 대해서는 다음 글에서 다루니 일단 넘어가셔도 됩니다!)
메서드 호출
앞서 반환값이 없는 void 인 경우와 int 등과 같이 반환 타입을 가질 경우가 있다고 하였습니다.
따라서 void는 출력값이 존재하지 않으므로 MethodExample(); 과 같이 호출할 수 있습니다.
int의 경우에는 위 덧셈 메서드 예제와 같이 매개변수 int a와 int b를 통해 입력받아 출력값은 int로 반환하게 됩니다.
따라서 int result = Add(1, 3); 와 같이 호출할 수 있습니다.
(위 Add 메서드 코드 참고)
이때 수행되는 과정은 매개변수 1과 3을 입력받아 메서드 내에서 1과 3을 더해 result 라는 변수에 저장합니다. 이후 return을 통해 int 형
으로 result 값을 출력(반환)해줍니다!
정리 및 코드
메서드(Method)? : ㆍ어떠한 기능을 수행하기 위한 명령문들의 집합
ㆍ메서드 선언부와 메서드 구현부로 구성된다.
ㆍ코드의 중복 제거, 재사용성 증가, 유지보수 및 관리 용이
메서드 정의 : 선언부 - 반환타입 메서드명 (타입 매개변수명, 타입 매개변수명)
구현부 - 구현하고자 하는 로직(기능)에 따라 다름, 명령문들의 집합
메서드 호출 : 메서드명(); 혹은 메서드명(타입 매개변수명, 타입 매개변수명, ~~);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
// 초간단 계산기 예제!
class Calculator {
int Add(int a, int b) {
int result = a + b;
return result;
//return a + b; ← 위 두 코드를 한줄로 간단히 작성가능
}
int Subtraction(int a, int b) {
return a - b;
}
int Multiply(int a, int b, int c) {
return a * b * c;
}
int division(int a, int b) {
return a / b;
}
}
public class Method {
public static void main(String[] args) {
Calculator cal = new Calculator();
int result = cal.Add(1, 3);
int result2 = cal.Subtraction(5, 2);
int result3 = cal.Multiply(2, 3, 5);
int result4 = cal.division(6, 3);
System.out.println(result);
System.out.println(result2);
System.out.println(result3);
System.out.println(result4);
}
}
|
cs |