* 메서드(method)란?
- 자주 사용하는 코드에 이름을 주는 것
> static void 이름(자료형 변수명, 자료형 변수명, ...) {
코드;
}
- 증가하는 별, +, - 출력 / 구구단 2단 출력
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
|
package day07;
public class MethodEx1 {
// 자주 사용하는 코드에 이름을 주자 : method
// static void 이름() {
// 코드;
// }
// (지역변수 선언) cnt : 매개변수(parameter), 인자(argument)
static void printStar(int cnt) {
String str = "" ;
System.out.println("전달된 cnt : " + cnt);
for(int i = 0; i<cnt; i++) {
str += "*";
System.out.println(str);
}
}
// 1. 구구단 2단 출력하기
// 2. 이름 부여하기 printGuGuDan() <==
static void printGuGuDan(int dan){
for(int i=1; i<=9; i++) {
System.out.println(dan+" * " + i + " = " + dan*i);
}
}
static void printCode(String str) {
String result = "";
for(int i=0; i<=5; i++) {
result += str;
System.out.println(result);
}
}
public static void main(String[] args) {
// 이 메소드를 호출해
// 괄호가 있으면 method, 없으면 변수
printStar(3); // 3줄
printStar(5); // 5줄
printStar(9); // 9줄
System.out.println("--------------------");
// 3. main method에서 호출하기
// 4. 매개변수를 사용해서 좀 더 쓸모있는 구구단 출력 메서드 만들기
printGuGuDan(3);
printGuGuDan(5);
printCode("+");
printCode("-");
}
}
|
cs |
* 메서드 return
- static 이 메서드를 수행하고 메인 메서드로 돌아갈 때 가지고 갈 값의 자료형
static return 값의 자료형 메서드명 () {
return 값; main method로 이 값을 돌려보내기
}
* 메서드의 오버로딩(Overloading)
- 다중 정의
- 방법 : method 이름은 동일, 매개변수의 갯수, 순서, 자료형을 다르게 하면 된다.
- 메서드의 return / overloading
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
|
package day07;
public class MethodEx2 {
// static void 메서드명(자료형 변수명, 자료형 변수명, ...) {
// }
// static 이 메서드를 수행하고 메인 메서드로 돌아갈 때 가지고 갈 값의 자료형
// static return 값의 자료형 메서드명 () {
// return 값; main method로 이 값을 돌려보내기
// }
static int hap(int a, int b) {
System.out.println("a : " +a +", b : " + b);
int c = a+b;
return c; // c의 값을 메인 메서드에게 돌려주기 (return)
}
static int minus(int a, int b) {
System.out.println("a : " + a + ", b : " + b);
int c = a-b;
System.out.println("c : "+c);
return c;
}
static int max(int a, int b) {
System.out.println("a : " + a + ", b : " + b); // a: 100, b: 200
if (a >= b)
return a;
else
return b;
}
static float hap(int a, float b) {
float c = a+b;
return c;
}
static float minus(float a, int b) {
float c = a-b;
return c;
}
static int max(int a, float b) {
if (a >= b)
return a;
else
return (int)b;
}
static int sum(int a, int b, int c) {
int result = a + b + c;
return result;
}
static int sum(int a, float b) {
float c = a + b;
return (int)c;
}
public static void main(String[] args) {
// hap(100, 200); // 100, 200 값을 가지고 hap 메서드를 호출해라
int result = hap(100, 200);
System.out.println("result : "+result);
System.out.println("---------------------------");
int result2 = minus(300, 200);
System.out.println("reslut2 : "+result2); // result2 : 100
System.out.println("---------------------------");
int result3 = max(100, 200);
// 두 수 중 큰 값 반환하는 메서드 max
System.out.println("result3 : "+result3); // result3 : 100
System.out.println("---------------------------");
// 메서드 호출 : 메서드명 (매개변수 개수, 자료형, 순서)로 구분
// hap(int, int), hap(float, int), hap(int, float)
float result4 = hap(100, 200.0f);
System.out.println("result4 : "+result4);
System.out.println("---------------------------");
float result5 = minus(300.0f, 200);
System.out.println("result5 : "+result5);
System.out.println("---------------------------"); // result5 : 100.0f
int result6 = max(100, 200.0f);
System.out.println("result6 : "+result6); // result6 : 200
System.out.println("---------------------------");
int result7 = sum(100, 200, 300);
System.out.println("result7 : " +result7); // result7 : 600
System.out.println("---------------------------");
int result8 = sum(100, 200.0f);
System.out.println("result8 : "+result8); // result8 : 300
// method overloading
// 다중 정의
// 방법 : method 이름은 동일, 매개변수의 갯수, 순서, 자료형을 다르게 하면
// println() : overloading 되어 있다.
System.out.println(); // println()를 호출해
System.out.println("와 오늘은 금요일!!!");
System.out.println(100);
System.out.println(100.0f);
System.out.println(100.0d);
}
}
|
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
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
|
package day07;
import java.util.Arrays;
public class MethodEx3 {
public static void main(String[] args) {
int[] m = {23, 53, 22, 11, 66, 77, 88, 29};
System.out.println(m);
// 배열의 모든 요소값을 옆으로 출력
for(int i = 0; i<m.length;i++) {
System.out.print(m[i]+"\t");
}
System.out.println();
// 이 값을 [23, 53, 22, 11, 66, 77, 88, 29]
System.out.print("[");
for(int i = 0; i<m.length;i++) {
System.out.print(m[i]);
if(i !=m.length-1){
System.out.print(", ");
}
}
System.out.println("]");
System.out.println();
System.out.println("-----------------------");
// 위처럼 해도 되지만! 이미 만들어진 아래 방식으로 하는 게 간단
// ctrl+shift+O : auto import
System.out.println(Arrays.toString(m));
System.out.println("-----------------------");
// 최대값 :
// 배열 요소에서 제일 큰 값 찾기
int maxValue = getMaxValues(m);
System.out.println("최대값 : "+maxValue);
int minValue = getMinValues(m);
System.out.println("최소값 : "+minValue);
int position = getMaxValuePosition(m);
System.out.println("배열의 최대값의 위치는 "+position);
}
static int getMaxValues(int[] m) {
// getMaxValues 이 코드를 독립
int max = 0; // 현재 값 중에 이 값이 될 경우는 X
for(int i = 0; i < m.length; i++) {
if(m[i] > max){ // 현재 배열 요소의 값과 최대값과 배교해서 max보다 크면
max = m[i]; // 지금 값이 가장 큰 값
}
}
// System.out.println(max);
return max;
// System.out.println(max);
}
static int getMinValues(int[] m) {
int min = m[0];
for(int i = 0; i<m.length; i++) {
if(m[i] < min) {
min = m[i];
}
}
return min;
}
static int getMaxValuePosition(int[] m) {
int max = m[0];
int position = 0;
for(int i = 0; i<m.length;i++) {
if(m[i] > max) {
max = m[i];
position = i;
}
}
return position;
}
}
|
cs |
* 메서드의 호출 방식
- call by value : 값에 의한 호출 -> 원본이 훼손되지 않음
- call by reference : 참조값에 의한 호출
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
|
package day07;
public class MethodEx4 {
static int sum(int a, int b) {
a++; // ==> 1이 해당 메소드 안에서 증가(메인 메소드 안에서는 안바뀜)
// int c = a + b;
return a+b;
}
static int sum(int[] m) {
// 합계
System.out.println("method 내부에 m : " + m);
System.out.println("m[2] : "+m[2]);
// 마스터키를 준 것과 같기 때문에, heap에 있는 변수값도 수정됨
m[2] = 100;
return 0;
}
public static void main(String[] args) {
int a = 100;
int b = 200;
int result = sum(a, b); // call by value : 값에 의한 호출 -> 원본이 훼손되지 않음
System.out.println(result);
System.out.println("main method ==> a : "+a+", b: "+b);
System.out.println("-----------------------------");
int[] m = {3, 2, 9};
System.out.println("메인 메서드 m : "+ m);
int result2 = sum(m); // call by reference : 참조값에 의한 호출
System.out.println("메인메서드 m[2] : "+m[2]);
}
}
|
cs |
[ 응용 ]
1. 다음과 같은 코드가 실행될수 있도록 method overloading 을 구현하시오.
int result1 = plus(100,400);
float result2 = plus(100,200.0f, 300);
double result3 = plus(100,300.0, 200);
package day07;
public class MethodQ001 {
public static void main(String[] args) {
int result1 = plus(100, 400);
System.out.println("result 1 : "+result1);
int result2 = plus(100, 200.0f, 300);
System.out.println("result 2 : "+result2);
int result3 = plus(100, 300.0, 200);
System.out.println("result 3 : "+result3);
}
static int plus (int a, int b) {
int c = a + b;
return c;
}
static int plus (int a, float b, int c) {
float e = a + b+ c;
return (int)e;
}
static int plus (int a, double b, int c) {
double e = a + b + c;
return (int)e;
}
}
2. method Overloading 이란 무엇이며, 어떤 방법으로 하는 것인가?
: 메서드를 다중 정의하는 것
-> method 이름은 동일하게 지정하고, 매개변수의 갯수, 순서, 자료형을 다르게 하면 된다.
3. 2단 부터 6단까지 출력하는 메서드를 구현하시오.
printGuGuDan(2, 6) ;
package day07;
public class MethodQ003 {
public static void main(String[] args) {
printGuGuDan(2, 6);
}
static void printGuGuDan(int dan1, int dan2){
for(int i=1; i<=9; i++) {
System.out.println(dan1+" * " + i + " = " + dan1*i);
}
System.out.println("--------------------");
for(int i=1; i<=9; i++) {
System.out.println(dan2+" * " + i + " = " + dan2*i);
}
}
}
4. method 호출 방법에 따른 분류는?
- call by value : 값에 의한 호출 -> 원본이 훼손되지 않음
- call by reference : 참조값에 의한 호출
5. 다음 배열의 요소를 섞는 메소드를 구현하시오.
int[] m = { 1, 2, 3,4, 5, 6, 7, 8, 9 };
shuffle(m) ; // 랜덤하게 두 요소의 값을 교환하는 코드 (1000번)
package day07;
public class MethodQ005 {
public static void main(String[] args) {
int[] m = {1, 2, 3, 4, 5, 6, 7, 8, 9};
for(int i=0; i<1000; i++) {
}
System.out.println(shuffle(m));
}
static int shuffle (int[] m) {
int i = 1;
int shuf = m[i];
for(int j=0; j<m.length-1; j++) {
int a = (int)(Math.random()*9);
int b = (int)(Math.random()*9);
int temp = -100;
temp = m[a];
m[a] = m[b];
m[b] = temp;
System.out.print(m[j] + " ");
}
return shuf;
}
}
6. 배열 요소중 가장 큰 값을 리턴하는 메서드를 구현하시오.
int[] m = { 21, 32, 31, 14, 51, 26, 37, 82, 19 };
int result = findMax(m) ;
System.out.println("result : " + result); // result : 82
package day07;
public class MethodQ006 {
public static void main(String[] args) {
int[] m = {21, 32, 31, 14, 51, 26, 37, 82, 19};
int result = findMax(m);
System.out.println("result : "+result);
}
static int findMax(int[] m) {
int max = m[0];
for(int i = 0; i < m.length; i++) {
if(m[i] > max){
max = m[i];
}
}
return max;
}
}
7. 배열 요소중 가장 작은 값을 리턴하는 메서드를 구현하시오.
int[] m = { 21, 32, 31, 14, 51, 26, 37, 82, 19 };
int result = findMin(m) ;
System.out.println("result : " + result); // result : 14
package day07;
public class MethodQ007 {
public static void main(String[] args) {
int[] m = {21, 32, 31, 14, 51, 26, 37, 82, 19};
int result = findMin(m);
System.out.println("result : "+result);
}
static int findMin(int[] m) {
int min = m[0];
for(int i=0; i<m.length; i++) {
if(m[i] < min) {
min = m[i];
}
}
return min;
}
}
8. minus method를 overloading 하시오.
System.out.println(minus(300,100)); // 200
System.out.println(minus(300.0f,100)); // 200.0f
System.out.println(minus(300,100.0d)); // 200.0d
System.out.println(minus(300.0f,100.0f)); // 200.0f
System.out.println(minus(300.0d,100.0f)); // 200.0d
package day07;
public class MethodQ008 {
public static void main(String[] args) {
int result = minus(300, 100);
System.out.println("result : " + result);
float result2 = minus(300.0f, 100);
System.out.println("result2 : " + result2);
double result3 = minus(300, 100.0d);
System.out.println("result3 : " + result3);
float result4 = minus(300.0f, 100.0f);
System.out.println("result4 : " + result4);
double result5 = minus(300.0d, 100.0f);
System.out.println("result5 : " + result5);
}
static int minus (int a, int b) {
int c = a-b;
return c;
}
static float minus (float a, int b) {
float c = a-b;
return c;
}
static double minus (int a, double b) {
double c = a-b;
return c;
}
static float minus (float a, float b) {
float c = a-b;
return c;
}
static double minus (double a, float b) {
double c = a-b;
return c;
}
}
'Java' 카테고리의 다른 글
[Java] 객체 지향 클래스 ( 클래스 / 모델링 / 자료형 참조변수 / 객체 할당 연산자 / instance ) (0) | 2023.03.13 |
---|---|
[Java] Method 메서드 ( 오버로딩 overloading / 매개변수 / 가변인자 ) + 응용 (0) | 2023.03.13 |
[Java] 야구 게임 (배열 / Scanner / 반복문(for, while) / Math.random 활용) (0) | 2023.03.10 |
[Java] 로또 번호 생성기 (배열 / for문 / Math.random 활용) (0) | 2023.03.09 |
[Java] 배열 (1~3차원 배열 / 임시변수 - 변수값 교환 / 버블 소트) (0) | 2023.03.09 |