Java 메소드 호출을 반복문을 이용하여 여러번 호출 할 수 있을까?

in #kr6 years ago (edited)

안녕하세요


필자는 현재 2학년 1학기 개학을 앞두고 있는 컴퓨터공학부 학부생입니다.

이번 학기에 Java를 전공 과목으로 수강하게 되었는데, 작년에 배운 C언어도 가물가물 해지고, 정말로 아무 공부도 하지 않다가는 큰 코를 다칠 것 같아서 '생활코딩' 사이트를 통해서 Java 공부를 시작했습니다. (생활코딩 '이고잉'님 감사합니다.)

'메소드'에 대해서 공부를 하던 도중 예제 코드를 보고 의문이 하나 생겼습니다.

예제 코드는 아래와 같습니다.


public class MethodDemo3 {

public static void numbering() {

int i = 0;

while (i < 10) {

System.out.println(i);

i++;

}

}

public static void main(String[] args) {

numbering();

numbering();

numbering();

numbering();

numbering();

}

}


보시다시피, numbering() 메소드를 각각 호출하고 있습니다.

여기서 의문이 생긴것이, '저 작업도 반복문으로 간결하게 표현할 수 있는가' 였습니다.

게임의 상황을 예로 들자면 '오버워치'에서 랜덤한 아이템이 들어있는 상자 10개를 연속해서 여는 작업을 한다고 가정했을 때, 상자를 열고 아이템을 획득하는 메소드(위의 예제로 보자면 numbering()이겠죠.)를 10번 실행해야하는데, 이를 반복문으로 실행하는 것이 훨씬 간결하다고 생각했기 때문입니다.

그래서 다음과 같이 매개변수(parameter)와 인자(argument)를 사용하는 코드를 작성해보았습니다.


public class helloworld {
   public static void main(String[] args)  {

       int j = 0;

       for(int i = 0;i < 5;i++){

           
counting(j);
       }


   }

   public static int counting(int first){
       int second = first + 10;
       while(first < second){
           System.
out.println(first);
           first++;
       }

       return first;

   }


}

실행하기 전 예상한 출력값은 0으로부터 1씩 연속적으로 증가하는 값이었습니다.

하지만 출력 결과 0에서 9까지 출력하는 것을 5번 반복할 뿐이었습니다.

무엇이 문제인지 고민해본 결과 main 메소드 내부에 문제가 있음을 발견했습니다.

counting 메소드에서 first를 반환해 봤자, 어차피 main 메소드 내부에선 j는 0으로 초기화 된 상태로 for  반복문 내부로 호출될 뿐이니 의미가 없는 반환이 되어버린 것이었죠. 이를 해결하기 위해서 for 문 내부에 한 줄을 다음과 같이 수정했습니다.

public class helloworld {
   public static void main(String[] args)  {

       int j = 0;

       for(int i = 0;i < 5;i++){

           j =
counting(j);
           
       }


   }

   public static int counting(int first){
       int second = first + 10;
       while(first < second){
           System.
out.println(first);
           first++;
       }

       return first;

   }


}


이제 counting 메소드에서 반환한 first 값이 정상적으로 j 에 저장이 되고 그 j값을 기반으로 다시 counting 메소드가 작동할 수 있겠군요. 예상대로 0에서부터 49까지의 출력값을 얻어낼 수 있었습니다.


기본적으로 알게 된 것은 메소드도 반복문을 통해서 호출할 수 있다는 것이었습니다. 어찌보면 당연한 것일 수도 있겠지만 Java라는 언어를 처음 접하는, 또한 프로그래밍에 대해선 잘 알지 못하는 제게는 새로운 지식을 습득한 것이 되겠네요. 또한 이 지식을 습득하는 과정에서 반환값이 있는 메소드에 대한 사용에 있어서도 어떻게 사용해야 정상적으로 사용할 수 있는지 알게 된 것 같습니다. 

이제 '오버워치'의 전리품 상자를 연속으로 개봉할 때 대략적으로 어떤 구조로 상자를 개봉하는지 알게 되었네요!

Sort:  

Congratulations @limdongyoung0! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of comments

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Coin Marketplace

STEEM 0.17
TRX 0.13
JST 0.027
BTC 61020.40
ETH 2603.09
USDT 1.00
SBD 2.65