[Java] 메소드 (1)

당당·2023년 4월 19일
0

Java

목록 보기
14/20

https://opentutorials.org/module/4397

📔설명

메소드는 다른 컴퓨터 언어에서는 함수(function)이라고 부르는 것이다.

메소드는 정리정돈의 도구이다!

서로 연관된 코드를 모아서 그룹핑하고 이름을 붙이면 메소드이다.

복잡한 소스코드도 깔끔하게 정리할 수 있다.


🙄익숙한 메소드

floor도 메소드이고,
println도 메소드이다.

그리고.. main도 메소드다!

즉, 자바는 클래스를 만들고, 클래스를 실행시키기 위해서는 반드시 약속된 이름의 main 메소드를 정의해 놓으면, 자바는 클래스 실행 시 main을 실행하도록 약속되어있다.


🥚메소드 기본 형식


public class WhyMethod {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("-");
		System.out.println("B");
		System.out.println("B");
		
		System.out.println("-");
		System.out.println("B");
		System.out.println("B");
	}

}

코드와 코드 사이에 1억줄의 소스코드가 있는데, 이 중 "B"를 "A"로
바꿔야 한다고 생각해보자.

너무 번거롭고 1억줄이 있다면, 찾기도 어려울 것이다.

여기서, 메소드가 우리를 살려준다.
연관된 코드를 그룹핑해서 이름을 붙일 것이다.


public class WhyMethod {
	public static void printTwoTimesA() { //메소드
		System.out.println("-");
		System.out.println("A");
		System.out.println("A");
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		printTwoTimesA();
		
		System.out.println("-");
		System.out.println("A");
		System.out.println("A");
		
		System.out.println("-");
		System.out.println("A");
		System.out.println("A");
	}

}

결과는 똑같으나, 코드는 훨씬 간단해졌다.

여기서, 이전에 배웠던 Shift+Alt+M을 누르면 이클립스가 알아서 메소드로 만들어준다.


📎메소드의 입력

만약, A가 아니라 B를 출력하고 싶다면 위의 메소드를 어떻게 수정해야할까?


public class WhyMethod {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		printTwoTimes("a");
		
		printTwoTimes("a");
		
		printTwoTimes("a");
		printTwoTimes("b");
	}
	public static void printTwoTimes(String text) {
		System.out.println("-");
		System.out.println(text);
		System.out.println(text);
	}

}


실행결과는 이렇다.




여기서, -가 아니라 구분자를 다른 것으로 변경하고 싶을때는 어떻게 해야 할까?


public class WhyMethod {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		printTwoTimes("a","-");
		
		printTwoTimes("a","*");
		
		printTwoTimes("a","&");
		printTwoTimes("b","!");
	}
	public static void printTwoTimes(String text,String delimiter) {
		System.out.println(delimiter);
		System.out.println(text);
		System.out.println(text);
	}

}

✋🏻main(String[] args)

main이란 메소드 뒤의 (String[] args)에 대해 알아보자.
String[]문자열 배열이고, args는 main이라는 메소드를 자바가 실행해줄 때 입력값을 뜻한다.

즉, 사용자가 실행할 때 주입해준 변수를 메소드 안에서 사용할 수 있게 되는 것이다.

📕용어 정리

public static void printTwoTimes(String text,String delimiter)

여기서 text, delimiter와 같은 변수를 매개변수(parameter) 라 부른다.


printTwoTimes("a","-");

여기서 "a"와 같은 실제 값을 인자(argument) 라고 한다.


📰메소드의 출력

System.out.println();

화면에 출력하고 싶을 땐 println을 사용하면 된다

Email.send("hopang016@naver.com","Math floor",Math.floor(1.1));

만약, 이메일로 Math floor라는 제목과, 실행결과를 내용으로 담고 싶다면
(실제로는 없는 메소드) 아래와 같이 하면 된다.




하지만 우리가 이전에 작성했던 printTwoTimes 메소드를 살펴보자.
메소드 안에는 println 구문까지 들어있어 파일이나 다른곳에 출력할 수 없다.

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

public class WhyMethod {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		printTwoTimes("a","-");
		
		printTwoTimes("a","*");
		
		printTwoTimes("a","&");
		printTwoTimes("b","!");
	}
	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 fWriter=new FileWriter("output.txt");
		fWriter.write(delimiter+"\n");
		fWriter.write(text+"\n");
		fWriter.write(text+"\n");
		fWriter.close();
	}

}

이렇게 따로 메소드를 작성해줘야하는 번거로움이 생긴다.

그러므로 메소드의 return값을 값이 되도록 해보자.


public class OutputMethod {

	public static String a() {
		//..
		return "a";
	}
	public static int one() {
		return 1;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(a());
		System.out.println(one());
	}

}


return 값 뒤의 값이 메소드의 실행 결과가 된다.
또한 return은 메소드를 종료시키는 코드이기도 하다.
return값의 데이터 타입도 꼭 지정해줘야한다.
void는 return값이 없는 것이다.



이전 WhyMethod.java를 개선해보자.

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

public class WhyMethod {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		System.out.println(twoTimes("a", "-"));
		
		FileWriter fw=new FileWriter("out.txt");
		fw.write(twoTimes("a", "*"));
		fw.close();
		
//		Email.send("hopang016@naver.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;
	}

}

이렇게 수정하면, 하나의 메소드를 다같이 쓸 수 있다!

profile
MySQL DBA 신입 지원

0개의 댓글