Java

메소드

지금까지 배운 것으로도 얼마든지 프로그램을 만들 수 있다. 반복문, 조건문, 변수, 상수와 같은 것들은 사실상 프로그램을 만드는 가장 중요한 도구들이라고 할 수 있다. 지금부터 배우게 될 메소드나 객체지향과 같은 개념들은 웅장하고, 결함이 없고, 유지보수가 쉬운 애플리케이션을 만들기 위한 기법들이라고 할 수 있다. 이것들 없이도 프로그램을 만들 수는 있지만, 이것들 없이 규모있는 애플리케이션을 만든다는 것은 현실적으로 어려운 일이다. 지금까지 만드는 방법을 배웠다면 이제부터는 잘 만드는 방법을 익히는 것이라고 해도 과언이 아니다.

메소드

메소드(method)는 코드를 재사용할 수 있게 해준다. 이번 시간에는 경제적으로 로직을 작성하는 방법에 대해서 알아볼 것이다.

메소드의 형식

여러분은 이미 메소드를 만들고 사용했다. 아래 그림을 보자.

 

이것이 메소드다. 지금까지 수없이 만들었던 저 main이라고 하는 것이 바로 메소드인 것이다. 위의 그림을 자세히 보면 핑크색으로 된 부분과 검은색으로 된 부분이 있다. 이 중에서 검은색으로 된 부분은 이번 토픽에서 다루지 않을 개념이다. 이것들은 객체지향과 함께 언급되어야 본질을 이해할 수 있기 때문에 여기서는 언급하지 않겠다. 메소드를 만들 때 public static이라고 적어야 한다고 일단은 기계적으로 이해하자. 여러분이 주목할 것은 핑크색으로 강조한 부분이다.

 

메소드의 정의와 호출

직접 메소드를 만드는 것을 정의라고 하고, 만들어진 메소드를 실행하는 것을 호출이라고 한다.

아래의 예제를 보자. (실행)

package org.opentutorials.javatutorials.method;

public class MethodDemo1 {
    public static void numbering() {
		int i = 0;
		while (i < 10) {
			System.out.println(i);
			i++;
		}
	}

	public static void main(String[] args) {
		numbering();
	}
}

결과는 아래와 같다.

0
1
2
3
4
5
6
7
8
9

 아래 그림을 보자.

위의 예제는 numbering이라는 이름의 메소드를 정의하고 있다. 이 메소드는 main이라는 이름의 메소드 안에서 호출되고 있다. 위의 코드는 아래의 코드와 정확하게 동일한 의미를 갖는다.

핑크색으로 표시한 부분의 코드를 numbering이라는 이름의 메소드로 묶어서 외부로 분리한 것이다. 그리고 메소드 numbering의 로직이 필요할 때 numbering();이라고하면 메소드 numbering의 로직이 실행된다.

main

자 그럼 main 메소드가 무엇인지 알아보자. main 메소드는 규칙이다. 여러분이 만들고 싶은 프로그램이 있다면 여러분은 반드시 public static void main(String[] args)가 이끄는 중괄호 안에 실행되기를 기대하는 로직을 위치시켜야 한다. 이것은 약속이기 때문에 여러분은 약속을 지켜야 한다. 그렇게 코드를 작성하면 자바를 실행할 때 자바는 여러분이 작성한 main 메소드를 실행하게 되는 것이다. 여러분은 main 메소드를 작성하고, 자바는 main 메소드를 실행하는 관계라고 할 수 있다.

메소드가 없다면

아래 예제를 보자. 반복문 수업에서 0부터 9까지 출력하는 애플리케이션을 만들었다. 그런데 0부터 9까지를 5번 출력해야 한다면 어떻게 해야 할까? 아래와 같이 해야 할 것이다. (실행)

package org.opentutorials.javatutorials.method;

public class MethodDemo2 {
    
    public static void main(String[] args) {
		int i = 0;
		while(i<10){
			System.out.println(i);
			i++;
		}
		
		i = 0;
		while(i<10){
			System.out.println(i);
			i++;
		}
		
		i = 0;
		while(i<10){
			System.out.println(i);
			i++;
		}
		
		i = 0;
		while(i<10){
			System.out.println(i);
			i++;
		}
		
		i = 0;
		while(i<10){
			System.out.println(i);
			i++;
		}
	}

}

