Coding(Java)/Java(이론)2021. 9. 9. 22:00
반응형

[Java] 14. 메소드 예제

 

 

다음은 문자출력기능과 수학(연산)기능을 갖춘 메소드를 가진 프로그램이다.

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
package mymain;
 
public class Method_Test {
    
    //메소드 호출방식에 따른 분류
        //1.Call By Name              : 이름만 호출
        //2.Call By Value             : 이름+값 호출 
        //2.Call By Reference(Address): 이름+참조값 호출 
        
        //static: 정적 메소드(프로그램 시작 시 미리 생성해 놓는다)
        //             반환형 메소드명(void)   <= 메소드 구조
        public static void korea_greeting()    //<=Method Prototype(원형) 
        {   //method body
            System.out.println("--한국어: 안녕하세요---");
            
            //void <=자료형: 값이 없음을 상징적으로 표현해주는 자료형
            return;//자신을 호출한 곳으로 복귀(값이 없다: 담아갈 변수도 필요없다)    
        }
        
        public static void english_greeting() {
            System.out.println("--영어: Hi Everyone!!--");
        }
        
        public static int plus(int a, int b) {
            //                   int a=x, int b=y //가(변)인자
            //                   생성: 메소드 호출시
            //                   소멸: 메소드 종료시(메소드 내에서만 사용되는 임시변수)
            
            int c=a+b;
            
            return c;
        }
        
        public static int minus(int a, int b) {
            //                   int a=x, int b=y //가(변)인자
            //                   생성: 메소드 호출시
            //                   소멸: 메소드 종료시(메소드 내에서만 사용되는 임시변수)
            
            int c=a-b;
            
            return c;
        }
        
        //곱하기기능 메소드
        public static int product(int a, int b) {
            
            int c=a*b;
            return c;
        }
        
        //나누기기능 메소드
            public static int divide(int a, int b) {
                //0으로 나누는 경우 제외=>0 반환
                
                if(b!=0) {
                int c=a/b;
                return c;
                }
                else
                    return 0;
            }
            
        // 나머지기능 메소드
            public static int remain(int a, int b) {
                // 0으로 나누는 경우 제외=>0 반환
                
                if(b!=0) {
 
                int c=a%b;
                return c;
                }
                else
                    return 0;
            }
            
        //중복메소드(Method Overload): 메소드명은 동일하나 호출인자정보가 다른 메소드.    
            
        // 두 수 중 큰 수 구하는 메소드
            public static int max(int a, int b) { //max(1,2)
                
                int max;
                max=a>b ? a:b;
 
                
                return max;
            }
            
            //방법 1
            /*
             return(a>b) ? a:b;
             */
            //방법 2
            /*
             if(a>b) return a;
             return b;
             */
 
        // 세 수 중 큰 수 구하는 메소드 
            public static int max(int a, int b, int c) { //max(1, 2, 3)
                // 0으로 나누는 경우 제외=>0 반환
                
                int max;
                max=a>b ? a:b;
                max=max>c ? max:c;
                
                return max;
                
                
                /*int max=a>b?a:(b>c)? b:c;//복잡한 방법
                  return max;*/
                
            }
            
            /*
             if(a>b) 
                max=a;
             else 
                big=b;
             if(c>max) max=c;
             
             return max;
             */
            
        //1부터 n까지의 합을 구하는 메소드
            public static int sum(int n) {
                // 0으로 나누는 경우 제외=>0 반환
                
                int s=0;
                for(int i=0;i<=n;i++)
                {
                    s=s+i;
                }
                
                return s;
            }
            
            public static void main(String[] args) {
                // TODO Auto-generated method stub
                //한국어 인삿말을 알기 위해서 메소드 호출 
                korea_greeting();
                
                //영어 인삿말 호출
                english_greeting();
                
                int x=10, y=3, z=20;
                int res=plus(x,y);//plus(x,y) x,y는 호출 시 전달되는 실인자 
                
                System.out.printf("%d+%d=%d\n", x, y, res);
                
                //빼기 기능 메소드 호출
                res=minus(x,y);
                System.out.printf("%d-%d=%d\n", x, y, res);
                
                //곱
                res=product(x,y);
                System.out.printf("%d*%d=%d\n", x, y, res);
 
                //몫
                res = divide(x, y);
                System.out.printf("%d*%d=%d\n", x, y, res);
 
                //나머지
                res = remain(x, y);
                System.out.printf("%d*%d=%d\n", x, y, res);
 
                //가장 큰 수
                res = max(x, y);
                System.out.printf("max(%d,%d)=%d\n", x, y, res);
 
                //가장 큰 수2
                res = max(x, y, z);
                System.out.printf("max(%d,%d,%d)=%d\n", x, y, z, res);
 
                //n까지의 합
                res = sum(z);
                System.out.printf("1부터 %d까지의 합=%d\n", z, res);
 
            }
 
}
 
