자바 메소드의 활용, JAVA Method 활용 예제, return있고 없고의 차이
이전 포스팅에서 메소드를 구성하는 키워드의 각 역할에 대해서 설명했습니다.
이제 활용을 해볼 차례입니다.
메소드를 구성하는 각 키워드를 잘 모르겠다면 아래 이전 포스팅 참고 부탁드립니다.
2025.03.28 - [왕초보의 실수하는 자바/자바 공부하기] - 자바 public static void 의미, 정적 메소드, 객체 메소드
자바 public static void 의미, 정적 메소드, 객체 메소드
여러 교재를 보다보면 어떤 메소드는 public static void 를 쓰는 경우도 있고 public static 만 쓰는 경우도 있고 private static void 를 쓰는 경우도 있으며 다양한 메소드 들을 사용합니다. 어떤 실행문을
bong9c.tistory.com
메인 메서드 안에서만 정수의 합을 구한다고 작성해보자.
public class Method1 {
public static void main(String[] args) {
int sum = 0;
for(int i=0; i <= 10; i++)
sum += i;
System.out.println("1~10의합 " + sum);
sum = 0;
for(int i=10; i <= 100; i++)
sum += i;
System.out.println("1~100의합 " + sum);
sum = 0;
for(int i=100; i <= 1000; i++)
sum += i;
System.out.println("1~1000의합 " + sum);
}
정수의 크기만 달라졌을 뿐 반복문을 같은 반복문을 여러번 사용했습니다.
그런데 메소드를 적절하게 이용하면 위와 같은 코드를 간결하게 바꿀 수 있습니다.
public static void main(String[] args) {
System.out.println("1~10의합 " + sum(1,10));
System.out.println("1~100의합 " + sum(10,100));
System.out.println("1~1000의합 " + sum(100,1000));
}
public static int sum(int i1, int i2) {
int sum = 0;
for (int i=i1; i<=i2; i++)
sum += i;
return sum;
}
중복된 코드를 줄여 간결하고 가독성 있게 만들 수 있습니다.
저는 제가 직접 이해해야 하기에 직성이 풀려 그림을 그려보았습니다.
(그려보니 태블릿을 이용해 펜슬로 그릴걸 후회하지만 발그림이여도 이해해주세요.)
이렇게 조건에 만족 할 때 까지 무한 반복합니다.
그리고 저는 사실 return의 개념이 항상 어렵습니다. 그래서 되짚어 보았습니다.( 누구에겐 쉬울 수 있지만 나에겐 어려움 )
여기서 return 문이 없으면 값을 호출한 곳으로 돌려줘야하는데 돌려줄 수 없으니 에러가 나게 됩니다.
값을 호출한 곳 :
System.out.println("1~10의합 " + sum(1,10));
System.out.println("1~100의합 " + sum(10,100));
System.out.println("1~1000의합 " + sum(100,1000));
프린트 문입니다.
다른 예제를 보겠습니다.
public static void main(String[] args) {
int x =0;
System.out.println("result() 메서드를 호출하기 전의 x:"+x);
result(x);
System.out.println("result() 메서드를 호출한 후의 x:"+x);
}
public static void result(int y) {
System.out.println("result() 메서드를 시작 할 떄의 y:"+ y);
y++;
System.out.println("result() 메서드를 끝날 때의 y: "+ y);
}
위 코드의 출력 문은
result() 메서드를 호출하기 전의 x: 0
result() 메서드를 시작 할 떄의 y: 0
result() 메서드를 끝날 때의 y: 1
result() 메서드를 호출한 후의 x: 0
입니다. 또 발그림을 그려보겠습니다.
return 이 없기 때문에 y값이 4번 프린트 문으로 반환되지 않기에 4번은 그냥 0이 되는 겁니다.
만약 return 이 있다면?
public static void main(String[] args) {
int x =0;
System.out.println("result() 메서드를 호출하기 전의 x:"+x);
x = result(x); // result(x) 메서드 호출
System.out.println("result() 메서드를 호출한 후의 x:"+x);
}
public static int result(int y) {
System.out.println("result() 메서드를 시작 할 떄의 y:"+ y);
y++;
System.out.println("result() 메서드를 끝날 때의 y: "+ y);
return y;
}
못알아보신다면 정말 죄송합니다.
그래서 글로 다시 순서를 설명을 하자면
순서 ⬇️
- System.out.println("result() 메서드를 호출하기 전의 x:"+x); ➡️ 0
- x = result(x); ➡️ result(x) 로 result 메서드를 호출
- result(int y) ➡️ 메서드 호출 됨
- System.out.println("result() 메서드를 시작 할 떄의 y:"+ y); ➡️0
- y++; ➡️ 0 이 출력 된 후에 +1을 더해줌
- System.out.println("result() 메서드를 끝날 때의 y: "+ y); ➡️ 1
- return y; ➡️ 값을 처음 result 호출문으로 돌려 보냄
- x = result(x); ➡️ 값이 돌아왔기 때문에 x 가 1 이 됨
- System.out.println("result() 메서드를 호출한 후의 x:"+x); ➡️ 1
7번에서 다시 8번으로 값이 리턴( 값 갱신 ) 되었기 때문에 다시 메서드로 가는게 아니라 그대로 내려와서 9번이 출력 되는 것 입니다.
저도 아직 완벽하게 이해하고 활용하지 못하고 있습니다.
코드 구조도 익숙하지 않기 때문에 매번 오류가 나고 무언가 빼먹고 다른 예제를 보면서 구성해야 합니다.
하지만 블로그에 설명하기 위해 열심히 이해하려고 노력중입니다. 저의 발그림으로 조금이나마 도움 되었길 바래봅니다.
다음에 또 다른 내용으로 포스팅 해보겠습니다.
감사합니다.❤️