이 정도는 copy&paste로 해볼 만하다. 하지만 만약 이것을 1000번 해야 한다면? 각각의 로직이 1000 줄에 육박한다면? 그리고 그 내용을 수정해야 한다면? 서서히 암담한 느낌이 들지 않는가? 메소드를 사용한다면 이러한 문제를 현저히 줄일 수 있다. 아래의 예제를 보자. 결과는 같지만 로직은 단 한 번만 등장한다. 이러한 것을 재활용성이라고 한다. (실행)

package org.opentutorials.javatutorials.method;

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이라는 메소드는 항상 똑같은 동작만을 반복한다. 이것도 재활용이라는 측면에서는 장점이 있지만, 입력 값에 따라서 출력 값을 달리 제공한다면 더욱 쓸모 있는 프로그램이 될 수 있을 것이다.

매개변수와 인자

메소드의 입력 값은 매개변수(parameter)를 통해서 이루어진다. 위의 예제를 조금 개선해보자. 이전 예제는 0부터 9까지의 숫자를 화면에 출력했다. 만약 필요에 따라서 0부터 4까지 출력하고 싶거나 0부터 8까지 출력하고 싶다면 어떻게 해야 할까? 각각에 맞는 메소드를 새로 정의해야 할까? 그렇게 해도 되지만 더 좋은 방법이 있다. 입력 값에 따라서 다른 출력 값을 갖도록 메소드를 정의하면 된다. 즉, 입력을 고민할 때가 된 것이다. 아래의 예제를 보자. (실행)

package org.opentutorials.javatutorials.method;

public class MethodDemo4 {
    public static void numbering(int limit) {
		int i = 0;
		while (i < limit) {
			System.out.println(i);
			i++;
		}
	}

	public static void main(String[] args) {
		numbering(5);
	}
}

결과는 0부터 4까지 출력한다. 메소드를 호출할 때 괄호에 값을 주고 있는데 저 값을 다른 값으로 바꿔보자. 값에 따라서 다른 결과가 출력되고 있다. 입력을 통해서 메소드의 동작을 제어하고 있다. 아래 그림을 보자.

메소드 numbering의 괄호 안에 위치한 숫자 5는 이 메소드가 호출될 때 limit이라는 변수의 값이 된다. 이 값은 메소드 numbering의 중괄호 안에서만 사용할 수 있다. 위의 코드는 아래의 코드와 동일한 의미를 갖는다.

public static void numbering() {
	int limit = 5;
	int i = 0;
	while (i < limit) {
		System.out.println(i);
		i++;
	}
}

여기서 limit이라는 변수는 메소드 numbering의 정의 부에 있는 로직들에게 5라는 값을 전달하고 있다. 호출에서 입력한 값을 로직으로 매개 한다는 의미에서 이러한 변수를 매개변수라고 부른다. 영어로는 parameter다. 그리고 메소드를 호출할 때 전달된 값인 5를 '인자' 영어로는 argument라고 한다. 관습적으로는 매개변수와 인자를 구분하지 않고 부르는 경우도 많다.

복수의 인자

만약 메소드로 여러개의 입력값을 전달하고 싶다면 어떻게 해야 할까? 다음 예제는 위의 예제를 개선해서 출력할 숫자의 시작 값과 마지막 값을 입력값으로 전달하는 예제다. (실행)

package org.opentutorials.javatutorials.method;

public class MethodDemo5 {

    public static void numbering(int init, int limit) {
		int i = init;
		while (i < limit) {
			System.out.println(i);
			i++;
		}
	}

	public static void main(String[] args) {
		numbering(1, 5);
	}

}

 결과는 1부터 4까지가 출력된다. 위와 같이 입력 값을 복수로 받고 싶다면 콤마 뒤에 매개변수를 정의해주면 된다. 또 이 메소스를 호출할 때는 매개변수의 순서대로 인자를 배치하면 된다.

return

