본문 바로가기

JAVA

메서드 | 21/11/16

 

코드 작성
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