cs

먼저 메소드 호출방식에 대해 알아보도록 하자

1. Call By Name: 이름만 호출

2. Call By Value: 이름+값 호출

3. Call By Reference(Address): 이름+참조값 호출

*static: 정적 메소드로 프로그램 시작 시 미리 생성한다.

void: 반환형 메소드명

 

korean_gretting과 english_greeting은 각각 한국어, 영어 인사문자를 출력하는 기능을 하고, 나머지는 합, 차, 곱, 몫, 나머지, 최댓값을 구하는 프로그램이다. x=10, y=3, z=20을 메소드에 입력해 실행시킨 결과는 다음과 같다.

--한국어: 안녕하세요---
--영어: Hi Everyone!!--
10+3=13
10-3=7
10*3=30
10*3=3
10*3=1
max(10,3)=10
max(10,3,20)=20
1부터 20까지의 합=210

 

위 프로그램에서 메소드는 한 번 실행되고 더 이상 실행되지 않는다. 그리고 이로 인해 용량 낭비가 발생한다(1회용품 사용하고 버리는 것과 같음).

 

이 문제를 해결하기 위해 메소드를 따로 클래스에 분리시켜 프로그램을 만든다. 그러면 분리된 메소드는 필요할 때만 사용가능하고 용량 낭비가 발생하지 않는다. 

 

다음의 예는 메소드를 따로 클래스에 분리시킨 프로그램이다. 

 

클래스부분:

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
package myutil;
 
public class BasicMathUtil {//클래스(설계서)
    
public static int plus_static(int a, int b) {
        
        return a+b;
    }
    
    //Instance메소드: 객체가 생성되어야 생성되는 메소드
    public int plus(int a, int b) {
        
        return a+b;
    }
    
    //plus(int, int)와 plus(double, double)관계 
    //Method Overload(중복메소드)
    //:메소드명을 동일하고 인자정보가 다른 메소드
    public double plus(double a, double b) {
        return a+b;
    }
    
    public int minus(int a, int b) {
 
        return a-b;
    }
    
    public int max(int a, int b) {
        return a>b? a:b;//3항연산자 사용
    }
 
}
 
cs

본 프로그램 부분:

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
package mymain;
 
import myutil.BasicMathUtil;
 
public class BasicMath {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        int x=10, y=3, res;
        //미리 생성되어있는 메소드
        res=BasicMathUtil.plus_static(x,y); // import myutil있으면 myutil생략가능
        
        //설계서를 이용해 객체를 생성
        BasicMathUtil mm=new BasicMathUtil(); //mm은 생성된 객체이름
        //            객체
        //            Object
        //            인스턴스(instance)
        
        res=mm.plus(x, y);        
        System.out.printf("%d+%d=%d\n", x, y, res);
        
        res=mm.max(x, y);
        System.out.printf("max(%d,%d)=%d\n", x, y, res);
        
        //기존 API기능 활용
        res=Math.max(x, y);
        System.out.printf("max(%d,%d)=%d\n", x, y, res);
        
        double d1=10.0, d2=5.0, d_res;
        d_res=mm.plus(d1, d2);
        System.out.printf("%.1f+%.1f=%.1f\n", d1, d2, d_res);
 
    }
}
 
cs

본 프로그램에서 x=10, y=3, res를 설정하고 클래스로부터 얻어온 메소드에 입력해 프로그램을 실행시킨다.

다음은 그 실행결과이다.

10+3=13
max(10,3)=10
max(10,3)=10
10.0+5.0=15.0

 

반응형

'Coding(Java) > Java(이론)' 카테고리의 다른 글

[Java] 16. 배열(2)  (0) 2021.09.24
[Java] 15. 배열(1)  (0) 2021.09.24
[Java] 13. 클래스의 정의와 메소드  (0) 2021.09.02
[Java] 12. 다중반복문, break&continue label  (0) 2021.08.31
[Java] 11. do-while문, continue문  (0) 2021.08.30
Posted by skywalker222