반응형
/*
* 메서드(Method)
* - 동작(작업)의 최소 단위(= 작업을 수행하는 코드들의 모음)
* ex) '밥먹다' 의 기능을 메서드로 표현(밥을 떠서 입에 넣고 씹기 등)
* - 메서드는 반드시 호출되어야만 실행될 수 있음
* => 호출하는 메서드 : Caller, 호출 당하는 메서드 : Worker
* - 메서드 호출 시 메서드에 전달하는 값을 전달인자(Argument)라고 하며,
* 이 전달 인자를 전달받아 저장하는 변수를 매개변수(Parameter)라고 함
* => 파라미터는 있을 수도 있고, 없을 수도 있다.
* - 메서드가 호출되면 작업을 수행한 후에 반드시 호출한 위치로 돌아감
* => 이 때, 호출한 곳으로 전달하는 값을 리턴값(Return value)이라고 함
* - 리턴타입을 명시한 메서드는 반드시 return 문을 사용하여 데이터 리턴
* => 단, 리턴타입이 void 인 메서드는 return 문을 생략해도 되고
* 리턴값 없이 return 문만 기술할 수 있다!
* => 메서드 내에서 return 문을 만나면 즉시 메서드를 종료하고 돌아감
* => if 문 등의 조건식을 사용하여 return 문을 실행할 경우
* 반드시 어떤 경우에도 return 문이 실행되도록 조건식을 작성해야함
*
* - main() 메서드는, 자바에서 유일하게 호출하지 않아도
* 프로그램 실행 시점에서 자동으로 호출되는 메서드
* => main() 메서드를 자바 프로그램의 시작점(Starting point)이라고 함
* - 메서드 호출 시 메서드 매개변수와 일치하는 타입 및 갯수의
* 데이터 전달이 필수! (메서드 호출 형태로 정의 형태가 일치해야함)
*
* < 메서드 정의 기본 문법 >
* [제한자] 리턴타입 메서드명([매개변수선언...]) {
* // 메서드 호출 시 수행할 코드들...
* [return [리턴값];]
* }
*
* < 메서드 호출 기본 문법 >
* 1. 리턴값이 없는 경우
* 메서드명([데이터...]);
*
* 2. 리턴값이 있는 경우
* 1) 데이터타입 변수명 = 메서드명([데이터...]);
* => 리턴되는 데이터를 변수에 저장할 경우
* 2) System.out.println(메서드명([데이터...]);
* => 리턴되는 데이터를 출력하거나 직접 연산에 사용하는 경우
*
* < 메서드 형태 4가지 >
* 1. 파라미터도 없고, 리턴값도 없는 메서드
* 2. 파라미터는 없고, 리턴값만 있는 메서드
* 3. 파라미터만 있고, 리턴값은 없는 메서드
* 4. 파라미터도 있고, 리턴값도 있는 메서드
*/
public class Ex {
public static void main(String[] args) {
//Method
//----------------- worker 메서드 호출 ---------------------
// 1. 파라미터(전달할 값)도 없고, 리턴값(돌려받을 값)도 없는 메서드 호출
System.out.println("동생아! 불 좀 끄고 가라!");
sister_1(); //sister_1() 메서드 호출
// =>매개변수(파라미터)가 없으므로 소괄호에 전달할 데이터도 없음
System.out.println("동생이 불을 끄고 갔다!");
//주의! 리턴값이 없는 메소드를 출력문에서 호출 or 변수에 대입 불가
// System.out.println(sister_1());//오류
System.out.println("============================");
// 2. 파라미터는 없고, 리턴값만 있는 메서드 호출
System.out.println("동생아! 물 좀 떠온나!");
// sister_2();
// => 리턴값이 있는 메서드 호출 후 변수에 저장하거나 출력문에 사용 가능
// 만약, 아무 동작도 없을 경우 메서드 호출 후 리턴값은 버려짐
// String result = sister_2();
// System.out.println("동생이 가져다 준 것 : "+ result);
//리턴값을 변수에 저장하지 않고 직접 사용 가능
System.out.println("동생이 가져다 준 것 : "+ sister_2());
}//main() 메서드 끝
//------------------ worker 메서드 정의 ----------------------
// 1. 파라미터도 없고, 리턴값도 없는 메서드 정의
// => 메서드 파라미터가 없으므로 선언부 소괄호() 안에 아무것도 명시하지 않음
// => 리턴값이 없으므로 리턴타입 부분에 특수한 데이터타입인 void 타입을 명시
// (void = 리턴값이 없다는 의미)
public static void sister_1() {
//sister_1메서드가 호출했을때 수행할 작업들을 기술
System.out.println("동생 : 오빠가 불 끄라고 해서 불을 껐다!");
}//메서드를 종료하면 메서드를 호출한 곳으로 이동(되돌아감)
//-------------------------------------------------------------
// 2. 파라미터는 없고, 리턴값만 있는 메서드 호출
// => 메서드 파라미터가 없으므로 선언부 소괄호() 안에 아무것도 명시하지 않음
// => 리턴값이 있으므로 리턴할 데이터와 일치하는 데이터타입을
// 리턴타입 부분에 명시(문자열을 리턴하므로 String 타입을 명시)
public static String sister_2() {
System.out.println("동생 : 오빠가 물 떠오라고 시켜서 물을 떠다 줬다!");
// return 문을 사용하여 리턴타입 String 에 해당하는 데이터 리턴
return "물"; // 리터럴을 직접 리턴하는 방법
// 리턴값을 변수에 저장한 후 변수를 return 문에 기술하는 방법
// String item = "물";
// return item;
}
}//Ex 클래스 끝
/*
동생아! 불 좀 끄고 가라!
동생 : 오빠가 불 끄라고 해서 불을 껐다!
동생이 불을 끄고 갔다!
============================
동생아! 물 좀 떠온나!
동생 : 오빠가 물 떠오라고 시켜서 물을 떠다 줬다!
동생이 가져다 준 것 : 물
*/
public class Test {
public static void main(String[] args) {
// 1. 파라미터도 없고, 리턴값도 없는 메서드 호출 연습
// "Hello, World!" 문자열을 10번 출력하는 printHello() 메서드 호출
printHello();
System.out.println("---------------------");
// 구구단 2단 ~ 9단까지 출력하는 gugudan() 메서드 호출
gugudan();
System.out.println("---------------------");
// 2. 파라미터는 없고, 리턴값만 있는 메서드 호출 연습
// 1 ~ 10까지 정수의 합(55)을 계산하여 리턴하는 sum() 메서드 호출하고,
// 리턴되는 정수의 합(55)을 변수 total 에 저장 후 출력
int total = sum();
System.out.println("1 ~ 10까지 정수의 합: " + total);
System.out.println("-----------------------");
// System.out.println("오늘의 날씨 : " + getWeather());
String todayWeather = getWeather();
System.out.println("오늘의 날씨 : " + todayWeather);
}
// "Hello, World!" 문자열을 10번 반복 출력하는 printHello() 메서드 정의
// => 리턴값이 없으므로 리턴타입에 void 타입 명시
// => 파라미터가 없으므로 메서드 선언부 소괄호 안에 아무것도 명시하지 않음
public static void printHello() {
for (int i = 1; i <= 10; i++) {
System.out.println("Hello, World");
}
}// printHello() 끝
// 구구단 2단 ~ 9단까지 출력하는 gugudan() 메서드 정의
// => 리턴값이 없으므로 리턴타입에 void 타입 명시
// => 파라미터가 없으므로 메서드 선언부 소괄호 안에 아무것도 명시하지 않음
public static void gugudan() {
for (int dan = 2; dan <= 9; dan++) {
System.out.println("< " + dan + "단 >");
for (int i = 1; i <= 9; i++) {
System.out.println(dan + " * " + i + " = " + dan * i);
}
System.out.println();
} // gugudan() 끝
}//main() 메서드 끝
// 2. 파라미터는 없고, 리턴값만 있는 메서드 정의 연습
// 1 ~ 10 까지 정수의 합(55)을 계산하여 리턴하는 sum() 메서드 정의
// => 메서드 파라미터가 없으므로 선언부 소괄호() 안에 아무것도 명시하지 않음
// => 리턴값이 있으므로 리턴할 데이터와 일치하는 데이터타입을
// 리턴타입 부분에 명시(정수의 합(정수)을 리턴하므로 int 타입을 명시)
public static int sum() {
int total = 0;
for (int i = 0; i <= 10; i++) {
total += i;
}
return total;
}
// ---------------------------------------
// 오늘의 날씨("흐림")를 문자열로 리턴하는 getWeather() 메서드 정의
public static String getWeather() {
// return "흐림";
String today = "흐림";
return today;
}
}
/*
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
---------------------
< 2단 >
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
< 3단 >
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
< 4단 >
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
< 5단 >
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
< 6단 >
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
< 7단 >
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
< 8단 >
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
< 9단 >
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
---------------------
1 ~ 10까지 정수의 합: 55
-----------------------
오늘의 날씨 : 흐림
*/
public class Test1_2 {
public static void main(String[] args) {
//메서드 유형 1번 연습
//파라미터도 없고 리턴값도 없는 메서드
//------------- 메서드 호출 --------------
//=>메서드가 호출되면 자신의 이름을 10번 출력하는 printName() 메서드
printName();
//메서드 유형 2번 연습
//파라미터 x, 리턴값o
// => 메서드가 호출되면 10 + 20 의 결과값을 리턴하는 sum() 메서드
int result = sum();
System.out.println(result);
// System.out.println(sum());
}
//--------------- 메서드 정의 ---------------
public static void printName() {
for(int i =1; i <= 10; i++) {
System.out.println("자바");
}
}
public static int sum() {
// int sum = 10 +20 ;
// return sum;
return 10+20;
}
}
/*
자바
자바
자바
자바
자바
자바
자바
자바
자바
자바
30
*/
public class Ex2 {
public static void main(String[] args) {
//3. 파라미터 o , 리턴값 x
System.out.println("동생아! 돈 줄테니 과자 사먹어라!");
// int myMoney = 200;
// sister_3(myMoney);
// => 메서드 호출 시 전달할 데이터는 메서드명 뒤의 소괄호 내에 기술
// 메서드 파라미터에 리터럴값 직접 전달하거나
// 변수를 사용하여 값을 저장한 뒤 파라미터에 전달 가능
sister_3(200);
System.out.println("======================================");
//4. 파라미터 o,리턴값 o
System.out.println("동생아! 200원 줄테니 내 새우깡도 사다 도!");
// sister_4(200);
String snack = sister_4(1000);
System.out.println("동생이 사다준 것 : " + snack);
}
//메서드 정의
// 3. 파라미터만 있고, 리턴값은 없는 메서드 정의
// => 파라미터가 있으므로 메서드 선언부 소괄호() 안에
// 외부로부터 호출 시 전달받는 데이터를 저장할 변수(매개변수) 선언
// => 리턴값은 없으므로 리턴타입 부분을 void 로 지정
public static void sister_3(int money) { //int money = 200
// 파라미터로 선언된 int형 변수 money 에 메서드 호출 시 전달된 값 저장됨
// => sister_3(200) 호출 시 int money = 200 과 동일한 코드로 취급됨
System.out.println("동생: 오빠가 준 돈 = " + money + "원");
// 현재 메서드 내에서 money 변수를 자유롭게 사용 가능
// 단, 메서드를 벗어나면 존재하지 않는 변수로 취급됨
money-=200;
System.out.println("동생: 새우깡 사먹고 " + money + "원 남았다." );
} // sister_3() 메서드 끝
// public static void sister_3(int money) {
// System.out.println("동생 : 오빠가 준 돈 = " + money + "원");
// money -= 200;
//
// // if문을 사용하여 잔돈이 남았을 때 잔돈을 출력하지 않고 메서드 종료
// // => 만약, 잔돈이 남지 않았을 경우 "잔돈 0원" 출력
// if(money > 0) {
// // 현재 수행중인 메서드를 종료하고 빠져나가기 위해서는
// // 특정 조건일 때 return 문이 실행되도록 해야한다!
// return;
// }
//
// System.out.println("동생 : 잔돈 " + money + "원");
//
// } // sister_3() 메서드 끝
public static String sister_4(int money) {
System.out.println("동생: 오빠가 준 돈 = " + money + "원");
money-=200;
System.out.println("동생: 새우깡 사먹고 " + money + "원 남았다." );
// return "새우깡", money; // 주의! return 문 뒤의 값은 하나만 기술!
return "새우깡";
}
}
/*
동생아! 돈 줄테니 과자 사먹어라!
동생: 오빠가 준 돈 = 200원
동생: 새우깡 사먹고 0원 남았다.
======================================
동생아! 200원 줄테니 내 새우깡도 사다 도!
동생: 오빠가 준 돈 = 1000원
동생: 새우깡 사먹고 800원 남았다.
동생이 사다준 것 : 새우깡
*/
public class Test2 {
public static void main(String[] args) {
// => 문자열을 1개 전달하면 해당 문자열을 출력하는 print() 메서드 호출
print("Java");
System.out.println("----------------------------");
// => 정수를 1개 전달하면 해당 정수에 대해 "홀수", "짝수" 판별하는
// checkNumber() 메서드 호출
checkNumber(5);
System.out.println("----------------------------");
// => 정수 1개를 전달하면 해당 정수에 대해 "홀수", "짝수"를 판별하고
// 판별 결과 문자열을 리턴하는 checkNumber2() 메서드 호출
String result = checkNumber2(10);
System.out.println("판별결과 : " + result);
}
// => 문자열을 1개 전달받아 해당 문자열을 출력하는 print() 메서드 정의
// => 외부로부터 전달받은 문자열 저장하기 위한 변수를 소괄호() 안에 선언
public static void print(String str) {
System.out.println(str);
}
// =================================================================
// 3. 파라미터만 있고, 리턴값은 없는 메서드 정의
// => 정수를 1개 전달받아 해당 정수에 대해 "홀수", "짝수" 판별하는
// checkNumber() 메서드 정의
public static void checkNumber(int num) {
if(num % 2 == 0) {
System.out.println(num + " : 짝수");
}else {
System.out.println(num + " : 홀수");
}
}
// => 정수 1개를 전달받아 해당 정수에 대해 "홀수", "짝수"를 판별하고
// 판별 결과 문자열을 리턴하는 checkNumber2() 메서드 정의
public static String checkNumber2(int num) {
if(num % 2 == 0) {
return "짝수";
}else {
return "홀수";
}
}
// => 정수 1개를 전달받아 해당 정수에 대해 "홀수", "짝수"를 판별하고
// 판별 결과 문자열을 리턴하는 checkNumber2() 메서드 정의
// public static String checkNumber2(int num) {
// if(num % 2 == 1) {
// return "홀수";
// } else {
// return "짝수";
// }
// ---------------------------------
// if(num % 2 == 1) {
// return "홀수";
// } else if(num % 2 == 0) {
// return "짝수";
// }
//
// return "";
// ---------------------------------
// if 문과 else if 문 내에서 직접 리턴하지 않고
// 리턴 데이터를 별도의 변수에 저장만 한 뒤, if문 종료 후 return 수행
// String result = "";
//
// if(num % 2 == 1) {
// result = "홀수";
// } else if(num % 2 == 0) {
// result = "짝수";
// }
//
// return result;
// }
}
/*
Java
----------------------------
5 : 홀수
----------------------------
판별결과 : 짝수
*/
public class Ex3 {
public static void main(String[] args) {
// 5. 파라미터가 2개 이상인 메서드
String snack = "새우깡";
int myMoney = 1000;
System.out.println("동생아 니가 사온 새우깡이랑 1000원 줄테니 쿠쿠다스로 바꿔온나!");
String mySnack = sister_5(1000,"새우깡");
System.out.println("동생이 바꿔다 준 것 : " + mySnack);
}
// 5. 파라미터가 2개 이상인 메서드 정의
// => 전달되는 데이터가 int, String 형태이므로
// 파라미터 선언 순서도 int, String 순서로 선언해야된다!
public static String sister_5(int myMoney, String snack) {
System.out.println("동생: 오빠가 준 돈 = " + myMoney + "원");
System.out.println("동생: 오빠가 준 과자 = " + snack);
System.out.println(snack + "을 쿠쿠다스로 교환했다!");
snack = "쿠쿠다스";
// snack 변수 값 리턴
return snack;
}
}
/*
동생아 니가 사온 새우깡이랑 1000원 줄테니 쿠쿠다스로 바꿔온나!
동생: 오빠가 준 돈 = 1000원
동생: 오빠가 준 과자 = 새우깡
새우깡을 쿠쿠다스로 교환했다!
동생이 바꿔다 준 것 : 쿠쿠다스
*/
public class Test3 {
public static void main(String[] args) {
// 5. 파라미터가 2개 이상인 메서드 호출 연습
// => 정수 2개를 전달하면 두 정수의 합을 리턴하는 메서드를 호출하고
// 리턴값을 출력(ex. 10, 20 전달 시 10 + 20 결과인 30 리턴)
int result = sum(10,20);
System.out.println("두 정수의 합 = " + result);
System.out.println("==============================");
int result2 = operation('+',10,20);
System.out.println("연산결과 = " + result2);
result2 = operation('-', 10, 20);
System.out.println("연산 결과 = " + result2);
result2 = operation('*', 10, 20);
System.out.println("연산 결과 = " + result2);
}
// ------------------------------------------------------------
// => 정수 2개를 전달받아 두 정수의 합을 리턴하는 메서드를 정의
// ex. 10, 20 전달 시 10 + 20 결과인 30 리턴
public static int sum(int num1, int num2) {
return num1 + num2;
}
// public static int sum2(char ch, int num1, int num2) {
// if(ch == '+') {
// return num1 + num2;
// }else if (ch == '-'){
// return num1 - num2;
// }else {
// System.out.println("연산결과가 올바르지 않습니다");
// return 0; //
// }
// }
// 5. 파라미터가 2개 이상인 메서드 정의 연습
// // => 연산자 문자 1개와 정수 2개를 전달받아
// 두 정수에 대한 어떤 연산을 수행한 후 결과값을 리턴하는 메서드 정의
public static int operation(char opr, int num1, int num2) {
int result = 0; //연산결과를 저장할 변수
if(opr == '+') {
result = num1 + num2;
}else if (opr == '-'){
result= num1 - num2;
}else {
// 잘못된 연산자가 입력되었을 경우
// // 오류 메세지 출력 후 0 리턴(가정)
System.out.println("연산결과가 올바르지 않습니다");
}
return result;
// 주의! 변수 값을 리턴하는 경우 반드시 변수값 초기화 필수!
}
// public static int operation(char opr, int num1, int num2) {
// 연산자 문자(char 타입) 판별(== 사용)
// if(opr == '+') { // 덧셈
// return num1 + num2;
// } else if(opr == '-') {
// return num1 - num2;
// } else {
// // 잘못된 연산자가 입력되었을 경우
// // 오류 메세지 출력 후 0 리턴(가정)
// System.out.println("연산자가 올바르지 않습니다!");
// return 0;
// }
}
/*
두 정수의 합 = 30
==============================
연산결과 = 30
연산 결과 = -10
연산결과가 올바르지 않습니다
연산 결과 = 0
*/
반응형
'JAVA' 카테고리의 다른 글
[Java] Class 연습 (0) | 2021.10.28 |
---|---|
[Java] Class (0) | 2021.10.28 |
[Java] 배열 테스트 문제 (0) | 2021.10.28 |
[Java] 배열(Array) (0) | 2021.10.26 |
[Java] 반복문 (0) | 2021.10.26 |