course 2021/JAVA

day07 - method

코딩하는토끼 2021. 8. 25. 01:50

> method 메소드 (함수)

<반환 유형> <메소드 이름>(매개변수) { ... } 

반복되는 코드 블록에 이름을 붙인 것 - 반복되는 코드를 줄이고 구조화시켜 가독성을 좋게 함

객체지향프로그램에서 메서드를 '객체가 가져야 할 기능을 구현하기 위해 만든다'고 표현함

method는 다른 method 안에 만들 수 없음 (class 안에/ main 밖에 위치)

 

* return type 반환 유형

메소드를 실행하여 호출한 곳에 반환하는 값의 datatype

반환값이 없는 경우 반환 유형에 void 써줌 (ex. void calSum())

메소드를 호출 시 해당 반환 유형에 맞는 변수에 반환값을 저장해야 함 (ex. int a = calSum(1, 2) ← calSum의 반환 유형이 int인 경우)

* return

1)반환값이 있는 메소드에서 뒤에 연산식과 함께 사용 시 → 값의 반환 & 메소드 종료

! 반환값이 있는 메소드에서는 값의 반환이 필수

ex. return 0;

ex. return sum;

2)void형 메소드(반환값이 없는 메소드)에서 단독 사용 → 메소드 종료

ex. return;

static char randomSt() {
    char c = 0;
    double d = Math.random();  //0이상 1미만의 임의의 실수 받음
    if(d > 0.66) {
        c = 'A';  //d가 0.66보다 크면 c는 A 
    } else if(d > 0.33) {
        c = 'B';  //d가 0.33보다 크고 0.66보다 작으면 c는 B
    } else {
        c = 'C';  //d가 0.33이하라면 c는 C
    }
    return c;
}

//혹은 

static char randomSt() {
    double d = Math.random(); 
    if(d > 0.66) {
        return 'A'; //이렇게 조건에 따라 나누어 바로 반환
    } else if(d > 0.33) {
        return 'B'; 
    } else {
        return 'C';  
    }
}

 

* parameter 매개변수

메소드 실행에 필요한 데이터를 외부에서 받아오기 위해 사용

소괄호( ) 안에 datatype과 함께 선언, 초기화X, 여러개 가능

만약 메소드가 외부에서 받아올 데이터가 없다면 선언하지 않음 - 소괄호는 반드시 써주되 안은 비워둠

ex. int calSum(int start, int end, String s) { ... }

ex. int calSum() { ... }

*배열의 경우

매개변수로 배열을 받는 경우, 소괄호( ) 안에 datatype과 함께 배열 선언 (ex. void method(int[] arr))

배열을 반환하는 경우, 반환유형에 배열datatype[] 쓰기 (ex. int[] method())

//받은 배열을 문자열 형태로 출력하는 메소드
static void method01(int[] a) { //매개변수 배열 - 소괄호 안에 배열 선언
    System.out.println(Arrays.toString(a)); 
}

//main
public static void main(String[] arg) {
    int[] arr = {1, 2, 3, 4, 5};
    method01(arr); //배열을 매개변수로 하는 메소드 사용 - 소괄호 안에 전달하려는 배열이름 입력
}
//[1, 2, 3, 4, 5]
//배열을 반환하는 메소드
static String[] method02() { 
    String[] week = {"월", "화", "수"};
    return week; //String형 배열 반환
}

//main
public static void main(String[] args) {
    String[] arr = method02(); //배열 arr에 메소드가 반환한 배열을 저장
}
//매개변수로 배열을 받고 이를 이용해 새로운 배열을 만들어 반환
static int[] method03(int[] arr) {
    int[] iArr = new int[arr.length * 2]; //크기는 두 배
    for(int i = 0; i < arr.length; i++) {
        iArr[i] = arr[i]; //받은 배열은 그대로 복사
    }
    return iArr;
}

//main
public static void main(String[] args) {
    int[] arr = {1, 2, 3, 4, 5};
    int[] iArr = mathod03(arr);  //메소드에서 반환된 배열을 iArr에 저장
    System.out.println(Arrays.toString(iArr));
}
//[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]

 

//첫 째 메소드 print - 매개변수 없음 반환값 없음 
ststic void print() {
    System.out.println("정수 두개를 입력하세요");  //출력
}

//두 째 메소드 input - 매개변수 없음 반환값 있음 
ststic int input() {
    Scanner scan = new Scanner(System.in);
    System.out.print("정수입력>");
    int num = scan.nextInt();
    return num;  //정수 입력받아 반환해줌
}

//세 째 메소드 - 매개변수 있음 반환값 있음
static int add(int num1, int num2) {
    int result = num1 + num2;
    return result;  //두 정수 받아서 더한 뒤 반환
}

//네 째 메소드 showResult - 매개변수 있음 반환값 없음
static void showResult(int result) {
    System.out.println("덧셈 결과: " + result);  //정수 받아서 출력
}

//main
public static void main(String[] args) {
    print();
    int num1 = input();
    int num2 = input();
    int result = add(num1, num2);
    showResult(result);
}
//첫 번째 메소드 calSum
static int calSum(int end) { 
    int sum = 0;
    for(int i = 1; i <= end; i++) {
        sum += i;
    }
    return sum;
}

//두 번째 메소드 calSum2
static int calSum2(int start, int end) {
    int sum = 0;
    for(int i = start; i <= end; i++) {
        sum += i;
    }
    return sum;
}

//main
public static void main(String[] args) {
    System.out.println("1부터 100까지의 합: " + calSum(100));
    System.out.println("10부터 20까지의 합: " + calSum2(10, 20));
}
// 1부터 100까지의 합: 5050
// 10부터 20까지의 합: 165

//다음과 같이 메소드를 매개변수로 사용할 수도 있음
public static void main(String[] args) {
    int result = calSum2( calSum(5), calSum(10) );  //result는 15부터 55까지의 합
}

 

*Math.abs() : 절댓값(absolute value)을 반환하는 메소드