본문 바로가기

Development

(Java) Chapter6. Method

1. 개론

public static void sayHello( ) {                // 주로 동작과 관련된 개념으로 동사로 변수를 정의
    System.out.println("안녕하세요? 메소드입니다.");  // 1. 메소드 정의
}

public static void main(String[] args) {
    // Method 호출
    System.out.println("메소드 호출 전");
    sayHello();                                 // 2. 메소드 호출
    System.out.println("메소드 호출 후");          // 3. 호출 메소드 출력
}

※ 메소드는 메인영역 밖에서 정의하고 메인영역에서 호출 및 출력을 함

 

2. 전달값이 있는 메소드

public static void power(int number) {    // number(Parameter, 매개변수) 라는 정수를 받음
    int result = number * number;         // 함수 정의
    System.out.println(number + " 의 2 승은 " + result); // 함수를 사용하면 다음과 괕이 출력
}
// 전달값이 두 개 이상인 경우 (세 제곱수 구하기)
public static void powerByExp(int number, int exponent) {
    int result = 1;
    for (int i = 0; i < exponent; i++) {      // exponent 를 0 ~ 전달값-1 만큼 실행
        result *= number;                     // 처음은 2*2, 다음은 거기에 한 번 더 *2
    }
    System.out.println(number + " 의 " + exponent + " 승은 " + result);
}

public static void main(String[] args) {
    // 전달값, Parameter
    // 2 -> 2 * 2 = 4
    // 3 -> 3 * 3 = 9

    // Argument, 인수
    power(2);          // 2 * 2 = 4
    power(3);          // 3 * 3 = 9

    powerByExp(2, 3);       // 2 * 2 * 2 = 8
    powerByExp(3, 3);       // 3 * 3 * 3 = 27
    powerByExp(10, 0);      // 1
}

※ 메소드에서 출력을 정의했으므로 입력만 하면 바로 출력값으로 반환

 

3. 반환

// 호텔 전화번호
public static String getPhoneNumber() {       // void 는 반환값이 없을 때 사용,
    String phoneNumber = "02-1234-5678";
    return phoneNumber;
}

// 호텔 주소
public static String getAddress() {
    return "서울시 어딘가";
}

// 호텔 엑티비티
public static String getActivities() {
    return "볼링장, 탁구장, 노래방";
}

public static void main(String[] args) {
    // 반환값, Return
    String contactNumber = getPhoneNumber();
    System.out.println("호텔 전화번호 : " + contactNumber);

    String address = getAddress();
    System.out.println("호텔 주소 : " + address);

    System.out.println("호텔 엑티비티 : " + getActivities());
}

※ 반환값을 정의하고 메인영역에서 출력 선언

 

4. 전달값과 반환값이 동시에 있는 경우

//    public static void power(int number) {
//        int result = number * number;
//        System.out.println(number + " 의 2 승은 " + result);
//    }

    public static int getPower(int number) {
        int result = number * number;
        return result;
        // return number * number; 로 줄여도 상관 없음

    }

//    // 전달값이 두 개 이상인 경우 (세 제곱수 구하기)
//    public static void powerByExp(int number, int exponent) {
//        int result = 1;
//        for (int i = 0; i < exponent; i++) {
//            result *= number;
//        }
//        System.out.println(number + " 의 " + exponent + " 승은 " + result);
//    }

    public static int getPowerByExp(int number, int exponent) {
        int result = 1;                                 // ctrl + alt + l 하면 인덴트 자동정렬
        for (int i = 0; i < exponent; i++) {
            result *= number;
        }
        return result;
    }

    public static void main(String[] args) {
        // 전달값과 반환값이 같이 있는 메소드
        int retVal = getPower(2);        // retVal 에 받는다
        System.out.println(retVal);             // 2 * 2 = 4

        retVal = getPower(3);
        System.out.println(retVal);             // 3 * 3 = 9

        retVal = getPowerByExp(3, 3);
        System.out.println(retVal);             // 3 * 3 * 3 = 27

        System.out.println(getPowerByExp(2, 4)); // 2의 4승 = 16
    }

5. 오버로딩

    public static int getPower(int number) {
        int result = number * number;
        return result;
    }

//    public static int getPowerStr(String strNumber) {       // "4"와 같은 문자열로 받는 메소드 인 경우는?
//        int number = Integer.parseInt(strNumber);           // 문자열에서 정수 추출
//        return number * number;
//    }

    public static int getPower(String strNumber) {       // str을 지우면?
        int number = Integer.parseInt(strNumber);
        return number * number;
    }

    public static int getPowerByExp(int number, int exponent) {
        int result = 1;                                 // ctrl + alt + l 하면 인덴트 자동정렬
        for (int i = 0; i < exponent; i++) {
            result *= number;
        }
        return result;
    }



    public static void main(String[] args) {
        // 메소드 오버로딩 (메소드 여러개 정의)
        // 같은 이름의 메소드를 여러 번 선언
        // 조건1. 전달값의 타입이 다르거나
        // 조건2. 전달값의 갯수가 다르거나 (예, 앞은 정수로 받는데 뒤는 실수로 받으면 오버로딩 불가)
        System.out.println(getPower(3));    // 3 * 3 = 9
        // System.out.println(getPowerStr("4");     // 원래 리턴값 출력
        System.out.println(getPower("4")); // 4 * 4 = 16, 메소드 오버로딩 된 결과
    }

 

6. 메인 메소드

    public static void main(String[] args) {        // 이게 바로 메인메소드, 처음 진입 부분, 반환값 없음, 전달값은 문자열 여러개
        for (String s : args) {
            System.out.println(s);
        }
// Edit configurations 활용해서 입력값 전달하여 메인메소드 호출 방법
        // 도서관리 기능
        // 1. 도서 조회
        // 2. 도서 대출
        // 3. 도서 반납
        if (args.length == 1) {
            switch (args[0]) {
                case "1":
                    System.out.println("도서 조회 메뉴입니다.");
                    break;
                case "2":
                    System.out.println("도서 대출 메뉴입니다.");
                    break;
                case "3":
                    System.out.println("도서 반납 메뉴입니다.");
                    break;
                default:
                    System.out.println("잘못 입력하셨습니다.");
            }
        } else {
            System.out.println("사용법) 1~3 메뉴 중 하나를 선택하세요.");
        }
    }

※ 메소드는 같은 기능을 하는 동작에 대하여 코드를 단순화 하기 위해 사용 (함수를 가져오면 코드행을 줄임)

※ 메소드의 범위는 선언된 영역 안에서만 기능함(지역변수), 외부에서 기능하기 위해서는 전달값으로 정의하여 불러오기

※ 프로그램 디렉토리 영역의 current file누르면 나오는 Edit configurations에서 입력값을 직접 전달하여 메인메소드 호출 가능

 

'Development' 카테고리의 다른 글

(Java) Chapter5. Array  (0) 2023.01.06
(Java) Chapter4. 제어문  (0) 2023.01.04
(Java) Chapter3. 문자열  (0) 2023.01.04
(Java) Chapter 1 환경설정 및 자료형  (0) 2023.01.03