메소드 - 형식, 기본자료형, 참조자료형, 반환형
메서드(method)?
1. C언어에서의 함수(function)와 같음.
2. 기능을 정의하는 단위(예 : 덧셈 기능 등등)
3. 하나의 기능만을 정의하는 것이 좋음.
4. 자주 반복되는 내용을 정의해 놓고, 필요 시 호출하여 사용함.
형식) [접근제한] 반환형 메서드이름(매개변수 혹은 인자) {
메서드 호출 시 실행될 문장;
}
- 접근제한 : public > protected > default > private
(클래스, 메서드, 변수 앞에 사용 됨)
- public : 누군 다, 아무나 접근 가능.
- protected : 같은 패키지에서 접근 가능. 다른 패키지는 상속 관계는 접근 가능.
- default : 같은 패키지에서만 접근 가능. 상속 관계라도 접근 안됨.
- private : 외부에서 접근 불가.
- 반환형 : - 메서드를 실행하고 특정 타입의 결과를 반환해주겠다고 선언하는 것(리턴타입)
- 메서드에서 실행된 결과값을 돌려주는 자료형으로 생략이 불가능함.
- 해당 메서드가 어떤 동작이나 기능을 실행한 후 결과를 알려주는 자료형.
- 메서드를 호출한 곳으로 결과를 되돌려줄 때 사용하는 자료형.
- 만약 결과를 되돌려줄 필요가 없는 경우에는 void라는 키워드를 작성함.
- 반환형이 void인 경우를 제외하고 결과를 되돌려주어야 할 때는 메서드 명령문 맨 마지막에 return이라는 키워드를 작성 후, 앞에서 선언한 반환형과 같은 자료형으로 결과를 되돌려준다.
- 메서드 이름 : - 식별자, 소문자로 시작, 두개의 단어가 결합된 경우 두번째 단어의 첫 글자를 대문자로 작성하는 것이 관례임.
- 매개변수 : - 외부에서 값을 넘겨 받는 변수. 생략 가능.
- 메서드 호출 시 전달되는 값의 저장을 위한 용도로 사용이 됨.
- 메서드 호출 시 전달되는 값의 자료형과 매개변수의 자료형은 반드시 일치.
- 메서드 실행문 : - 해당 메서드가 호출된 경우에만 실행이 됨.
* 매개변수가 있는 메서드 정의
형식) [접근제한] 반환형 메서드이름(type 변수1, type 변수2...) {
메서드 호출 시 실행 문장;
}
* 실인수와 가인수
- 실인수 : 매개변수에 전달할 실제 값 ==> 메서드를 호출할 때 사용함.
- 가인수 : 매개변수 ==> 메서드에 정의.
실인수와 가인수는 반드시 type, 순서, 갯수가 일치해야 함(중요함).
* 메서드 호출 방식 - 2가지
1. call by value
- 값을 전달하여 호출하는 방식
- 매개변수가 기본자료형(int, double) 사용.
2. call by reference
- 주소값을 전달하여 호출하는 방식.
- 매개변수가 참조자료형(배열명, 클래스명) 사용.
기본예제) 기본형식
public class Ex01 {
public static void add() {
System.out.println("add() 메서드 호출~~~~~");
System.out.println("20 + 10 >>> " + (20 + 10));
}
public static void input() {
Scanner sc = new Scanner(System.in);
int[] arr = new int[3];
for(int i=0; i<arr.length; i++) {
System.out.print((i+1)+"번째 정수 입력 >>> ");
arr[i] = sc.nextInt();
}
for(int i=0; i<arr.length; i++) {
System.out.println("arr["+i+"] >>> "+arr[i]);
}
sc.close();
}
public static void main(String[] args) {
System.out.println("프로그램 시작");
// 메서드를 호출하자.
add();
System.out.println("프로그램 종료");
}
}
예제1) 키보드로부터 정수를 입력받아 해당 정수까지의 합을 구하는 메소드를 작성하여 호출하라.
public class Ex02 {
public static void sum() {
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
int su = sc.nextInt();
int sum = 0;
for(int i=1; i<=su; i++) {
sum += i;
}
System.out.println("1~" + su + "까지의 합 >>> " + sum);
sc.close();
}
public static void main(String[] args) {
System.out.println("프로그램 시작");
// 메서드 호출
sum();
System.out.println("프로그램 종료");
}
}
예제2) 시작 정수와 마지막 정수를 키보드로 입력 받아 시작 정수~마지막 정수까지의 합을 구하는 메소드를 작성하여 호출
public class Ex03 {
public static void prn() {
System.out.println("prn() 메소드가 호출되었습니다.");
}
public static void total(int num) {
int sum = 0;
for(int i=1; i<=num; i++) {
sum += i;
}
System.out.println("1부터" + num + "까지의 합 >>> " + sum);
}
public static void total(int start, int end) {
int sum = 0;
for(int i=start; i<=end; i++) {
sum += i;
}
System.out.println(start +"부터 " + end + "까지의 합 >>> " + sum);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("프로그램 시작");
// 일반 메소드
prn();
System.out.println();
// 매개변수 1개 메소드
System.out.print("정수 입력 : ");
total(sc.nextInt());
// 매개변수 2개 메소드
System.out.print("시작 숫자 입력 : ");
int start = sc.nextInt();
System.out.print("마지막 숫자 입력 : ");
int end = sc.nextInt();
total(start, end);
System.out.println("프로그램 종료");
}
}
예제3) 기본자료형 메소드(call by value)
public class Ex05 {
public static void call(int num) {
System.out.println("call() 메서드 호출....");
num = 100; // 값을 변경
}
public static void main(String[] args) {
// 1. call by value 방식
int num = 200;
System.out.println("메서드 호출 전.....");
System.out.println("num >>> " + num);
call(num);
System.out.println("메서드 호출 후.....");
System.out.println("num >>> " + num);
}
}
예제4) 참조자료형 메소드(call by reference)
public class Ex06 {
public static void change(int[] array) {
System.out.println(array);
array[0] = 100;
array[1] = 200;
array[2] = 300;
}
public static void main(String[] args) {
int[] arr = new int[3];
arr[0] = 10; arr[1] = 20; arr[2] = 30;
System.out.println("change() 메서드 호출 전.....");
System.out.println(arr);
for(int i=0; i<arr.length; i++) {
System.out.println("arr["+i+"] >>> " + arr[i]);
}
System.out.println();
change(arr);
System.out.println("change() 메서드 호출 후.....");
for(int i=0; i<arr.length; i++) {
System.out.println("arr["+i+"] >>> " + arr[i]);
}
}
}
예제5) 매개변수와 리턴타입이 존재하는 메소드(반환형)
public class Ex07 {
// 숫자가 반환되는 경우
public static int method1() {
return 155;
}
// 변수가 반환되는 경우
public static int method2(int su1, int su2) {
int sum = (su1 * 2) + (su2 * 2);
return sum;
}
public static int method3(int a1, int a2) {
return a1 + a2;
}
public static String method4() {
return "홍길동";
}
public static String method5(String str1, String str2) {
String result = str1 + str2;
return result;
}
public static String method6(String s1, String s2) {
return s1 + s2;
}
public static void main(String[] args) {
System.out.println("프로그램 시작");
//int num = method1();
System.out.println("method1() 메서드 호출 후 반환된 값 : " + method1());
System.out.println("method2() 메서드 호출 후 반환된 값 : " + method2(145,200));
System.out.println("method3() 메서드 호출 후 반환된 값 : " + method3(132,55));
System.out.println("method4() 메서드 호출 후 반환된 값 : " + method4());
System.out.println("method5() 메서드 호출 후 반환된 값 : " + method5("대한","민국"));
System.out.println("method6() 메서드 호출 후 반환된 값 : " + method6("유","관순"));
System.out.println("프로그램 종료");
}
}