[자바] 메서드

Gammi·2022년 9월 1일
0

JAVA

목록 보기
2/35
post-thumbnail

📚 메서드


  • 객체의 동작을 나타내는 최소 단위

  • 메서드 정의 후 반드시 호출해야만 사용 가능

    -> 호출하는 메서드: Caller

    -> 호출 당하는 메서드: Worker

  • 메서드는 선언부(Header)와 구현부(body)로 구분


  • main()메서드도 메서드의 일종

    -> JVM에 의해 자동으로 호출되는 메서드

    = 프로그램의 시작점


  • 메서드를 호출할 때 외부에서 메서드로 전달하는 값을 전달인자(Argument),
    이 값을 메서드에서 전달받기 위해 선언하는 변수를 매개변수(Parameter)라고 함

  • 메서드 호출 시 전달하는 값이 없을 수도 있으며, 복수 개일 수도 있다

  • 메서드를 호출하면 프로그램의 흐름이 메서드 내부로 이동하며,
    수행이 끝난 후 호출한 곳으로 흐름이 되돌아간다


  • 리턴값: 메서드 수행이 끝날 때 호출한 곳으로 전달할 데이터

    • 리턴값은 있을 수도 있고, 없을 수도 있다

    • 단, 리턴값은 무조건 한 번에 하나만 리턴 가능


< 기본 문법 >

[제한자] 리턴타입 메서드 명([매개변수]) {
	// 메서드 호출 시 실행할 코드들...
    [return [데이터];]
}

-> 리턴값이 없을 경우 리턴 타입은 void로 명시

-> 메서드명도 변수명과 같은 식별자 작성 규칙을 따름





📕 메서드 형태에 따른 분류


1. 전달인자가 없고, 리턴 값도 없는 메서드


  • 메서드 호출 시 메서드 이름을 정확하게 명시

  • 전달인자가 없기 때문에 메서드 호출 시 () 안에 아무 데이터도 명시X

  • 리턴값이 없으므로 메서드 호출 결과를 저장할 변수 선언하거나
    출력문 등 내부에서 메서드 호출이 불가능하며, 단독으로 호출해야 함

⭐ 입력

public class A {
	public static void main(String[] args) {
		System.out.println("동생아, 불 좀 꺼!");
   	sister_1(); // 정의된 sister_1()메서드 호출
   	System.out.println("동생이 불을 껐다");
	}
   public static sister_1() {
   	System.out.println("동생 : 언니가 불을 끄라고 해서 불을 껐다");
   }
}

📌 출력

동생아, 불 좀 꺼라
동생 : 언니가 불을 끄라고 해서 불을 껐다
동생이 불을 껐다

🔗 참고

< Worker 역할의 메서드 정의 위치 >

  • 리턴값이 없으므로 리턴타입은 void라는 특수한 데이터타입 명시
    -> void 타입은 메서드 선언부에만 사용 가능하며, 리턴값이 없다는 의미
  • 전달인자가 없으므로 매개변수는 아무것도 선언하지 않음
    -> sister_1( ) 소괄호 안에 아무것도 적지 않음





2. 전달인자는 없고, 리턴값만 있는 메서드


  • 전달인자가 없기 때문에 메서드 호출 시 () 안에 아무 데이터도 명시X

  • 리턴값이 있기 때문에 리턴타입은 메서드에서 리턴할 데이터의 데이터타입을 기술

  • 리턴타입을 void가 아닌 다른 타입으로 기술한 상태에서
    아무 값도 리턴하지 않을 경우 오류 발생

  • 전달인자가 없으므로 매개변수는 아무것도 선언하지 않음


⭐ 입력

public class B {
 	public static void main(String[] args) {
 		System.out.println("동생아, 물 좀 떠와");
    	String result = sister_2(); // 메서드 호출 후 리턴값을 변수에 저장
    	System.out.println("동생이 떠다준 것 : " + result);
	}
    public static String sister_2() {
    	System.out.println("동생 : 언니가 물을 떠오라고 시켰다");
        String result = "물"; // 리턴할 데이터 "물"을 변수에 저장
        return result; // 변수값 리턴
    }
}

📌 출력

동생아, 물 좀 떠와
동생 : 언니가 물을 떠오라고 시켰다
동생이 떠다준 것 : 물





3. 전달인자만 있고, 리턴값은 없는 메서드


  • 리턴값이 없으므로 리턴타입은 void 명시

  • 전달인자가 있기 때문에 전달받은 데이터타입과 일치하는 매개변수 선언 필수


⭐ 입력

public class C {
	public static void main(String[] args) {
		System.out.println("동생아, 300원 줄테니 과자 사 먹어");
		sister_3(300); 
     // sister_3(500); 두 가지 경우로 살펴봄
	}
	public static void sister_3(int money) {
		System.out.println("동생 : 언니가 과자 사 먹으라고 " + money + "원 줬다");
		money -=200;
		System.out.println("동생: 새우깡 사 먹고 " + money + "원 남았다");
		if(money<200) {
			System.out.println("잔돈이 200원 미만이기 때문에 메서드 종료!");
		} else {
			System.out.println("잔돈이 남았으니 과자를 더 사 먹자!");
		}
	}
}

📌 출력
동생아, 300원 줄테니 과자 사 먹어
동생 : 언니가 과자 사 먹으러고 300원 줬다
동생: 새우깡 사 먹고 100원 남았다
잔돈이 200원 미만이기 때문에 메서드 종료!
-------------------------------------------------
동생아, 500원 줄테니 과자 사 먹어
동생: 언니가 과자 사 먹으라고 500원 줬다
동생: 새우깡 사 먹고 300원 남았다
잔돈이 남았으니 과자를 더 사 먹자!





4. 전달인자도 있고, 리턴값도 있는 메서드


  • 리턴값이 있으므로 리턴타입은 메서드에서 리턴할 데이터의 데이터타입을 기술

  • 전달인자가 있으므로 전달받은 데이터의 타입과 일치하는 매개변수 선언 필수


⭐ 입력

public class Blog {
	public static void main(String[] args) {
		System.out.println("동생아, 1000원 줄테니까 새우깡 사와");
		System.out.println("동생이 사다준 것 : " + sister_4(1000));
	}
	public static String sister_4(int money) { 
		System.out.println("동생 : 언니가 새우깡 사오라고 " + money + "원을 줬다");
		money -= 200;
		System.out.println("동생 : 새우깡을 사고 " + money + "원이 남았다");
		return "새우깡";
	}
}

📌 출력
동생아, 1000원 줄테니까 새우깡 사와
동생 : 언니가 새우깡 사오라고 1000원을 줬다
동생 : 새우깡을 사고 800원이 남았다
동생이 사다준 것 : 새우깡





5. 전달인자가 복수 개인 메서드


  • 전달되는 데이터의 순서와 타입에 맞게 메서드의 매개변수 선언

⭐ 입력

public class Blog {
	public static void main(String[] args) {
		System.out.println("동생아, 연필과 공책을 줄테니 공부해");
		sister_5("연필", "공책"); // sister_5() 메서드에 문자열 2개 저장
	}
	public static void sister_5(String item1, String item2) {
		System.out.println("언니가 준 첫 번째 아이템 : " + item1);
		System.out.println("언니가 준 두 번째 아이템 : " + item2);
	}
}

📌 출력
동생아, 연필과 공책을 줄테니 공부해
언니가 준 첫 번째 아이템 : 연필
언니가 준 두 번째 아이템 : 공책
profile
개발자가 되었어요⭐️

0개의 댓글