위의 예제는 화면에 숫자를 출력한다. 물론 이것도 출력이지만 좀 더 활용도가 높은 출력 방법이 있다. 아래 예제를 보자. (실행)

package org.opentutorials.javatutorials.method;

public class MethodDemo6 {
    public static String numbering(int init, int limit) {
		int i = init;
		// 만들어지는 숫자들을 output이라는 변수에 담기 위해서 변수에 빈 값을 주었다.
		String output = "";
		while (i < limit) {
			// 숫자를 화면에 출력하는 대신 변수 output에 담았다.
			output += i;
			i++;
		}
		// 중요!!! output에 담겨 있는 문자열을 메소드 외부로 반환하려면 아래와 같이 return 키워드 뒤에 반환하려는 값을
		// 배치하면 된다.
		return output;
	}

	public static void main(String[] args) {
		// 메소드 numbering이 리턴한 값이 변수 result에 담긴다.
		String result = numbering(1, 5);
		// 변수 result의 값을 화면에 출력한다.
		System.out.println(result);
	}
}

메소드 내에서 사용한 return은 return 뒤에 따라오는 값을 메소드의 결과로 반환한다. 동시에 메소드를 종료시킨다. 한가지 잊지 말아야 할 점은 return을 통해서 반환할 값의 데이터 형식을 메소드의 이름 옆에 명시해주어야 한다는 것이다.

이것은 프로그래밍을 처음 시작하거나, JavaScript나 PHP와 같은 언어들에 익숙한 개발자에게는 까다롭고 귀찮게 느껴질 수 있는 부분이다. 하지만 메소드가 리턴 할 값을 명시함으로서 numbering이라는 메소드는 반드시 문자열의 값을 리턴한다는 것을 보장할 수 있는 장점이 있다. 모든 일에는 장점과 단점이 있다. 장단의 다면성을 충실하게 응시할 때 적합함을 얻을 수 있다. (필자도 노력중이다)

만약 반환 값이 없다면 아래와 같이 void를 적어준다.

굳이 이렇게 복잡하게 데이터를 리턴하는 이유는 무엇일까? 내용을 화면에 출력하는 것은 동일하지 않은가? 결론적으로 말하면 부품으로서의 가치를 높이기 위해서라고 할 수 있다. 만약 여러분이 이 메소드가 출력한 값을 화면에 출력하는 것이 아니라 파일에 기록하고 싶다면 어떻게 해야 할까? 또는 이메일로 보내고 싶다면 어떻게 해야 할까? 3개의 메소드를 만들고 용도에 따라서 코드를 재작성하는 것도 좋은 방법이다. 하지만 더 좋은 방법은 숫자를 출력하고, 숫자를 파일에 기록하고, 숫자로 이메일을 보내는 작업으로부터 숫자를 계산하는 로직을 분리하는 것이다. numbering은 자신이 어떻게 사용될지 모른다. 누구든지 numbering이라는 메소드를 호출할 때 초기값과 마지막 값을 입력하면 numbering은 숫자를 문자열의 형태로 반환하면 되는 것이다. 코드를 보자.

package org.opentutorials.javatutorials.method;

import java.io.*; // 무시

public class MethodDemo7 {
    public static String numbering(int init, int limit) {
		int i = init;
		String output = "";
		while (i < limit) {
			output += i;
			i++;
		}
		return output;
	}

	public static void main(String[] args) {
		String result = numbering(1, 5);
		System.out.println(result);
		try { // 무시
			// 다음 행은 out.txt 라는 파일에 numbering이라는 메소드가 반환한 값을 저장합니다.
			BufferedWriter out = new BufferedWriter(new FileWriter("out.txt"));
			out.write(result);
			out.close();
		} catch (IOException e) {
		} // 무시
	}
}

코드에서 무시라고 표시된 부분은 지금 단계에서는 이해하기 어려운 것이다. 무시하자. 중요한 것은 numbering이라는 메소드로부터 화면에 출력이라는 구체적인 행위를 제거하고 대신에 처리 결과를 반환하고 있다는 사실이다.

return의 특성에 대해서 조금 더 알아보자. return은 값을 반환하는 동작을 한다. 그런데 이것은 return에 대한 반쪽짜리 설명이다. return은 메소드를 중단시키는 역할도 한다. 코드를 보자. (실행)

