본문 바로가기

코딩공부/JAVA

JAVA method [3] - 메소드의 출력

- 수업소개 -

메소드를 실행시켰을 때 그 결과가 값이 되도록 할 수 있다면 메소드는 아주 많은 곳에서 사용할 수 있게 됩니다. 여기서는 return 키워드를 이용해서 메소드를 어떤 값의 표현식이 되도록 하는 방법을 살펴보겠습니다.

 

 

다음의 코드를 살펴보자

System.out.println(Math.floor(1.1));

이 코드에서 Math.floor(1.1) 은 1.0이라는 값이 된다. 이러한 함수의 output 을 파일에 저장하거나, 이메일을 보내거나 소리를 내거나 등 여러가지 용도로 사용할 수 있다.

 

우리가 만든 printTwoTimes() 메소드의 내용을 보면, println()이라고 하는 모니터에 출력하는 기능까지 포함되어 있어 뭔가 실행결과를 파일에 쓰게하고 싶을 때 그대로 사용할 수 없게된다.

public class WhyMethod {

	public static void main(String[] args) {
		        	  //인자, argument
		printTwoTimes("a", "-");
		// 100000000
		printTwoTimes("a", "*");
		// 100000000
		printTwoTimes("a", "&");
		printTwoTimes("b", "!");
	}

    								//매개변수,parameter 
	public static void printTwoTimes(String text, String delimiter) {
        System.out.println(delimiter);
        System.out.println(text);
        System.out.println(text);
    }
	 
}

 

writeFileTwoTimes() 라는 새로운 이름의 메소드를 만들고 내용으로 파일을 저장하는 기능을 추가해서 사용할 수 있다.

import java.io.FileWriter;
import java.io.IOException;

public class WhyMethod {

	public static void main(String[] args) throws IOException {
		        	  //인자, argument
		printTwoTimes("a", "-");
		// 100000000
		printTwoTimes("a", "*");
		// 100000000
		printTwoTimes("a", "&");
		printTwoTimes("b", "!");
		writeFileTwoTimes("c", "---");
	}

    								//매개변수,parameter 
	public static void printTwoTimes(String text, String delimiter) {
        System.out.println(delimiter);
        System.out.println(text);
        System.out.println(text);
    }
	
	public static void writeFileTwoTimes(String text, String delimiter) throws IOException {
		FileWriter fw = new FileWriter("output.txt");
		fw.write(delimiter+"\n");
		fw.write(text+"\n");
		fw.write(text+"\n");
		fw.close();
	}
	 
}

 

실행결과 output.txt 파일 생성 확인

 

즉, 연산 결과를 어떻게 사용하느냐에 따라서 메소드를 계속 만들어야 되는 상황이 온다.

해결방법은?

TwoTimes() 라는 메소드를 만들고 그 메소드의 output이 값(반환값)이 되도록 return 값을 주어 여기저기서 재사용할 수 있도록 한다.

 

메소드의 return 값 예제

[예제] OutputMethod 클래스 파일 생성

a() 라는 메소드를 만들고 이 메소드를 실행시키면, a() 가 'a' 가 되도록 한다.

one() 이라는 메소드는 '정수 1'이 되도록 한다.

 

프로그램 실행이 끝날 때 리턴을 주게 되면 a 라는 메소드는 return 다음에 나오는 값("a")이 된다. 

public class OutputMethod {

	public static void main(String[] args) {
		System.out.println(a());
        System.out.println(one());
	}
	public static String a() {
        // ... 
        return "a"; //프로그램 실행이 끝날 때 return
    }
     
    public static int one() {
        return 1; //프로그램 중간에 return 시, 여기서 메소드가 종료된다. 이후 코드는 실행되지 않음
        //...
    }
}

실행결과

 

Return

  1. 메소드 return 뒤에 있는 값이 그 메소드의 실행 결과가 된다.
  2. return 은 메소드를 종료시키는 역할을 한다. 따라서 return 다음에 나오는 코드는 실행되지 않고 종료된다.
  3. 메소드는 리턴값이 어떤 데이터 타입인지를 정해줘야한다.
    public static String a() {} 에서 String은 return 할 데이터의 타입이다.
    public static int b() {} 는 return 값으로 int형 데이터를 넘겨준다.
    public static void main(String[] args){} 에서 void 는 "리턴값이 없다"라는 의미이다.

 

[실습] WhyMethod.java 파일을 개선해서 TwoTimes() 라는 메소드를 만들어 실행결과를 리턴하도록 개선해보자

 

TwoTimes() 는 화면에서 출력한다는 기능을 빼버리고 리턴값을 갖고 있기 때문에 여러곳에서 사용될 수 있다. 예를 들어 파일에 저장한다.

import java.io.FileWriter;
import java.io.IOException;

public class WhyMethod {

	public static void main(String[] args) throws IOException {

		printTwoTimes("a", "-");
		System.out.println(twoTimes("a", "="));

		writeFileTwoTimes("b", "*");
		FileWriter fw = new FileWriter("out.txt");
		fw.write(twoTimes("a", "*"));
		fw.close();
		
		printTwoTimes("a", "&");
		//아래는 예시일뿐 실제로 동작하는 코드는 아님 
//		Email.send("test@a.com","two times a", twoTimes("a","&"));
		
	}
	public static String twoTimes(String text, String delimiter) {
		String out = "";
		out += out + delimiter + "\n";
		out += out + text + "\n";
		out += out + text + "\n";
		return out;
	}


	public static void printTwoTimes(String text, String delimiter) {
        System.out.println(delimiter);
        System.out.println(text);
        System.out.println(text);
    }
	
	public static void writeFileTwoTimes(String text, String delimiter) throws IOException {
		FileWriter fw = new FileWriter("output.txt");
		fw.write(delimiter+"\n");
		fw.write(text+"\n");
		fw.write(text+"\n");
		fw.close();
	}
	 
}