Backend/Java

[Java]OOP - 메소드(Method)

sukii 2023. 12. 27. 18:39
반응형

메소드(Method) : 클래스 내부에 선언한 함수 - 멤버함수
=> 필드(멤버변수)를 사용하여 필요한 기능을 제공하기 위한 명령의 모임
=> 메소드 내부에서만 Java 명령을 작성하여 실행(외부에는 절대 작성할 수 없음!)

*함수(Function) : 매개변수로 값을 제공받아 연산 처리하여 반환하는 명령의 모임

 

🔘메소드 선언 방법
형식) 반환형 메소드명(자료형 변수명, 자료형 변수명...) {
    명령;
    ...
 }
🔸 메소드를 호출(Invoke)해야 메소드 내부에 작성된 명령 실행 - 기능 구현

🔸 반환형(ReturnType) : 메소드를 호출하여 얻을 수 있는 결과값에 대한 자료형

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

 

🔸 메소드명은 식별자로 카멜 표기법을 사용하여 작성

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

🔘 메소드 호출(Invoke) : 메소드에 작성된 명령을 실행하여 필요한 기능 구현
형식) 객체.메소드명(값, 값, ...);
🔸 참조변수로 객체를 참조하여 객체의 메소드 호출
🔸 메소드 호출시 매개변수에 차례대로 값을 전달하여 저장해야만 메소드 호출
🔸 매개변수에 값이 정상적으로 전달되지 않은 경우 메소드 호출이 불가능 - 에러 발생

🔶return: 메소드를 강제로 종료하여 프로그램의 흐름(스레드)를 메소드를 호출한 위치로 되돌리는 키워드
     => 일반적으로 if 구문과 같이 사용 
형식) if(조건식) return;

=> 메소드의 반환형을 [void]로 작성

 

🔶 return 키워드를 사용하여 메소드의 처리 결과값을 메소드를 호출한 위치로 반환하는 기능을 제공
형식) return 반환값;

=> 메소드의 반환형은 반환되는 값의 자료형으로 작성

 

실습예제👩‍💻

package oop;

//객체 생성을 목적으로 작성된 클래스
public class Method {
	// 기본생성자(default constructor)가 만들어져 있음.

	void displayOne() {
		System.out.println("Method 클래스에 선언된 displayOne() 메소드 호출");
	}

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

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

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

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

