메소드를 활용하는 이유, 입출력

muz·2021년 3월 24일
0

Java

목록 보기
3/21
post-thumbnail

🤔 메소드(method)

메소드는 코드를 재사용할 수 있게 해준다. 직접 메소드를 만드는 것을 '메소드를 정의한다'라고 하고, 만든 메소드를 실행하는 것을 '호출한다'라고 말한다.

메소드를 이용하여 구구단 구현하기

public class makeMethod {

    public static void gugudan() {
        for (int i = 2; i < 10; i++) {
            System.out.println(i+"단 시작!");
            for (int j = 1; j < 10; j++) {
                System.out.println(i+" * "+j+" = "+ i*j);
            }
        }
        System.out.println("---구구단 게임 종료!--");
    }
    public static void main(String[] args) {
        System.out.println("---구구단 게임 시작!---");
        gugudan();
    }
}

위의 코드에서 public static void gugudan() { ... } 부분이 '메소드를 정의'한 것이고, main() {}의 gugudan(); 부분이 바로 '메소드를 호출'한 것이다.

메소드를 사용하는 이유

메소드는 왜 사용하는 것일까? 사실 메소드를 사용하지 않고 main(){}부분에 한 번에 선언해주어도 된다. 하지만 main(){}에 한 번에 선언하게되면 중복되는 코드가 발생할 수 있으며, 코드의 가독성이 떨어지고 유지보수가 어려워진다.

main 메소드

main메소드는 일종의 규칙이다. 구현하고 싶은 프로그램이 있다면 반드시 main()의 중괄호 안에 기대하는 로직을 위치시켜야 한다. 이는 약속이다.

main에 모두 구현한 코드 vs 메소드를 사용한 코드

main에 한 번에 구현한 구구단

public class notMakeMethod {
    public static void main(String[] args) {
        System.out.println("---2단 공부하기---");
        for(int j = 1; j < 10; j++) {
            System.out.println("2 * "+ j +" = "+2*j);
        }
        System.out.println("---2단 공부 완료!---\n");

        System.out.println("---3단 공부하기---");
        for(int j = 1; j < 10; j++) {
            System.out.println("3 * "+ j +" = "+3*j);
        }
        System.out.println("---3단 공부 완료!---\n");

        System.out.println("---4단 공부하기---");
        for(int j = 1; j < 10; j++) {
            System.out.println("4 * "+ j +" = "+4*j);
        }
        System.out.println("---4단 공부 완료!---\n");

        System.out.println(".... \n");

        System.out.println("---9단 공부하기---");
        for(int j = 1; j < 10; j++) {
            System.out.println("9 * "+ j +" = "+9*j);
        }
        System.out.println("---9단 공부 완료!---\n");
        
    }
}

위의 코드를 살펴보면, 아래의 부분이 숫자만 바뀌고 계속 반복되는 것을 알 수 있다.

System.out.println("---2단 공부하기---");
        for(int j = 1; j < 10; j++) {
            System.out.println("2 * "+ j +" = "+2*j);
        }

이렇게 main함수에 모든 코드를 작성하게 되면 코드가 모듈화되어있지 않아 가독성도 떨어지고, 중복되는 부분도 발생하게 된다. 위의 코드를 메소드를 이용하여 정리해보자.

메소드를 이용해 정리한 구구단 코드

public class notMakeMethod {

    public static void howGugudan(int i) {
        System.out.println("---" + i + "단 공부하기---");
        for(int j = 1; j < 10; j++) {
            System.out.println(i + " * "+ j +" = "+i*j);
        }
        System.out.println("---" + i + "단 공부 완료!---\n");
    }
    public static void main(String[] args) {
        howGugudan(2);
        howGugudan(3);
        System.out.println(".... \n");
        howGugudan(9);
    }
}

굉장히 길었던 위의 코드가 메소드 활용을 통해 중복되는 부분이 제거되고, 보다 간결해진 것을 확인할 수 있다.

🤔 메소드의 입출력

메소드의 입력

매개변수(parameter)와 인자

메소드의 입력은 매개변수(parameter)를 통해 이루어진다. 매개변수는 함수 호출 시 datatype에 맞는 적절한 값을 넣어주면 된다. 다음 예제를 참고해보자.

public class inoutMethod {

    public static void repeatGo(int i) {
        int num = i;
        System.out.println("num의 초기값은 " + i +"입니다.");
        for(num=1; num < 5; num++) {
            System.out.println("현재 num의 값은 " + num +"입니다.");
        }
    }
    public static void main(String[] args) {
        repeatGo(0);
    }
}

위의 예제에서는 repeatGo()함수 호출 시 괄호 안에 0을 넣었으므로 num의 초기 값은 0이 된다.

복수의 인자

여러개의 입력값을 전달하고 싶다면 매개변수를 여러개 사용하면 된다. 위의 예제에서 매개변수를 이용하여 반복의 시작과 끝을 정해보자.

public class inoutMethod {

    public static void repeatGo(int i,int j) {
        int num;
        System.out.println(i +"에서 시작해서, " + (j-1) +"까지 반복합니다.");
        for(num=i; num < j; num++) {
            System.out.println("현재 num의 값 : " + num);
        }
    }
    public static void main(String[] args) {
        repeatGo(0,6);
    }
}

메소드의 출력

메소드 내에서 사용한 return은 return 뒤에 따라 오는 값을 메소드의 결과로 반환함과 동시에 메소드를 종료시킨다. 중요한 것은 메소드 선언 시 public static 반환형 함수명(매개변수) 형식으로 작성해야 한다는 것이다.
메소드가 반환할 값을 명시하게 되면, 메소드는 반드시 해당하는 데이터 형의 값을 반환한다는 것을 보장할 수 있다. 만약 반환 값이 없다면 public static void 함수명(매개변수)의 형태로 작성하면 된다.

public class inoutMethod {

    public static int repeatGo(int i,int j) {
        int num;
        int total = 0;
        System.out.println(i +"에서 시작해서, " + (j-1) +"까지 합산합니다.");
        for(num=i; num < j; num++) {
            total += num;
        }
        return total;
    }
    public static void main(String[] args) {
        System.out.println(repeatGo(0,6));
    }
}
profile
Life is what i make up it 💨

0개의 댓글