[자바(Java)] 메소드 (Method)

방용환·2023년 4월 5일
0
post-thumbnail

1. 메소드 (Method)

1. 메소드와 함수

  • 메소드 (Method) : 클래스 내부에 선언된 함수
  • 함수 (Function) : 매개변수로 값을 제공 받아 계산하여 결과를 반환하는 명령의 모임

2. 메소드와 함수의 차이

  1. 메소드
    => 필드(멤버변수)를 이용하여 필요한 기능을 제공하기 위한 명령의 모임임
    => 명령(Statement)은 메소드 내부에서만 작성 가능
    => 클래스로 객체를 생성하여 객체의 메모리 주소를 참조변수에 저장

3. 메소드

반환형 메소드명 (자료형 변수명, 자료형 변수명, ...){
	명령;
    명령;}
  • 반환형 (ReturnType) : 메소드를 호출하여 얻을 수 있는 결과값에 대한 자료형

** void 자료형 (무 반환형) : 메소드를 호출하여 얻을 수 있는 결과값이 없는 경우 사용하는 자료형

  • 매개변수 (Parameter) - 메소드의 () 기호에는 변수를 나열하여 선언
    => 메소드에 작성된 명령을 실행하기 위해 필요한 값을 메소드 호출시 전달받아 저장하기 위한 변수
    => 메소드에 작성된 명령을 실행하기 위한 값이 필요없는 경우 매개변수 생략 가능

2. 메소드 호출 (Method Invoke)

1. 메소드 호출 (Method Invoke)

  • 메소드 호출 (Method Invoke) : 메소드에 작성된 명령들을 실행
  • 객체를 이용하여 메소드를 호출하면 프로그램의 흐름(스레드)이 객체의 메소드로 이동하여 메소드의 명령을 실행하고 메소드가 종료되면 메소드를 호출한 다음 차례의 명령 실행
객체.메소드명 (,, ...);
  • 객체가 저장된 참조변수를 사용하여 객체의 메소드 호출
  • 메소드 호출시 매개변수에 차례대로 값을 전달하여 메소드를 호출
  • 매개변수에 값이 정상적으로 전달되지 않으면 메소드 호출 불가능
  • return 키워드 : 메소드를 강제로 종료하기 위한 키워드
if (조건식) return;
// 메소드의 반환형을 void로 작성

return 반환값;
// 메소드를 종료하면서 반환값(변수 또는 연산식)을 반환하여 메소드를 호출하는 명령에게 제공
// 메소드의 반환형을 반환값의 자료형과 반드시 같도록 작성

2. ... 파라미터

  • 매개변수 생략 기호(...)를 이용하여 매개변수를 작성하면 값을 0개 이상 전달받아 메소드에서 배열처럼 사용 가능
// Method.java

public class Method {
	int sumDot(int... array) {
		int tot = 0;
		for (int num : array) {
			tot += num;
		}
		return tot;
	}
}
// MethodApp.java
public class MethodApp {
	public static void main(String[] args){
    	Method method = new Method();
    
		System.out.println("합계 = " + method.sumDot(10, 20, 30));
		System.out.println("합계 = " + method.sumDot());
		System.out.println("합계 = " + method.sumDot(10, 20));
		System.out.println("합계 = " + method.sumDot(10, 20, 30, 40));
        }
}
// 합계 = 60
// 합계 = 0
// 합계 = 30
// 합계 = 100

3. 여러 메소드 예제

  1. Method.java
// Method.java

public class Method {
	void displayOne() {
		System.out.println("Method 클래스의 displayOne() 메소드 호출");
	}

	void displayTwo() {
		System.out.println("Method 클래스의 displayTwo() 메소드 호출");
	}

	void printOne() {
		int tot = 0;
		for (int i = 1; i <= 100; i++) {
			tot += i;
		}
		System.out.println("1~100 범위의 정수들의 합계  = " + tot);
	}

	void printTwo(int num) {
		// 매개변수에 저장된 값에 대한 검증
		if (num <= 0) {
			System.out.println("[에러]매개변수에는 0보다 큰 값이 저장되어야 됩니다.");
			return;// 메소드 종료
		}

		int tot = 0;
		for (int i = 1; i <= num; i++) {
			tot += i;
		}
		System.out.println("1~" + num + " 범위의 정수들의 합계  = " + tot);
	}

	void printThree(int num1, int num2) {
		
		if (num1 > num2) {
			int temp = num1;
			num1 = num2;
			num2 = temp;
		}

		int tot = 0;
		for (int i = num1; i <= num2; i++) {
			tot += i;
		}
		System.out.println(num1 + "~" + num2 + " 범위의 정수들의 합계  = " + tot);
	}

	int returnTot(int num1, int num2) {
		int tot = 0;
		for (int i = num1; i <= num2; i++) {
			tot += i;
		}

		return tot;
	}

	// 매개변수로 정수값을 전달받아 홀수와 짝수를 구분하여 반환하는 메소드
	// => false 반환 : 홀수, true : 짝수
	boolean isOddEven(int num) {
		if (num % 2 != 0) {
			return false;
		} else {
			return true;
		}
	}

	int[] returnArray() {
		return new int[] { 10, 20, 30, 40, 50 };
	}

	// 매개변수 3개에 전달된 정수값들의 합계를 계산하여 반환하는 메소드
	int sumOne(int num1, int num2, int num3) {
		return num1 + num2 + num3;
	}

