메서드

Mia Lee·2021년 11월 16일
0

JAVA

목록 보기
36/98
package method_basic;

public class Ex {

	public static void main(String[] args) {
		/*
		 * 메서드(Method)
		 * - 객체의 동작을 나타내는 최소 단위
		 * - 메서드를 정의한 후에는 반드시 호출 되어야만 사용 가능
		 *   => 이 때, 다른 메서드를 호출하는 메서드를 Caller, 호출 당하는 메서드를 Worker(Callee) 라고 함
		 * - 메서드는 선언부(Header)와 구현부(Body, {}) 로 구분됨
		 * - main() 메서드도 메서드의 일종
		 *   => JVM 에 의해 자동으로 호출되는 메서드 = 자바 프로그램의 시작점
		 * - 메서드를 호출할 때 전달하는 데이터를 전달인자(Argument) 라고 하며
		 *   메서드가 이 값을 전달받기 위해 선언하는 변수를 매개변수(Parameter)라고 함
		 * - 메서드 수행이 끝날 때 메서드를 호출한 곳(Caller)으로 전달할(= 되돌려 줄) 데이터를 리턴값이라고 함
		 * 
		 * ===============================================================================
		 * < 메서드 정의 방법(형태)에 따른 분류 >
		 * 1. 매개변수가 없고, 리턴값도 없는 메서드
		 * 2. 매개변수는 없고, 리턴값만 있는 메서드
		 * 3. 매개변수만 있고, 리턴값은 없는 메서드
		 * 4. 매개변수도 있고, 리턴값도 있는 메서드
		 * 
		 * < 메서드 정의 기본 문법 >
		 * [제한자] 리턴타입 메서드명([매개변수...]) {
		 * 		// 메서드가 호출되었을 때 실행할 코드들...
		 * 		// [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 에 저장됨
		
	} // main() 메서드 끝
	
	// ---------------- 메서드 정의 -----------------
	// < 메서드 정의 기본 문법 >
	// [제한자] 리턴타입 메서드명([매개변수...]) {
	// 		// 메서드가 호출되었을 때 실행할 코드들...
	//      [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 문을 생략
	}
	

} // Ex 클래스 끝













0개의 댓글