package org.opentutorials.javatutorials.method;

public class ReturnDemo {
    public static int one() {
		return 1;
		return 2;
		return 3;
	}

	public static void main(String[] args) {
		System.out.println(one());
	}
}

위의 코드는 컴파일조차 되지 않는다. 왜냐하면, return 은 메소드를 종료시키는 역할을 하므로 return이 처음 등장한 이후의 구문은 실행되지 않기 때문이다. 하지만 아래의 예제는 문제가 전혀 없다.

package org.opentutorials.javatutorials.method;

public class ReturnDemo2 {
    public static String num(int i) {
    	if(i==0){
			return "zero";
		} else if(i==1){
			return "one";
		} else if(i==2){
			return "two";
		}
		return "none";
	}

	public static void main(String[] args) {
		System.out.println(num(1));
	}
}

return이 여러 번 등장하지만 return이 중복적으로 실행될 가능성이 없기 때문이다. return "none";를 제거하면 컴파일이 되지 않을 것이다. 

복수의 리턴

메소드는 여러 개의 입력 값을 가질 수 있다. 그렇다면 여러 개의 값을 출력하고 싶다면? 자바는 문법적으로 그런 기능을 제공하지 않는다. 하나의 변수에 여러개의 값을 담아서 출력하면 된다. 아래의 코드를 보자. (실행)

package org.opentutorials.javatutorials.method;

public class ReturnDemo3 {
    public static String getMember1() {
		return "최진혁";
	}

	public static String getMember2() {
		return "최유빈";
	}

	public static String getMember3() {
		return "한이람";
	}

	public static void main(String[] args) {
		System.out.println(getMember1());
		System.out.println(getMember2());
		System.out.println(getMember3());
	}
}

하나의 메소드는 하나의 값만을 반환할 수 있기 때문에 위와 같이 각각의 회원정보를 반환하는 메소드를 만들었다. 무언가 비정상적이지 않은가? 이번엔 배열을 이용한 아래의 코드를 보자. 맴버를 담고 있는 배열을 반환하고 있다. 간단하지 않은가? 메소드 getMembers가 리턴한 배열을 members 변수에 담았다. 이 변수를 이용해서 여러 개의 데이터를 처리 할 수 있게 된다. (실행)

package org.opentutorials.javatutorials.method;

public class ReturnDemo4 {

    public static String[] getMembers() {
    	String[] members = { "최진혁", "최유빈", "한이람" };
		return members;
	}

	public static void main(String[] args) {
		String[] members = getMembers();
	}

}

 

댓글