	// 매개변수로 배열을 전달받아 배열의 모든 요소값들의 합계를 계산하여 반환하는 메소드
	int sumTwo(int[] array) {
		int tot = 0;
		for (int num : array) {
			tot += num;
		}
		return tot;
	}
}
  1. MethodApp.java
// MethodApp.java

package oop;

// 실행이 목적인 클래스 - main 메소드를 반드시 작성

public class MethodApp {
	public static void main(String[] args) {
		
		// 클래스로 객체를 생성하여 객체의 메모리 주소를 참조변수에 저장
		// => 같은 패키지에 작성된 클래스는 패키지 표현없이 클래스 사용 가능
		// => 참조변수를 사용하여 객체의 필드 또는 메소드 접근 가능
		
		Method method = new Method();

		// 참조변수를 출력할 경우 "자료형@메모리주소" 형식의 문자열을 제공받아 출력
		System.out.println("method = " + method);
		System.out.println("==============================================================");
		
		// 객체를 이용하여 메소드를 호출하면 프로그램의 흐름(스레드)이 객체의 메소드로 이동하여
		// 메소드의 명령을 실행하고 메소드가 종료되면 메소드를 호출한 다음 차례의 명령 실행
		method.displayOne();
		method.displayTwo();
		method.displayOne();
		System.out.println("==============================================================");
		
		method.printOne();
		method.printOne();
		System.out.println("==============================================================");
		
		method.printTwo(50);
		method.printTwo(80);
		method.printTwo(-30);
		System.out.println("==============================================================");
		
		method.printThree(35, 79);
		method.printThree(19, 88);
		method.printThree(67, 12);
		System.out.println("==============================================================");
		
		// 반환값이 존재하는 메소드 호출
		// => 메소드의 반환값을 지속적으로 사용하고자 할 경우 반환값을 변수에 저장
		int result = method.returnTot(30, 70);
		System.out.println("합계(메소드 호출의 반환값) = " + result);
		// 메소드의 반환값을 일시적으로 사용할 경우 반환값을 변수에 미저장
		System.out.println("합계(메소드 호출의 반환값) = " + method.returnTot(20, 80));
		System.out.println("==============================================================");
		
		boolean result1 = method.isOddEven(10);
		if (result1) {
			System.out.println("매개변수로 전달된 값은 [짝수]입니다.");
		} else {
			System.out.println("매개변수로 전달된 값은 [홀수]입니다.");
		}

		// 조건식 대신 메소드의 반환값이 이용하여 명령을 선택 실행
		if (method.isOddEven(9)) {
			System.out.println("매개변수로 전달된 값은 [짝수]입니다.");
		} else {
			System.out.println("매개변수로 전달된 값은 [홀수]입니다.");
		}
		System.out.println("==============================================================");
		
		// 배열의 메모리 주소를 반환하는 메소드를 호출하면 반환된 메모리 주소를 참조변수에 저장
		// => 참조변수에 저장된 메모리 주소를 사용하여 배열 참조 가능
		int[] array = method.returnArray();
		for (int num : array) {
			System.out.print(num + " ");
		}
		System.out.println();
		System.out.println("==============================================================");
		
		System.out.println("합계 = " + method.sumOne(10, 20, 30));
		// 매개변수에 값이 정상적으로 전달되지 않을 경우 메소드 호출에 대한 에러 발생
		// System.out.println("합계 = "+method.sumOne());
		// System.out.println("합계 = "+method.sumOne(10,20));
		// System.out.println("합계 = "+method.sumOne(10,20,30,40));
		System.out.println("==============================================================");
		
		// System.out.println("합계 = "+method.sumTwo(10, 20, 30));//에러 발생
		// 매개변수의 배열의 메모리 주소를 전달하여 메소드 호출
		System.out.println("합계 = " + method.sumTwo(new int[] { 10, 20, 30 }));
		System.out.println("합계 = " + method.sumTwo(new int[] {}));
		System.out.println("합계 = " + method.sumTwo(new int[] { 10, 20 }));
		System.out.println("합계 = " + method.sumTwo(new int[] { 10, 20, 30, 40 }));
		System.out.println("==============================================================");
	}
}

// method = oop.Method@3b6eb2ec
//===========================================================
// Method 클래스의 displayOne() 메소드 호출
// Method 클래스의 displayTwo() 메소드 호출
// Method 클래스의 displayOne() 메소드 호출
// =============================================================
// 1~100 범위의 정수들의 합계  = 5050
// 1~100 범위의 정수들의 합계  = 5050
// =============================================================
// 1~50 범위의 정수들의 합계  = 1275
// 1~80 범위의 정수들의 합계  = 3240
// [에러]매개변수에는 0보다 큰 값이 저장되어야 됩니다.
// =============================================================
// 35~79 범위의 정수들의 합계  = 2565
// 19~88 범위의 정수들의 합계  = 3745
// 12~67 범위의 정수들의 합계  = 2212
// =============================================================
// 합계(메소드 호출의 반환값) = 2050
// 합계(메소드 호출의 반환값) = 3050
// =============================================================
// 매개변수로 전달된 값은 [짝수]입니다.
// 매개변수로 전달된 값은 [홀수]입니다.
// =============================================================
// 10 20 30 40 50 
// =============================================================
// 합계 = 60
// ============================================================
// 합계 = 60
// 합계 = 0
// 합계 = 30
// 합계 = 100
// ============================================================

0개의 댓글