해당 포스트는 나도코딩의 자바 클래스를 참조하여 작성하였다.
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은 메소드를 종료시키는 역할을 하므로 메소드 별로 구분해서 사용하거나 조건을 부여해서 사용하면 된다.
'JAVA > SOUP' 카테고리의 다른 글
[JAVA / SOUP] 클래스와 인스턴스 그리고 객체 (0) | 2024.04.04 |
---|---|
[JAVA / SOUP] 입력과 출력 (1) | 2024.04.04 |
SOUP_1주차 활동일지(입출력, 조건문, 반복문, 1차원 배열, 문자열) (2) | 2024.03.26 |