객체의 동작을 나타내는 최소 단위
메서드 정의 후 반드시 호출해야만 사용 가능
-> 호출하는 메서드: Caller
-> 호출 당하는 메서드: Worker
메서드는 선언부(Header)와 구현부(body)로 구분
main()
메서드도 메서드의 일종
-> JVM에 의해 자동으로 호출되는 메서드
= 프로그램의 시작점
메서드를 호출할 때 외부에서 메서드로 전달하는 값을 전달인자(Argument),
이 값을 메서드에서 전달받기 위해 선언하는 변수를 매개변수(Parameter)라고 함
메서드 호출 시 전달하는 값이 없을 수도 있으며, 복수 개일 수도 있다
메서드를 호출하면 프로그램의 흐름이 메서드 내부로 이동하며,
수행이 끝난 후 호출한 곳으로 흐름이 되돌아간다
리턴값: 메서드 수행이 끝날 때 호출한 곳으로 전달할 데이터
리턴값은 있을 수도 있고, 없을 수도 있다
단, 리턴값은 무조건 한 번에 하나만 리턴 가능
< 기본 문법 >
[제한자] 리턴타입 메서드 명([매개변수]) {
// 메서드 호출 시 실행할 코드들...
[return [데이터];]
}
-> 리턴값이 없을 경우 리턴 타입은 void로 명시
-> 메서드명도 변수명과 같은 식별자 작성 규칙을 따름
메서드 호출 시 메서드 이름을 정확하게 명시
전달인자가 없기 때문에 메서드 호출 시 () 안에 아무 데이터도 명시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( )
소괄호 안에 아무것도 적지 않음
전달인자가 없기 때문에 메서드 호출 시 () 안에 아무 데이터도 명시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; // 변수값 리턴
}
}
📌 출력
동생아, 물 좀 떠와
동생 : 언니가 물을 떠오라고 시켰다
동생이 떠다준 것 : 물
리턴값이 없으므로 리턴타입은 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원 남았다
잔돈이 남았으니 과자를 더 사 먹자!
리턴값이 있으므로 리턴타입은 메서드에서 리턴할 데이터의 데이터타입을 기술
전달인자가 있으므로 전달받은 데이터의 타입과 일치하는 매개변수 선언 필수
⭐ 입력
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원이 남았다
동생이 사다준 것 : 새우깡
⭐ 입력
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);
}
}
동생아, 연필과 공책을 줄테니 공부해
언니가 준 첫 번째 아이템 : 연필
언니가 준 두 번째 아이템 : 공책