java/객체지향

5. 메서드(Method) 정의와 호출

VanillaSky7 2023. 1. 13. 19:31

메서드(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(13);
        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(13);
        int result2 = cal.Subtraction(52);
        int result3 = cal.Multiply(235);
        int result4 = cal.division(63);
        
        System.out.println(result);
        System.out.println(result2);
        System.out.println(result3);
        System.out.println(result4);
    }
}
cs