Java 10(Method)

Kang.__.Mingu·2024년 5월 1일
0

Java

목록 보기
12/108

메소드(Method)

  • 클래스에 작성된 함수 - 멤버함수
  • 필드(멤버변수)를 사용하여 원하는 기능을 구현하기 위한 명령의 모임
  • Java 명령은 메소드에서만 작성 가능

메소드 작성 방법

반환형 메소드명(자료형 변수명, 자료형 변수명, ...){
			명령;
			명령;
}
  • 메소드를 호출(Invoke)해야만 메소드에 작성된 명령 실행 - 기능 구현
  • 메소드 () 기호 안에 작성된 변수를 매개변수(Parameter - Argument)라고 하며 [,] 기호를 사용하여 나열 작성 가능
  • 메소드에 작성된 명령을 실행하기 위해 필요한 값을 메소드 호출시 전달받아 저장하기 위한 변수
  • 전달값이 필요없는 경우 매개변수 작성 생략 가능

반환형(ReturnType)

  • 메소드를 호출하여 얻을 수 있는 결과값에 대한 자료형

무반환형(void)

  • 메소드를 호출하여 얻을 수 있는 결과값이 없는 경우 사용하는 자료형

  • 메소드명은 식별자로 카멜 표기법을 사용하여 작성하는 것을 권장
  • 카멜 표기법: 첫 문자는 소문자로 표기하고 그 이후에 연결되는 문자들의 첫자는 대문자로 표기
  • ex) camelCase, androidStudio

메소드 호출(Invoke)

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

return

  • 메소드를 강제로 종료하여 프로그램의 흐름(스레드)를 메소드를 호출한 위치로 되돌리는 키워드 - 제어문
  • 일반적으로 if 구문과 같이 사용
  • 형식) if(조건식) return; >> 메소드의 반환형을 [void]로 작성
  • return 키워드를 사용하여 메소드의 처리 결과값을 메소드를 호출한 명령으로 반환하는 기능 제공
  • 형식) return 반환값;
  • 메소드의 반환형을 반환값과 동일한 자료형으로 작성

메소드는 객체 생성을 목적으로 작성된 클래스에 작성

package oop;

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) {
		if(num1 > num2) {
			int temp=num1;
			num1=num2;
			num2=temp;
		}
		
		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() {
		/*
		int[] array={10, 20, 30, 40, 50};
		return array;
		*/
		
		//배열을 생성하여 참조변수에 저장하지 않고 직접 반환 처리 
		//return {10, 20, 30, 40, 50};//에러 발생
		return new int[]{10, 20, 30, 40, 50};
	}
	
	//매개변수로 배열을 전달받아 배열의 모든 요소값의 합계를 계산하여 반환하는 메소드
	int sumOne(int[] array) {//매개변수에 배열의 메모리 주소를 전달받아 저장
		int sum=0;
		for(int su : array) {
			sum+=su;
		}
		return sum;
	}
	
	//메소드 작성시 [...] 기호를 사용하여 매개변수를 작성하면 0개 이상의 값을 전달받아 
	//매개변수에 저장 가능
	// => 0개 이상의 값을 전달받아 저장한 매개변수는 메소드에서 배열과 동일하게 처리
	int sumTwo(int... num) {
		int sum=0;
		for(int su : num) {
			sum+=su;
		}
		return sum;
	}
}

프로그램 실행을 목적으로 작성된 클래스 - main() 메소드 작성

package oop;

import java.util.Arrays;

public class MethodApp {
	//JVM(Java Virtual Machine)에 의해 자동 호출되는 메소드 - 프로그램 실행의 시작점
	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 total=method.returnTot(30, 70);
		System.out.println("합계 = "+total);
		//메소드를 호출하여 반환되는 값을 제공받아 출력 처리
		System.out.println("합계 = "+method.returnTot(20, 80));
		System.out.println("==============================================================");
		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();
		System.out.println("배열 요소값 = "+Arrays.toString(numArray));
		System.out.println("==============================================================");
		/*
		int[] suArray={10, 20, 30};
		//메소드 매개변수에 참조변수에 저장된 배열의 주소값 전달
		System.out.println("합계 = "+method.sumOne(suArray));
		*/
		
		//배열을 생성하여 메소드 매개변수에 배열의 주소값 전달
		//System.out.println("합계 = "+method.sumOne({10, 20, 30}));//에러 발생
		System.out.println("합계 = "+method.sumOne(new int[]{10, 20, 30}));
		System.out.println("==============================================================");
		//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("==============================================================");
		System.out.println("합계 = "+method.sumTwo());
		System.out.println("합계 = "+method.sumTwo(10, 20));
		System.out.println("합계 = "+method.sumTwo(10, 20, 30));
		System.out.println("합계 = "+method.sumTwo(10, 20, 30, 40, 50));
		System.out.println("==============================================================");
	}
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글