댓글 본문
작성자
비밀번호
  1. 송선욱
    답변 감사합니다!
    대화보기
    • mongkys@naver.com
      public static void main(String[] args) {
      String[] members = getMembers();

      System.out.println(members[0]);
      System.out.println(members[1]);
      System.out.println(members[2]);
      }

      이런식으로 하나씩 출력하셔도 되고 for 문이나 배열이기때문에 for-each 문을 사용해서 반복문을 통해 하나씩 돌리는 법도 있습니다 ^^
      대화보기
      • 송선욱
        마지막 예제인 배열을 이용한 ReturnDemo4에서 배열을 사용하지 않은 바로 위의 예제와 같이 여러개의 값을 출력하려면 어떻게 해야되나요? System.out.println() 에 어떤 값을 넣어야할지 모르겠네요.
      • 송선욱
        main 메소드를 이해하는데 있어서, 자바를 실행할 때 자바는 우리가 작성한 main 메소드를 실행하게 되는 것이라고 설명하셨는데, 그러면 main 메소드가 있는 코드는 출력이 되고, main 메소드가 없는 코드는 출력되지 않는다라고 이해해도 되는것인지요? '실행된다 == 출력된다' 같은 의미로 성립될 수 있는건가요?
      • 김민근
        잘 보고 갑니다 정말 고맙습니다
      • 이상윤
        감사합니다!!!
      • 정명호
        감사합니다
      • 궁금자
        public static String numbering(int init, int limit) {
        int i = init;
        String output = "";
        while (i < limit) {
        // 숫자를 화면에 출력하는 대신 변수 output에 담았다.
        output += i; << 이부분에서 output은 String형인데 거기에 int형인 i를 붙이는게 i가 자동으로 String으로 형변환이 되어서 붙는건가요?
        i++;
        }
        return output;
      • 444번째 시청자입니다.
        메소드 부터가 뭔가 구조들이 그동안 배운것들을 좀 더 복합적으로
        생각하게끔 만들어주네요.
        return과 void의 관계가 좀 더 보충설명이 더 있었으면 하는 바램이에요.
        값이 비어 있어서 리턴을 하지 않는다는게 무슨 의미인지 아직은 잘 이해가 인되요 ㅠㅠ
        하지만 다음 입출력 부분이 너무너무 기대가 되서 어떡해든 이해하고 넘어가고 싶네요 ㅎ
      • 박혜주
        저도요 와웅.... 메소드에서 꽉막히네요 @_×
      • Paskal kinar
        으.. 다 괜찮게 넘어왔는데, 메소드 너무 어렵다.
        특히 return 에서는 죽을 것 같다!!
        그래도 동영상 계속 돌리면서 논리적 흐름을 이해하려고 노력 중!!
        앞에 나온 배열과 연결되고, 넋 놓고 있다가 갑자기 배열 튀어나오니까, 배열과 메소드가 어떻게 연결되는지 다시 정리가 필요하고... 지금 이틀 째 메소드에서 진도 못 나가는 중...

        이제야 어느 정도 이해가 돼서 다음 토픽으로 넘어갈 수 있겠다.
        힘내야지!!

        다들 힘내세요! ^ㅡ^
      • 정말 감사합니다!
      • ㅂㅈㄷㅂㅈㄷ
        저도 정석으로 자바를 시작하는데 이해가 안가는 부분이 많았는데 이게 정말로 자바를 떠나서 프로그래밍 언어를 처음 시작하는 사람이라면 이걸로 이해를 돕고 정석으로 쐐기를 밖는 게 좋을 것 같아요
        정석은 printf로 출력을 해서 보는데 좀 걸리기도 하구요..
        물론 처음에 프린트에프를 사용하는 법이 있긴 하지만 프린트라인으로 되어 있응면 좀 더 빠른 진행이 가능하겠다 싶더라구요
        대화보기
        • 감사
          화이팅!
        • JustStudy
          고맙습니다
        • yskioi
          감사합니다
        • sohnryang
          이런 식으로 루프를 쓸 수도 있습니다.
          for (String name : members)
          {
          System.out.println(name);
          }
          대화보기
          • 사바
            배열을 출력할 수 없어요..

            System.out.println(members.length); //배열의 길이

            System.out.println(member[0]); //배열 첫번째 값

            이런식으로 출력하세요..
            대화보기
            • Devani0310
              감사합니다
            • C에서는 배열을 return 할 때 함수가 종료 되기 전에 return 받으면 값이 잘 전달 되지만 그 전에 함수가 끝나버리면 return 값이 전달이 안되는 것으로 알고 있습니다.
              그런데 자바에서는 배열도 return이 되는 것 같은데 String 배열 객체가 함수가 끝나면서 없어지기는 하지만 아직 garbage collection으로 가지 않은 상태이기 때문에 잘 전달이 되는 것인가요??
            • 코딩인가비
              잘 들었습니다.
              아래 댓글들도 잘봤습니다.^^
            • 감사합니다 !!!
            • members인 최진혁, 최유빈, 한이람을 출력시키고 싶으신거죠?

              그러면 System.out.println(members); 가 아니라

              for(String e : members) {
              System.out.println(e);
              }

              이렇게 코딩하셔야합니다.


              배열을 출력하는게 아니라 배열의 값을 출력해야해요~

              메소드 전 강의인 배열강의 참고하세요
              대화보기
              • 아메바
                public static String[] getMembers() {
                String[] members = { "최진혁", "최유빈", "한이람" };
                return members;
                }

                public static void main(String[] args) {
                String[] members = getMembers();
                }

                이부분에서

                멤버변수 System.out.println(members);찍으니까

                콘솔에 [Ljava.lang.String;@19e0bfd

                게 나와요;;

                System.out.println(members.toString());

                해도 똑같은데 한글나오게 어떻게 하죠?
              • 오빠는다르다
                감사합니다!!!!!!!
              • 이웃집토토로
                프로그래밍이 사실은 컴퓨터가 만들어지기 전부터
                이루어졌다는 사실 ! 알고 계신가요? 그것도 1800년대의 여성 과학자로부터요
                오리엔테이션 보다가 생각나서 링크남깁니다


                https://namu.wiki......%B8
              • 이웃집토토로
                우리 선생님 진짜 착하신 듯...
                대화보기
                • 안녕하세요. 동영상에서
                  (int inti, int limit)
                  int i = init; -> 이부분에서 앞에 인트는 일단 정수를 받아야하는데 init라고 이름을 주었는데 오류가 안뜨는것과,

                  i값을 init로 굳이 변형 안하고 int i = init; 를 아예 없애고 limit과 같이 다이렉트로 매개변수안에서 사용가능한건지 궁금합니다.
                • 댓글달린 지 오래되어 보실지 모르겠지만..
                  글 쓰실 때 읽는 사람 입장에서 한번만 생각해보시고 글 올리셨으면 합니다.
                  그리 어려운 일 아니잖습니까?
                  대화보기
                  • array 유틸을 전부 꿰고 계시다면 권장합니다만 실제 코딩시에도 구지 이 방법을 쓰라고 추천하고 싶진 않습니다. 단순 반복문으로 출력해보시길...
                    대화보기
                    • 유학생
                      정말 잘 듣고 있습니다 정말 감사합니다!
                    • 기초에 충실하자
                      String 형과 int 형이면 데이터타입이 다른데 어떻게 더하는게 가능하냐고 의문을 제기하는 분은 당연 그럴수 있습니다. MethodDemo7에서 output+=i는 가능하지만 i+=ouput은 안돼죠. ouput+=i와 같은 결과값을 가져오는 다른 표현은 output += Integer.toString(i); 이 있습니다. 기본자료형 int의 WrapperClass인 Integer를 사용한 경우인데 나중에 WrapperClass에 대해서 공부하시면 이해 될겁니다. 아무튼 String 객체는 자바에서 매우중요해서 그런지 특별 대우를 해주고 있습니다. 원시형 데이터 타입으로도 가능하고 new라는 키워드를 사용해 객체를 생성해서 사용할 수 있게도 해놨습니다.
                    • 조영준
                      그 방법은 너무 복잡해 보입니다 !

                      public static String[] Arrayname(){
                      String[] name = {"조영준", "조영진", "조승희"};
                      return name;
                      }

                      public static void main(String[] args){
                      for(String e : Arrayname()){
                      System.out.println(e);
                      }
                      }
                      이방법으로 쉽게 해결할수 있습니다!
                      대화보기
                      • 조영준
                        배열을 화면에 출력하실려면 인덱스 값이 필요하지요 getMembers[0] 이런식으로 말이지요 허허..
                        인덱스 값이 없으면 에러가 나죠 이렇게 하면 쉽게 해결하실수 있습니다

                        public static String[] Arrayname(){
                        String[] name = {"조영준", "조영진", "조승희"};
                        return name;
                        }

                        public static void main(String[] args){
                        for(String e : Arrayname()){
                        System.out.println(e);
                        }
                        대화보기
                        • 박첩구드
                          시즌 1이 끝났네요...ㄷㄷ 시즌 2도 화이팅!
                        • 자바마스터한다이고잉
                          자바의 정석이랑 같이 보고있는데 시너지가 아주 좋은거같아요. 자바의 정석은 솔직히 아예 모르는 사람이 보면 이해 불가일거같은데 이거랑 같이보면 이계 첫번째 계단이라면 정석은 3번째 계단인거같아서 올라가기 쉬운 발판같아요~~
                        • 자바레벨1
                          정말 도움이됩니다. 감사합니다.
                        • 황진섭
                          메소드 보고 뭐지 하면서 걱정했는데
                          배우다보니 c언어의 함수와 비슷하더군요 ㅎㅎ
                          덕분에 더 빠른이해가..ㅋㅋ

                          강의 잘보고갑니당
                        • Byunghawk Lee
                          method라는 거이 다른 곳에서는 function(함수)라고 부르는 것과 같은 것이더군요.
                          잘 보고 갑니다.
                        • Byunghawk Lee
                          수고하셨습니다.
                          다음 단계로 가겠습니다
                        • 허니버터
                          잘보고 넘어 갑니다.
                        • 묻지마좀
                          이고잉님은 아니지만, 제가 답변 해드리겠습니다.

                          밑에 보시면 String result = numbering(1, 5);

                          여기에서 init값을 기본적으로 1을 주었기때문에

                          초기값은 1이 된것입니다.

                          그리고 ++는 증가 연산자로 해당 변수에 1을 증가시킨다는

                          의미를 가지고 있습니다. 그러므로 i++는 값을 1을 증가시키고

                          다음 작업때 i에다가 1을 증가시켜서

                          2가 되는것이죠.

                          그리고 Spring은 문자열을 나타내는 데이터타입이

                          문자열이기때문에 1234로 표시되는것이죠.

                          좀 오랜된 글에 답변드렸는데

                          이해되셨기를 바랍니다
                          대화보기
                          • fa7279@naver.com
                            15.10.22 잘 듣고 갑니다~
                          • 지나가던 이
                            넘버링 메소드의 반환형이 인트형이라면 질문자분의 말이 맞습니다.

                            하지만 넘버링 메소드가 반환형이 스트링이기 때문에 리턴값도 스트링형태로 나오는 겁니다.

                            그렇기때문에 수가 더해지는게 아닌, 문자열이 붙여지는 결과가 나오는 거라 알고 있습니다.

                            비루한 실력이라 답이 정확하지 않을 수도 있습니다.ㅠㅠ
                            대화보기
                            • 박민호
                              안녕하세요? 이고잉님 질문이 있습니다.^^
                              강의 5/6 에서 public class MethodDemo7 {
                              public static String numbering(int init, int limit) {
                              int i = init;
                              String output = "";
                              while (i < limit) {
                              output += i;
                              i++;
                              }
                              return output;
                              }


                              이부분이 output 에 왜 1234 가 담기나요? 처음에는 output이 0 이니까 output+1은 1 이고
                              그다음엔 output에 1이 담기고 i값이1에다가++ 하면 2 이니깐 3 아닌가요? 2가 어떻게 담길수가 잇나요?

                              제가 아예 잘못이해한거라면 output이라는값은 고정적으로 0인건가요?설명주실때
                              output = output+1 이라고 설명주셧는대..이부분이랑 뭔가 상관관계가 전혀 안맞아서요..
                            • Astron
                              C++을 배우면서 어설프게 넘어갔던 부분들을 자바를 보면서 이해하고 갑니다 ㅋㅋㅋ
                              설명을 참 잘해주십니다 항상 감사합니다
                            • 자바를자바라
                              꾸준한 복습으로 리턴문이해하였읍니다. 개인적으로 생애처음 접해보는 생소한 분야라 흡수가 아주 느리지만
                              꼭 정복(?)해야하는 처지라.. 앞으로도 꾸준히 달려야겠어요. 이고잉님 너무 감사드립니다. 어쩌면 제 인생에 구원자가 되실수도 ㅎ
                            • 자바를자바라
                              한달정도 매일매일 꾸준하게 반복 정주행중입니다. 도움이 많이되고있어요 감사합니다 열심히 더 해야죠 ㅠㅠ
                              대화보기
                              • egoing
                                저런! 함수는 입력 값을 어떤 출력 값으로 변경하는 것입니다. 이 함수 안에서 리턴 뒤에 있는 값이 츨력값이 됩니다. 포기하지 마세요@
                                대화보기
                                • 자바를자바라
                                  정주행해서 여기까지 잘왔는데 리턴에서 막히네 ㅠㅠ
                                버전 관리
                                egoing
                                현재 버전
                                선택 버전
                                graphittie 자세히 보기