코드 작성
package method_basic; public class Ex { public static void main(String[] args) { /* * 메서드(Method) * - 객체의 동작을 나타내는 최소 단위 * - 메서드를 정의한 후에는 반드시 호출 되어야만 사용 가능 * => 이 때, 다른 메서드를 호출하는 메서드를 Caller, 호출 당하는 메서드를 Worker(Callee) 라고 함 * - 메서드는 선언부(Header)와 구현부(Body, {}) 로 구분됨 * - main() 메서드도 메서드의 일종 * => JVM 에 의해 자동으로 호출되는 메서드 = 자바 프로그램의 시작점 * - 메서드를 호출할 때 전달하는 데이터를 전달인자(Argument) 라고 하며 * 메서드가 이 값을 전달받기 위해 선언하는 변수를 매개변수(Parameter)라고 함 * => 전달인자는 복수개를 전달할 수 있으며, 이 때, 매개변수 갯수도 일치해야함 * - 메서드 수행이 끝날 때 메서드를 호출한 곳(Caller)으로 전달할(= 되돌려 줄) 데이터를 리턴값이라고 함 * => 리턴값은 한 번에 하나의 데이터만 리턴 가능함(= 복수개 데이터 리턴 불가) * => return 문은 반드시 메서드 내에서 어떠한 경우에도 실행될 수 있어야 한다! * (즉, 모든 경우에 수에 대해 return 문을 실행되도록 코드를 작성해야한다!) * =============================================================================== * < 메서드 정의 방법(형태)에 따른 분류 > * 1. 매개변수가 없고, 리턴값도 없는 메서드 * 2. 매개변수는 없고, 리턴값만 있는 메서드 * 3. 매개변수만 있고, 리턴값은 없는 메서드 * 4. 매개변수도 있고, 리턴값도 있는 메서드 * --------------------------------------- * 추가5. 매개변수가 복수개인 메서드(리턴값은 무관) * * < 메서드 정의 기본 문법 > * [제한자] 리턴타입 메서드명([매개변수...]) { * // 메서드가 호출되었을 때 실행할 코드들... * // [return [값];] * } */ // 1. 매개변수가 없고, 리턴값도 없는 메서드 호출 // => 정의된 메서드 이름과 동일한 이름을 사용하여 호출 // => 매개변수가 없으므로, 메서드 호출 시 소괄호() 안에 아무 데이터도 전달하지 않음 System.out.println("동생아! 불 좀 꺼라!"); sister_1(); // sister_1() 메서드 호출 => 코드 흐름(제어)이 메서드쪽으로 변경됨(제어권이 넘어감) System.out.println("동생이 불을 껐다!"); System.out.println("---------------------"); // 2. 매개변수는 없고, 리턴값만 있는 메서드 호출 // => 매개변수가 없으므로, 메서드 호출 시 소괄호() 안에 아무 데이터도 전달하지 않음 System.out.println("동생아! 물 좀 떠온나!"); // sister_2(); // sister_2() 메서드 호출 // => 주의! 리턴값이 있을 경우 메서드 호출 코드 앞에 변수 선언을 통해 리턴값을 저장하거나 // 출력문 등을 통해 사용하지 않을 경우 리턴값은 버려짐 // 1) 리턴값을 변수에 저장하는 경우 // String result = "물"; // String result = sister_2(); // 리턴값인 "물" 이라는 문자열을 리턴받아 변수 result 에 저장 // System.out.println("동생이 가져다 준 것 : " + result); // 리턴 데이터인 "물" 이 출력됨 // 2) 리턴값을 출력문에서 바로 사용하는 경우 // => 변수에 저장 후 출력 과정 대신 출력문 내에서 리턴값을 전달받아 즉시 출력 System.out.println("동생이 가져다 준 것 : " + sister_2()); // => System.out.println("동생이 가져다 준 것 : " + "물"); 과 동일한 코드가 됨 System.out.println("--------------------------------"); // 3. 매개변수만 있고, 리턴값은 없는 메서드 호출 // => 매개변수(int money)가 있으므로 메서드 호출 시 소괄호() 내부에 전달할 데이터(정수) 지정 System.out.println("동생아! 200원 줄테니 과자 사먹어라!"); sister_3(200); // 메서드 호출 시 정수 200을 전달 => 메서드 내의 매개변수 int money 에 저장됨 System.out.println("---------------------------------"); // 4. 매개변수도 있고, 리턴값도 있는 메서드 호출 // => 1000원을 전달하므로 매개변수(int money)가 필요하며, 메서드 호출 시 소괄호 내부에 정수 1개 전달 // => 리턴값이 있으므로, 메서드 호출 코드를 변수에 대입하거나 출력문에서 호출해야함 System.out.println("동생아! 1000원 줄테니 쿠쿠다스 좀 사온나!"); int money = 1000; String resultSnack = sister_4(money); System.out.println("동생이 사다준 것 : " + resultSnack); System.out.println("--------------------------------"); // 추가5. 매개변수가 복수개인 메서드(리턴값은 무관) 호출 System.out.println("동생아! 쿠쿠다스랑 500원 줄테니 초코파이로 바꿔온나!"); resultSnack = sister_5(resultSnack, 500); // 메서드 정의 시 매개변수 순서는 반드시 String, int 여야한다! System.out.println("동생이 바꿔다준 것 : " + resultSnack); } // main() 메서드 끝 // 추가5. 매개변수가 복수개인 메서드(리턴값은 무관) 정의 public static String sister_5(String snack, int money) { System.out.println("동생 : 오빠가 준 과자 = " + snack); System.out.println("동생 : 오빠가 준 돈 = " + money + "원"); money -= 500; snack = "초코파이"; System.out.println("동생 : " + snack + "(으)로 바꿨다!"); return snack; } // ---------------- 메서드 정의 ----------------- // < 메서드 정의 기본 문법 > // [제한자] 리턴타입 메서드명([매개변수...]) { // // 메서드가 호출되었을 때 실행할 코드들... // [return [값];] // } // ----------------------------------------------- // 1. 매개변수가 없고, 리턴값도 없는 메서드 정의 // => 리턴값이 없으므로 메서드 선언부 리턴타입 자리에 void 타입 명시(생략 불가) // => 매개변수가 없으므로, 메서드 선언부 소괄호() 안에 아무것도 기술하지 않음 public static void sister_1() { System.out.println("동생 : 오빠가 불을 끄라고 시켜서 불을 껐다!"); } // sister_1() 메서드 종료 => 코드 흐름(제어)이 호출한 곳(sister_1() 코드 부분)으로 되돌아 감 // ------------------------------------------------------ // 2. 매개변수는 없고, 리턴값만 있는 메서드 정의 // => 리턴값이 있으므로, 리턴할 데이터의 데이터타입을 리턴타입 부분에 기술 // 만약, 문자열 데이터를 리턴 시 String, 정수 데이터 리턴 시 int 타입을 기술 // 리턴타입을 명시한 상태에서 아무 데이터도 리턴하지 않으면 오류 발생! // (This method must return a result of type XXX => XXX 타입 데이터를 반드시 리턴해라!) // => 매개변수가 없으므로, 메서드 선언부 소괄호() 안에 아무것도 기술하지 않음 public static String sister_2() { System.out.println("동생 : 오빠가 물 떠오라고 시켰다!"); // 메서드 선언부에서 리턴타입을 명시했을 경우 반드시 return 문 뒤에 리턴할 데이터(리턴값)를 기술해야함! // => 리턴할 데이터는 리터럴 또는 변수 모두 지정 가능 // return "물"; // String 타입 리터럴을 직접 리턴할 경우 // 리턴할 데이터를 변수에 저장 후 리턴할 경우 String data = "물"; return data; // => return 문을 만나면 return 문 위치에서 즉시 return 문 뒤의 데이터를 가지고 호출한 곳으로 되돌아 감 } // ------------------------------------------------------ // 3. 매개변수만 있고, 리턴값은 없는 메서드 정의 // => 리턴값이 없으므로 메서드 선언부 리턴타입 자리에 void 타입 명시(생략 불가) // => 전달인자(데이터)가 있으므로 매개변수 부분에 데이터를 전달받아 저장할 변수 선언 // 주의! 전달되는 데이터와 일치하는 데이터타입의 변수 선언 필수! public static void sister_3(int money) { // 전달받은 전달인자(데이터, 200) 가 매개변수 money 에 저장되고 // 저장된 데이터는 메서드 내에서 자유롭게 사용 가능함 // => 매개변수에 전달되는 값 x 는 int money = x 코드와 동일한 효과를 가짐(int money = 200 과 동일) System.out.println("동생 : 오빠가 과자 사먹으라고 " + money + " 원을 줬다!"); money -= 200; System.out.println("동생 : 새우깡 사먹고 " + money + "원이 남았다!"); // 리턴타입이 void 이므로 return 문을 생략 } // ------------------------------------------------------ // 4. 매개변수도 있고, 리턴값도 있는 메서드 호출 // => 리턴값이 있으므로, 리턴할 데이터의 데이터타입을 리턴타입 부분에 기술 // (리턴할 데이터가 문자열이므로 리턴타입에 String 타입 명시) // => 전달인자(데이터)가 있으므로 매개변수 부분에 데이터를 전달받아 저장할 변수 선언 // (외부로부터 호출 시 정수 1개를 전달받으므로 정수형 변수 1개 선언 필요) public static String sister_4(int money) { System.out.println("동생 : 오빠가 과자 사오라고 " + money + " 원을 줬다!"); money -= 800; System.out.println("동생 : 쿠쿠다스 사고 " + money + "원이 남았다!"); String snack = "쿠쿠다스"; // snack 변수에 저장된 문자열을 리턴 return snack; } } // Ex 클래스 끝
메서드에 대한 설명과 예시!
출력 결과
동생아! 불 좀 꺼라!
동생 : 오빠가 불을 끄라고 시켜서 불을 껐다!
동생이 불을 껐다!
---------------------
동생아! 물 좀 떠온나!
동생 : 오빠가 물 떠오라고 시켰다!
동생이 가져다 준 것 : 물
--------------------------------
동생아! 200원 줄테니 과자 사먹어라!
동생 : 오빠가 과자 사먹으라고 200 원을 줬다!
동생 : 새우깡 사먹고 0원이 남았다!
---------------------------------
동생아! 1000원 줄테니 쿠쿠다스 좀 사온나!
동생 : 오빠가 과자 사오라고 1000 원을 줬다!
동생 : 쿠쿠다스 사고 200원이 남았다!
동생이 사다준 것 : 쿠쿠다스
--------------------------------
동생아! 쿠쿠다스랑 500원 줄테니 초코파이로 바꿔온나!
동생 : 오빠가 준 과자 = 쿠쿠다스
동생 : 오빠가 준 돈 = 500원
동생 : 초코파이(으)로 바꿨다!
동생이 바꿔다준 것 : 초코파이
나의 소감
동생이 없어서 크게 공감은 못했던....ㅎㅎ
메소드 쫌 복잡하네 복습하자 복습!
'JAVA' 카테고리의 다른 글
클래스 | 21/11/18 (0) | 2022.01.06 |
---|---|
메서드 연습 | 21/11/16 (0) | 2022.01.06 |
do ~ while문 | 21/11/15 (0) | 2022.01.06 |
for문 활용 | 21/11/15 (0) | 2022.01.06 |
break문 VS continue(feat. label) | 21/11/15 (0) | 2022.01.06 |