코드일기장

[Java] 메서드와 return(객체지향 1-5) 본문

Java/OOP

[Java] 메서드와 return(객체지향 1-5)

won_hyeok2 2021. 12. 29. 22:11

 

 

🎈메서드와 return

 


메서드란?

문장을 묶어 놓은 것이라고 말할 수 있다.

 

메서드를 사용했을 때 장점에 대해 코드를 통해 보여주겠다.

 

public static void main(String[] args){
		int[] arr=new int[10];
		for(int i=0;i<arr.length;i++) {
			arr[i]=(int)((Math.random()*10)+1);
		}
		for(int i=0;i<arr.length;i++) {
			System.out.printf("%d\n", arr[i]);
		}
                for(int i=0;i<arr.length;i++) {
			System.out.printf("%d\n", arr[i]);
		}
	}
}

위 코드는 크기가 10인 integer형 arr배열에 난수를 다 채워주는 것이다. 난수의 범위는 1~10이다. 그리고 출력을 2번하는 코드인데.  출력을 할 때 중복이 있다. 코드는 중복이 적은 코드가 좋은 코드이다. 중복을 줄이기 위해서 메서드 method

를 사용하는 것 이다.

 

public static void main(String[] args){
		int[] arr=new int[10];
		for(int i=0;i<arr.length;i++) {
			arr[i]=(int)((Math.random()*10)+1);
		}
		voidmethod(arr);
                voidmethod(arr);
	}
	static void voidmethod(int [] arrs) {
		for(int i=0;i<10;i++) {
			System.out.printf("%d\n",arrs[i]);
		}
	}
}

어떠한가? 중복이 줄어들어 가독성이 좋은 코드가 설계되었다. 이처럼 메서드를 이용하는 이유는 쓸 대 없는 중복을 줄이기 위함이다.


🎈메서드 사용 방법과 호출 방법

 

타입 메서드이름 (매개변수){}

메서드 이름은 아무거나 상관없음

메서드 동작 방식

메서드는 객체지향 개념에서 함수를 지칭하는 용어이다. 함수와의 차이는 메서드는 class안에 반드시 들어가 있어야 하고 함수는 독립적으로 제약이 없다.

 

 

입력은 매개변수들이 입력된다. 참고로 매개 변수는 몇 개가 오든 상관없다.

입력의 타입과 출력의 타입은 동일해야 한다. 한마디로 int메서드는 int형만 출력시킬 수 있다는 거다.

 

예를 들어 double형 메서드 매개변수는 2개로 받는다고 하자. 

double methodName(double d, int i){ double D=d+i;  return D;}

이런 식으로 선언하면 된다.

 

메서드는 

반복적으로 수행되는 여러 문장을 메서드로 작성하는 것이 바람직하다.

하나의 메서드는 한 가지 기능만 수행하도록 작성하는 것이 바람직하다.

 

예)

static double doublemethod(int a,double d) {
		double sum=(double)a+d;
		return sum;
}

 

System.out.printf("%.2f",doublemethod(5, 4.8));

결과

메서드를 사용과 호출은 대략 이 정도다. 호출은 메서드 이름(값 1, 값 2,...) 이런 식으로 호출하는 것이다. 

또 한 출력은 0~1개이다. 

참고로, 매개변수(parameter)도 지역 변수이다.

 


void

반환 타입이 없을 경우 메서드를 생성할 때 타입 부분에 void를 적으면 된다.

class Test{
	void voidmethod(int [] arrs) {
		for(int i=0;i<arrs.length;i++) {
			System.out.printf("%d\n",arrs[i]);
		}
	}
}

이 코드처럼 return이 없어도 된다. 

void에서 return 문을 사용하면 해당 메서드 스택을 빠져나갈 수 있다.


🎈 return 문 

실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.

void에서 return 문을 사용하면 해당 메서드 스택을 빠져나갈 수 있다.

void gugudan(int dan) {
		if(dan<2||dan>9) {
			return;
		}else {
			for(int i=1;i<=9;i++) {
				System.out.println(dan*i);
			}
			//return생략 컴파일러가 자동추가(void일때만 가능)
		}
}

 

dan매개변수가 2보다 적거나 9보다 크면 return이 실행되어서 메서드를 종료시킨다.

 

만약 메서드 타입이 int나 double 등 void가 아닌 타입이면 무조건 return문을 써줘야 한다.

 

int M(int a,int b) {
		if(a<b)
			return b;
		else
			return a;
}

그리고 void가 아닌 타입은 return문을 생략할 수 없으므로 저런 if-else조건문에서 else에 retrun을 안 넣고 지나치는 경우가 있다. 만약 else에 return문을 안 적었으면 에러가 발생한다. (return문이 없다고 한다.) 반드시 if-else 같은 조건문은 메서드에서 하나하나 다 return을 적어줘야 한다.


public class C {

	public static void main(String[] args){
		Test t=new Test();
		System.out.println(t.max(20, 1, 3));
	}
}
class Test{
	
	long max(long a,long b,long c) {
		long num=0;
		if(a<=b) {
		  if(c<=a) {
			  num=a;
		  }else if(c<=b) {
			  num=c;
		  }else {
			  num=b;
		  }
		}else if(b>c){
			num=b;
		}else if(c>a){
			num=a;
		}else {
			num=c;
		}
		
		return num;
	}
}

세 변수 중 중간값을 찾는 메서드


결론

 

타입이 있는 메서드인 경우 return을 반드시 적어줘야 한다.

타입이 있는 메서드는 출력 값과 결과를 담을 변수 타입도 메서드 타입과 일치해야 한다.

단, 자동형 변환으로 예외는 있다.

long L(int i,int s){
		int sum=i+s;
		return sum;
}

sum은 int형이지만 자동형변환으로 long으로 변환(작은->큰)

 

타입이 없는 메서드(void)는 return 생략 가능하다. void에서 return은 메서드 종료를 의미한다.

 

 

 

 

 

 

 

🎈다음 글 보기 (객체지향 1-5)



 

 

 

 

🚀이전 글 보기 (객체지향 1-4)



 

Comments