	void printThree(int start, int end) {
		if (start > end) {
			int temp = start;
			start = end;
			end = temp;
		}

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

	int returnTotal(int start, int end) {
		if (start > end) {
			int temp = start;
			start = end;
			end = temp;
		}

		int total = 0;
		for (int i = start; i <= end; i++) {
			total += i;
		}
		return total;
	}

	// 매개 변수로 전달받은 정수값을 홀수와 짝수로 구분하여 반환하는 메소드
	// => false 반환: 홀수, true 반환 : 짝수
	boolean isOddEven(int number){// is로 시작하는 메소드는 '대체로' boolean 반환함(100%는 아님~ )
		if(number % 2!= 0){
			return false;
		} else {
			return true;
		}	
	}
	
	
	//배열을 반환하는 메소드
	int[] returnArray() {
		/*
		int[] array={10, 20, 30, 40, 50};
		return array;//참조변수에 저장된 배열의 메모리 주소 반환 - 배열 반환
		*/
		
		//배열을 참조변수에 저장하지 않고 배열을 생성하여 반환
		//return {10, 20, 30, 40, 50};//엄밀히 말하면 배열이 아니고 상수임(=자료형 아님)
		//=> heap 영역이 아닌 메소드 영역에 만들어짐, 에러가 발생
		return new int[]{10, 20, 30, 40, 50};
	}
	
	
	
	//매개변수로 배열을 전달받아 모든 배열 요소값의 합계를 계산하여 반환하는 메소드
	int sumOne(int[] array) {//배열의 메모리 주소를 전달받아 매개변수(참조변수)에 저장
		int total=0;
		for(int su : array) {
			total += su;
		}
		return total;
		
	}
	//매개변수 생략 기호(...)를 이용하여  매개변수를 작성하여
	//0개 이상의 값을 전달받아 합계를 계산하여 반환하는 메소드'
	// =>0개 이상의 값을 전달받아 저장한 매개변수는 메소드 내부에서는 배열과 동일하게 처리
	int sumTwo(int... number) {
		int total=0;
		for(int su : number) {
			total += su;
		}
		return total;
	}
}

   

 

위 Method 클래스에 작성된 메서드들을 실행하기 위해 작성된 클래스⬇️

(*검정색 배경 부분이 콘솔에 출력된 실행 결과)

package oop;

//실행의 목적으로 작성된 클래스
public class MethodApp {
	//Main Method
	//JVM(Java Virtual Machine)에 의해 자동으로 호출되는 메소드
	// => 프로그램이 시작되는 위치
	public static void main(String[] args) {
		//클래스로 객체를 생성하여 객체의 메모리 주소를 참조변수에 저장
		// => 같은 패키지에 작성된 클래스는 패키지를 표현하지 않아도 클래스 사용 가능
		Method method=new Method();
		
		//참조변수를 출력할 경우 "자료형@메모리주소" 형식의 문자열을 제공받아 출력
		System.out.println("method = "+method);
		System.out.println("=======================================================");

method = oop.Method@2f92e0f4

=======================================================

		//참조변수에 저장된 메모리 주소로 객체를 참조하여 객체의 메소드 호출
		// => 메소드를 호출하면 프로그램의 흐름(스레드)이 객체의 메소드로 이동하여 메소드의
		//명령을 실행하고 메소드가 종료되면 다시 되돌아와 다음 명령을 실행
		method.displayOne();
		method.displayTwo();
		method.displayOne();
		System.out.println("=======================================================");
		method.printOne();
		System.out.println("=======================================================");

Method 클래스에 선언된 displayOne() 메소드 호출

Method 클래스에 선언된 displayTwo() 메소드 호출

Method 클래스에 선언된 displayOne() 메소드 호출

=======================================================

1~100 범위의 정수들의 합계 = 5050

=======================================================

		method.printTwo(50);
		method.printTwo(-30);
		System.out.println("=======================================================");

1~50범위의 정수들의 합계 = 1275

[에러]매개변수에는 0보다 큰 값이 저장되어야 됩니다.

=======================================================

		method.printThree(35, 79);
		method.printThree(19, 99);
		method.printThree(67, 12);
		System.out.println("=======================================================");

35~79범위의 정수들의 합계 = 2565

19~99범위의 정수들의 합계 = 4779

12~67범위의 정수들의 합계 = 2212

=======================================================

		//객체의 메소드를 호출하여 반환되는 값을 제공받아 변수에 저장
		int sum=method.returnTotal(30, 70);
		System.out.println("합계 ="+sum);
		//객체의 메소드를 호출하여 반환되는 값을 제공받아 출력 처리
		System.out.println("합계 ="+method.returnTotal(20, 80));
		System.out.println("=======================================================");

합계 =2050

합계 =3050

=======================================================

		boolean result=method.isOddEven(10);
		//조건식 대신 boolean 변수에 저장된 논리값을 사용하여 명령 선택 실행
		if(result) {
			System.out.println("매개변수로 전달된 값은 [짝수]입니다.");
		}	else {
			System.out.println("매개변수로 전달된 값은 [홀수]입니다.");
		}
		
		//조건식 대신 메소드의 반환값(논리값)을 사용하여 명령 선택 실행
		if (method.isOddEven(11)) {
			System.out.println("매개변수로 전달된 값은 [짝수]입니다.");
		}	else {
			System.out.println("매개변수로 전달된 값은 [홀수]입니다.");
		}
		System.out.println("=======================================================");

매개변수로 전달된 값은 [짝수]입니다.

매개변수로 전달된 값은 [홀수]입니다.

=======================================================

		//메소드를 호출하여 반환되는 배열의 메모리 주소를 참조에 저장
		// => 참조변수에 저장된 메모리 주소를 이용하여 배열 참조
		int[] numArray=method.returnArray(); //배열을 반환받아 저장
		for(int number : numArray) {
			System.out.print(number+" ");
		}
		System.out.println();
		System.out.println("=======================================================");

10 20 30 40 50

=======================================================

		//매개 변수에 배열을 전달하여 메소드 호출 - 반환값(모든 요소값의 합계)을 제공받아 출력
		//int[] suArray= {10,20,30};
		//배열을 생성하여 매개변수에 배열을 전달하여 메소드 호출
		//System.out.println("합계 = "+method.sumOne(suArray));//에러 발생
		System.out.println("합계 = "+method.sumOne(new int[] {10,20,30}));
		//배열에는 요소값을 0개 이상 저장하여 전달해 메소드 호출 가능
		System.out.println("합계 = "+method.sumOne(new int[] {}));
		System.out.println("합계 = "+method.sumOne(new int[] {10,20}));
		System.out.println("합계 = "+method.sumOne(new int[] {10,20,30,40,50}));
		System.out.println("=======================================================");

합계 = 60

합계 = 0

합계 = 30

합계 = 150

=======================================================

		//메소드 호출시 모든 전달값이 매개변수에 전달되어 저장
		System.out.println("합계 = "+method.sumTwo(10,20,30));
		System.out.println("합계 = "+method.sumTwo());
		System.out.println("합계 = "+method.sumTwo(10,20));
	}
}

합계 = 60

합계 = 0

합계 = 30

 

반응형