1. 메서드
참조 : https://ddcloud.tistory.com/11
2. 리턴값이 없는 함수
1) 전달값(argument value)이 없는 경우
먼저 함수를 하나 호출해보자.
지금 test1() 함수를 호출했지만 빨간 줄이 그어진다.
문법상 오류라는 뜻이다.
왜냐하면 함수가 정의되지 않았기 때문이다.
함수는 아래와 같이 정의한다.
(다양한 방법이 있지만 지금은 전달값이 없을 경우에 한하여 코드를 작성한다)
public static void test1() {
System.out.println("JAVA");
}
여기서 void는 test1() 함수가 리턴값이 없는 함수라는 뜻이다.
(public과 static은 추후 배울 예정이다)
이렇게 정의해주면 위에서 호출했던 test1()의 모습이 변화한다.
test2() 함수도 만들어보자.
public static void test2() {
System.out.println("PYTHON");
return; // 함수는 호출한 시점으로 돌아간다
// 마지막 return 명령어는 생략 가능하다
}
이번엔 return 명령어를 추가했다.
return은 함수를 호출한 시점으로 돌아가게 하는(함수를 불렀으니까 함수를 발동시킨 뒤 원래 코드로 돌아가게 한다고 생각하면 쉽다) 기능이며 마지막 return은 생략이 가능하다.
출력 결과는 아래와 같다.
다음으론 전달값이 있는 함수를 만들어보자.
2) 전달값(argument value)이 있는 경우
전달값이 있는 함수를 호출해보자.
이처럼 함수를 호출할 때 전달되어지는 값이 있는 함수도 있다.
- test3()
이제 test3() 함수부터 만들어보자.
이 때 전달값(매개변수; parameter)에 걸맞는 자료형을 꼭 선언해주어야 한다!
public static void test3(int a) { // 매개변수(parameter)의 자료형은 생략할 수 없다
System.out.println(a);
return;
}
- test4()
다음은 test4() 함수이다.
아래와 같이 코드를 작성하면 에러가 난다.
public static void test4(int a, b, c) {
}
위에서 말했듯 매개변수마다의 자료형은 모두 선언해주어야 한다.
자료형을 선언해준 뒤 함수를 선언했다.
public static void test4(int a, int b, int c) {
System.out.println((a+b+c));
return;
}
- test5()
마지막으로 test5() 함수의 코드도 살펴보자.
public static void test5(double a, double b) {
System.out.println(a+b);
return;
} // test5() end
여기서 test5() 함수에 들어갈 값은 실수형으로 정해두었기에 double 자료형을 사용하였다.
출력 결과는 아래와 같다.
3) 함수 문제
문제) #기호를 100번 출력하시오
byte num=100;
char ch='#';
test6(ch, num);
해답)
public static void test6(char ch, byte num) {
for(int i=1; i<=num; i++) {
System.out.print(ch);
} // for end
} // test6() end
2. 리턴값이 있는 함수
리턴값이 있다는 것이 어떤 의미일까.
이 함수가 매개변수를 받은 뒤 무언가의 특정한 값을 되돌려준다는 의미이다.
이 때 함수는 리턴값을 무조건 1개만 뱉어줄 수 있다(또는 아예 없거나).
만일 무언가 리턴값을 여러개 주고 싶다면 그것은 함수가 아니라 다른 방법을 강구해보아야한다.
아래의 리턴값이 있는 test1() 함수를 살펴보자.
public static int test1(int a, int b) {
int c=a+b;
// return; 리턴값이 없다(void)
return c; // 리턴값이 있는 경우 리턴값의 자료형을 void 자리에 쓴다
// 리턴값은 1개 값만 리턴할 수 있다
}
public static void main(String[] args) {
test1(2, 4);
}
리턴값이 없는 함수와의 차이점을 발견할 수 있는가.
1) 먼저 void가 쓰이지 않았다.
2) 그리고 return 옆에 새로운 값이 생겼다.
리턴값이 있는 함수는 void를 쓰지 않는다.
그 대신 리턴이 되어질 값의 자료형을 그 자리에 쓴다.
그리고 return 되어질 값을 return과 함께 작성한다.
이제 이 함수를 result라는 변수에 담아서 출력해보려한다.
int result = test1(2, 4);
System.out.println(result); // 6
이 때 result 변수도 자료형을 함께 선언해주어야 한다.
함수 자체를 값으로 사용할 수도 있다.
System.out.println(test1(5,6)); // 11
함수 문제
// 문제) 윤년 확인하기
if(test3(2022)) {
System.out.println("윤년");
} else {
System.out.println("평년");
} // if end
// 문제) 팩토리얼 구하기
long f = test4(5);
System.out.println(f);
- 정답
public static boolean test3(int a) {
if(a%4==0) {
if(a%400!=0 && a%100==0) {
return false;
} else {
return true;
} // if end
} else {
return false;
} // if end
} // test3() end
public static long test4(int n) {
long gop=1;
for(int a=n; a>=1; a--) {
gop*=a;
} // for end
return gop;
} // test4() end
// 재귀적 함수 호출
public static long test4(int n) {
if(n==0) {
return 1;
} else {
return n*test4(n-1);
} // if end
} // test4() end
'⁂ Java > : 기본 익히기' 카테고리의 다른 글
[JAVA] #4-3 자바의 함수 호출 방식 (0) | 2022.09.07 |
---|---|
[JAVA] #4-2 오버로드(Overload) (0) | 2022.09.07 |
[JAVA] #3-2 정렬(Sort) (0) | 2022.09.07 |
[JAVA] #3-1 배열(Array) (0) | 2022.09.07 |
[JAVA] #2-4 Math (0) | 2022.09.07 |