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. 심영
    메소드에서 난이도가 팍 올라가네요

    잘 보고 갑니다

    수업들으면서 궁금했던게 해결됐어요
  2. 이재양
    7라인 string output = " "; 이거를
    int output = 0; 로 해야 되고


    20라인에서도 string 을 int로 변경해야겠죠
    대화보기
    • Schiele
      눈이 번쩍 뜨이는 강의입니다. 정말 감사합니다 ㅠ
    • 고요섭
      //잼버거
      output이 String이기 때문에 숫자를 문자로 인식하여서 그렇습니다.

      실제 더하기 개념을 사용하시려면 String 부분을 모두 int로 바꾸고 0으로 초기화를 해야겠네요.
    • 잼버거
      안녕하세요 강의를 듣다가 이해가 안되는 부분이 있어서요
      5번째 메소드 강의를 보면 output + = i ; 이 부분이 있는데요
      이 개념이 1+2 =3 이 아니라
      1+2= 12 이런 개념인건가요? 그럼 1+2=3으로 만드려면 어떻게 코딩해야하죠?
    • ㅁㄴㅇㄹ
      i = init; 이 구문은 i의 시작점이 init이라는 것입니다.
      while 문을 for 문으로 바꾸어 보면 이해가 되실 텐데요

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

      위 코드는 제시하신 코드와 완전히 똑같이 작동합니다.
      i를 init에서 시작해서 limit보다 작을 동안 i를 1씩 늘려가면서 코드를 수행한다는 의미로 해석하시면 됩니다.

      i=init은 그냥 변수 i의 값을 변수 init의 값과 같게 한다는 것이지 그 역할까지 같게 한다는 의미가 아닙니다.
      대화보기
      • Kangho Lee
        위의 예제에서 while문에서 init < limit가 참이고 init이 변하지 않기 때문에 무한루프를 돌 수 밖에 없습니다.
        대화보기
        • Youngin Jerry Kwon
          public static void numbering(int init, int limit) {
          int i = init;
          while (i < limit) {
          System.out.println(i);
          i++;
          위의 제대로 된 코드에서
          while(i< limit)에 i 대신에 코드 보기전에 만들어볼 때, init을 넣었더니
          무한루프를 타더라고요... 그런데 저기 위에서 i를 init으로 정의했기 때문에 init을 넣어도 같은 결과가 나오지 않고
          왜 무한루프를 탈까요??
        • 지나가요
          값은 가지고있고 출력하라는 문이있으면 출력해주겠지요?
          대화보기
          • 지나가는나그네
            members라는 변수에 값을 넣고 출력하는 문이 없네요~
            대화보기
            • ywChoi
              감사합니다!
            • Harrison
              System.out.println(members[0]);

              결과값 최전혁이 나와요.
              대화보기
              • 청둥오리
                package org.hyerin.javatutorials.method;

                public class ReturnDemo {

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

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

                값이 안나오는 코드인가요??? 왜 저는 값이 안나오죠??

                return을 통해 members의 3명이 출구로 나온다는 것은 알겠는데 나와서 어떻게 된다는 것인지요??
              • yoon88
                완료
              • yoon88
                4번 영상까지 완료
                5번 시작
              • 고현우
                궁금한 점이 있을때 코드를 바꾸면서 직접 해보면서 조금이나마 메소드를 이해한 것 같습니다 허허 고맙습니다.
              • Jung SuHyun
                열심히 알려주셨는데 아직 잘 모르겠습니다 ㅜㅜ 돌려보기 신공을 하겟습니다
              • 미림_likelion
                수강 완료했습니다. 감사합니다.
              • JUNTAE
                Thank you for amazing lectures. As I am taking this course via overseas computer, I am unable to type in Korean. I am majoring at computer science in Chicago. the concept was pretty confusing to understand. This lecture is seriously huge help for me. Thank you so much. Sincerely.
              • 이거때문에 계속 헷갈렸네요. 감사합니다.
                대화보기
                • 서희진
                  정말정말 이해하기 쉽게 설명해주시는 거 같아요. 감사합니다!!!!!
                • Zzolain
                  자답합니다.

                  이후 '유효범위'라는 강의에 그 설명이 있군요~!
                  https://opentutorials.org......447
                  대화보기
                  • Zzolain
                    메소드 내에 배열 값을 담는 변수로 members라는 이름을 사용하고,
                    그 다음 메소드에서 이전 메소드의 return 값을 담는 변수로 members라는 같은 변수 이름을 중복해서 사용하셨는데
                    변수 이름은 해당 메소드 안에서만 유효한 것이어서 다른 메소드에서 중복하여 사용할 수 있는 것인가요? 아니면 두 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();
                    }

                    }
                  • 제로스
                    txt 파일은 프로젝트 폴더 안에이써요 패키지폴더까지 들어가심 안되욤~~안되~~
                    대화보기
                    • learner
                      package org.opentoutorials.javatoutorials.eclipse;

                      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{
                      BufferedWriter out= new BufferedWriter(new FileWriter("out.txt"));
                      out.write(result);
                      out.close();
                      } catch (IOException e) {
                      }
                      }

                      }

                      이렇게 그대로 썼는데 화면에 출력은 되는데 txt 파일은 안 만들어지네요. 왜 그럴까요?ㅠㅠ
                    • 정말 감사합니다 이해가 잘안되는 메소드부분이였는데 이렇게 올려주신 덕분에 이해가
                      쏙쏙 잘됐습니다.!! 진심으로 감사드립니다!!!
                    • Weini Jeon
                      아 긴 답변 감사합니다. 제가 알고 싶던 문제들 여러가지를 한꺼번에 답변해주셨네요 정말 감사합니다 ^^
                      대화보기
                      • 지나가다가
                        리턴에 대해 이해가 어렵다고 하셔서 씁니다.
                        저는 오픈 튜토리얼스에서 많이 배우고 있는 사람입니다.

                        1. 함수는 입력과 출력부분이 있습니다.
                        2. 함수의 입력/출력 부분은 생략될 수 있습니다.
                        (단, 입력부분은 생략되더라도 '()'는 남습니다<-- 위 예에서 getMember1() <---괄호는 남아있습니다. )

                        함수의 정의를 한번 보면...
                        http://terms.naver.com......219
                        복잡하게 쓰여 있습니다. 간단히는 입력값이 있으면 출력값이 있다는 것이 핵심인듯 합니다.

                        그래서 함수를 자판기와 같다고 할 수 있습니다.
                        자판기 입력구(동전투입구)에 돈을 넣어주면...
                        내부 시스템에 의해 돈이 캔(깡통 음료수)로 바뀌어...
                        배출구로 나옵니다.

                        함수는 자판기와 같다고 했지만...사람/동물과도 같습니다.
                        입(입구)으로 먹을 것을 먹으면...
                        내부에서 소화과정을 거쳐...
                        출구로 대변/소변으로 나옵니다.

                        함수에서 출구를 표시하는 것이 return 부분입니다.

                        왜 출구가 있는가? 왜 출구가 저곳에 있지?
                        이런 의문을 갖으시는 것인가요?

                        언어는 약속입니다. 왜 '주전자'를 '주전자'라고 하죠?
                        그렇게 부르기로 약속했기 때문입니다.
                        다른 이유가 존재하지 않습니다.

                        함수도 마찬가입니다.
                        함수의 모양을 한번보면.
                        -----------------------------------------------------
                        접근제한자 출력타입 함수명(데이터 입구)
                        처리과정(소화과정)
                        데이터 출구(return문)
                        -----------------------------------------------------
                        이모양으로 함수를 만들기로 약속한 것입니다.
                        함수를 만들 때는(정의할 때는) 위와 같이 만들어야 합니다.

                        함수를 왜 사용하나?
                        함수는 프로그램을 쉽게하기 위한 하나의 도구라고 볼 수있습니다.
                        함수는 프로그램 자체에 있는 내장함수를 사용하기도 하고...(내장 함수)
                        사용자가 직접 함수를 만들어 사용하기도 합니다.(사용자 함수)
                        사용자가 직접 만드는 경우를 보면...
                        1. 반복되는 부분이 있다 (반복을 없애자)
                        2. 코딩이 너무 길고 복잡하다 (쉽게 이해되는 코드를 만들자: 단순화)
                        3. 함수는 부품과 같습니다. 기능에 따라 부품을 만들고 이 부품들을 조립하여 프로그램을 만듭니다.
                        부품조립식 프로그램 방식으로는 작게는 함수로 부터 클래스를 거쳐 크게는 프래임워크로 발전한 것으로 생각됩니다. (함수 > 클래스 > 프레임워크; 생각된다는 것은 틀릴 수도 있다는 뜻입니다. 아직은 정확히 모릅니다.)

                        [ 함수의 정의와 사용 ]
                        함수를 정의하고(만들고) 사용하는 방법을 배우시고 사용하다보면...
                        무엇인지 아시게 될 것 같습니다.
                        위 오픈튜토리얼강좌를 보시면 함수를 정의하고...사용하는 부분이 모두 나옵니다.

                        (함수정의 하기)
                        정수값을 입력하면... 1을 더한 값을 출력하는 함수를 만들어 볼까요?
                        --------------------------------------
                        Public int PlusOne(int val) {
                        return val+1;
                        }
                        --------------------------------------
                        입구 : (int val)
                        출구 : return 값
                        입구와 출구가 모두 있습니다.
                        위 함수의 기능은...
                        임의의 정수값을 입력하면 입력값에 1을 더하여 그 결과값을 출력하는 것입니다.

                        (함수 사용하기)
                        위에서 정의한 함수를 사용해보면...
                        메인함수에서 사용한다고 가정하겠습니다.
                        result=PlusOne(5);
                        result 값에 얼마가 들어 있을까요.
                        사용자 함수 PlusOne에 5가입력되었고 이 함수 내부에서 1을 더하여 결과 6를 출력할 것이고
                        이 값을 result변수에 대입하게 될 것입니다.
                        그래서 6이 답이됩니다.

                        그렇다면 7을 대입하면 어떻게 될까요? 8이 될 것입니다.
                        result=PlusOne(7);
                        result ---> 8

                        ==================================================
                        정리하겠습니다.
                        1. 함수는 입력/출력 되는 곳이있다.
                        2. 입력/출력은 생략될 수 있다.
                        .....가) 입력되는 곳이 생략되면 파라메터가 없습니다. ---> 함수명() <-- 괄호만 남습니다.
                        .....나) 출력이 생략되면 return문이 없습니다. 그리고 함수명 앞에 타입명으로 void를 붙입니다.

                        위 강의에서 return문이 없는 함수를 찾아보니...
                        public static void main(String[] args) {
                        System.out.println(getMember1());
                        System.out.println(getMember2());
                        System.out.println(getMember3());
                        }
                        위에서 main이라는 함수명앞에 void가 붙어 있고...
                        return문도 없는 것이 확인됩니다.
                        이렇게 만들고 싶으면 이렇게 만듭니다.
                        main함수는 이렇게 return문이 없게 만들도록 약속되어 있는 것으로 알고 있습니다.
                        다른 함수도 필요에 따라 return문이 없게 만들 수도 그렇지 않게 만들 수도 있습니다.

                        참고로 엑셀에서는...
                        리턴문이 있고 없음에 따라 다르게 구분하고 있습니다.
                        리턴문이 있으면 함수
                        리턴문이 없으면 메서드

                        그런데 자바에서는 구분하지 않고 함수=메서드로 사용하는 것 같습니다.
                        대화보기
                        • Weini Jeon
                          다섯번째 영상에 나오는 리턴에 대한 이야기가 상당히 이해하기 어렵네요. 여섯번째 영상을 보고서야 아사무사하게 감이 오는 거 같습니다만 이미 같은 영상을 세번을 돌려봐도 안개가 걷히질 않네요.
                        • 170329
                          감사합니다.
                        • ksecjh0513
                          감사합니다
                        • J_Project
                          감사합니다
                        • 라의신
                          감사합니다 많은 도움이 되네요
                        • 임홍진
                          감사합니다 리마인드하기 딱이네요
                        • 내이름은이한샘
                          메소드 부분이 쉽지가 않네요. ㅠㅠ 대충넘어가면 이후 제대로 못 배울까봐 다시한번 봐야겠습니다!! 좋은 영상 감사합니다!
                        • 오잉
                          헬로롱
                          대화보기
                          • 배우는중
                            댓글 정리해보면,

                            마지막 예제에서 멤버 모두 출력하고 싶으시면
                            for (String e : members) {
                            System.out.println(e);
                            }

                            추가하시고

                            한명 지정해서 출력하고 싶으시면
                            System.out.println(members[1]);
                          • 김인섭
                            감사합니다.^^
                          • 오오
                            감사합니다
                          • 주현컴퓨터
                            코드 직접 쳐서 보니까
                            그냥 변수 선언만 하고 사용되지 않아서
                            발생하는 오류에요.
                            대화보기
                            • Lee Jung Ah
                              members를 그래서 어떻게 할건지를 정해주지 않아서 그런거 같아서,
                              sysout을 하려고 일반적으로 했더니 오류가 나더라고요. 그래서 구글링 해보니까..

                              마지막을
                              public static void main(String[] args) {
                              String[] members = getMembers();
                              System.out.println(Arrays.toString(members));
                              }
                              이렇게 하시면 되지 않을까요?
                              대화보기
                              • egoing
                                어떤 IOException이 뜨는지 오류 메시지를 알려주시면 도움을 받기 더 쉬울 것 같습니다.
                                대화보기
                                • egoing
                                  어떤 IOException이 뜨는지 오류 메시지를 알려주시면 도움을 받기 더 쉬울 것 같습니다.
                                  대화보기
                                  • egoing
                                    오류를 알려주시면 도움을 받기 더 쉬우실 것 같아요~
                                    대화보기
                                    • 뚜빠뚜빠
                                      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();
                                      }

                                      }

                                      여기서 마지막 'members'에서 오류가 나요 왜 그럴까요..ㅠㅠ
                                    • 뚜빠뚜빠
                                      안녕하세요 저도 FileWriter 랑 IOException e 에서 오류가 발생하고있네요..... 몇번이나 수정하고 찾아보고 해 보았지만 도저히 해결이 안되네요..ㅠㅠ 왜그렇죠?ㅠ
                                    • Grizzle
                                      안녕하세요 . 강의를 듣다가 궁금한것이 있어서 질문드리게 되었습니다. 코드를 리턴한후 메인에서 텍스트 파일로 저장을 할떄 저는 이상하게 FileWriter 랑 IOException e 에서 오류가 발생하고 있습니다 ㅠㅠ 왜 그런 것일까요?
                                    • 마루
                                      이제 입문과정이라 따라는 하는데 어렵네요 ㅠㅠ
                                    • 라떼
                                      점점 어려워 지네요 ㅠ 좋은 강의 감사합니다!
                                    • public static String[] getMembers() {
                                      String[] members = { "최진혁", "최유빈", "한이람" };
                                      return members;
                                      }

                                      public static void main(String[] args) {

                                      String[] members = getMembers();

                                      for(String member : members){
                                      System.out.println(member);
                                      }
                                      }
                                    버전 관리
                                    egoing
                                    현재 버전
                                    선택 버전
                                    graphittie 자세히 보기