해당 포스트는 나도코딩의 자바 클래스를 참조하여 작성하였다.

https://opentutorials.org/course/1223/5369

 

메소드 - 생활코딩

지금까지 배운 것으로도 얼마든지 프로그램을 만들 수 있다. 반복문, 조건문, 변수, 상수와 같은 것들은 사실상 프로그램을 만드는 가장 중요한 도구들이라고 할 수 있다. 지금부터 배우게 될 메

opentutorials.org

 

 

우리가 클래스를 생성하면 클래스 안의 메소드를 생성해야 한다.

 

 

그렇다면 메소드란 무엇일까?

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

 

우리가 Main클래스를 생성하면 클래스 아래 메소드가 생성된다. 

 

위와 같이 public static void main(String[] args) 부분을 main 메소드라 부르게 되며, 코드 안에 여러 클래스가 존재할 수 있으며, 메소드 또한 코드 내 여러개 존재할 수 있다.

 

 

메소드의 정의와 호출

public class Test {
	public static void print_num() {
		for (int i = 0; i < 10; i++) {
			System.out.println(i);
		}
	}

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

 

위 코드는 Test라는 클래스에 들어있는 두 메소드를 봐볼 필요가 있다.

 

우선 print_num이라는 메소드와 main 메소드가 존재하는데 print_num는 숫자를 출력하는 메소드를 정의하고 있으며, main은 해당 메소드 안에서 호출하는 역할을 맡고 있다.

 

여기서 주의할 사항이 있다면 두 클래스는 static이라는 정적 메소드로 선언되어 있다.

정적 메소드에선 직접적으로 인스턴스 메소드를 호출할 수 없다. 그래서 print_num메소드를 인스턴스 메소드로 변경한다면 출력할 수 없는 문제가 발생한다.

 

위 코드를 실행하는 방법에는 2가지가 있다.

//방법 1
public class Test {
	public static void print_num() {
		for (int i = 0; i < 10; i++) {
			System.out.println(i);
		}
	}

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


//방법 2
public class Test {
	public void print_num() {
		for (int i = 0; i < 10; i++) {
			System.out.println(i);
		}
	}

	public static void main(String[] args) {
		Test test = new Test();
		test.print_num();
	}
}

 

방법 2는 Test클래스의 객체를 생성해 직접 호출하는 방식이다. 

 

위 방법을 사용한다면 print_num 메소드가 인스턴스 메소드여도 생성된 객체를 통해 호출하는게 가능하다.

 

 

Main

 

코드를 작성할 때 public static void main(String[] args)가 이끄는 중괄호 안에 로직을 작성해야 한다.

 

코드를 실행하면 main메소드를 통해 실행되기 때문에 우리는 main메소드를 통해 코드를 작성하는 것이고, 자바는 main메소드를 실행하는 관계라 볼 수 있다.

 

 

재활용성

 

우리가 print_num()을 5번 실행하고자 한다면 아래와 같이 작성할 수 있다.

public class Test {

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

 

위와 같이 반복문을 5개 생성하여 출력할수도 있지만 1000번 출력하고자 한다면 1000번 반복문을 생성할 수 없을 것이다.

 

public class Test {
	public void print_num() {
		for (int i = 0; i < 10; i++) {
			System.out.println(i);
		}
	}

	public static void main(String[] args) {
		Test test = new Test();
		test.print_num();
		test.print_num();
		test.print_num();
		test.print_num();
		test.print_num();
	}

}

 

하지만 이처럼 코드를 작성한다면 결과는 같고 로직은 현저히 줄어들었다. 

이러한 것을 코드의 재활용성이라고 한다.

 

 

매개변수

 

메소드의 입력 값은 매개변수에 영향을 받는다.

이전에 작성했던 print_num에서0~9까지가 아닌 5까지 출력하고 싶다면 매개변수를 활용하여 출력할 수 있다.

public class Test {
	public void print_num(int a) {
		for (int i = 0; i < a + 1; i++) {
			System.out.println(i);
		}
	}

	public static void main(String[] args) {
		Test test = new Test();
		test.print_num(5); //0 ~ 5까지 숫자 출력
	}

}

 

해당 코드에서 main함수 내에서 메소드 호출 시 5의 값을 인자로 주었다. 그러면 정수형 변수 a에 해당 인자를 매개변수로 삼고, 반복문의 범위를 조절하여 원하는 범위 내 숫자를 출력할 수 있게 되었다.

 

매개변수는 1개가 아닌 복수의 인자를 받을 수 있다.

public class Test {
	public void print_num(int a, int b) {
		for (int i = a; i < b + 1; i++) {
			System.out.println(i);
		}
	}

	public static void main(String[] args) {
		Test test = new Test();
		test.print_num(3, 6);	//3 ~ 6까지의 값 출력
	}
}

 

이처럼 매개변수 a는 시작값, b는 종료값으로 받아서 출력문의 범위를 조정할 수 있다.

 

자료형에 따라 매개변수의 속성을 설정하면 되며, 위와 같은 방법으로 작성할 수 있다.

 

 

 

return

 

public class Test {
	int result = 0;	//출력값을 더해 저장할 변수
	public int print_num(int a, int b) {
		for (int i = a; i < b + 1; i++) {
			result += i;
		}
		return result;
	}

	public static void main(String[] args) {
		Test test = new Test();
		int re_value = test.print_num(3, 6);
		System.out.println(re_value);	//18 출력
	}

}

 

print_num 메소드를 return을 사용하여 작성하였다.

 

void는 반환되는 값이 없을 때 사용된다. 그러나 해당 코드에서는 result를 반환하므로 void는 사용하지 않는다.

그리고 반환되는 result의 자료형이 정수형이므로 void 대신 반환되는 값의 자료형을 작성해준다.

 

이제 main 메소드를 확인해보자.

마찬가지로 print_num 메소드가 정적 메소드를 사용하지 않았으므로 객체를 생성해주고 반환값을 저장할 변수를 생성해준다.

그렇게 반환값을 저장한 변수를 출력해보면 3부터 6까지의 합인 18이 출력된다.

 

return도 마찬가지로 여러개의 return을 사용할 수 있다.

단, return은 메소드를 종료시키는 역할을 하므로 메소드 별로 구분해서 사용하거나 조건을 부여해서 사용하면 된다.