자바공부 14 : 메서드

친환경 개발자
|2024. 2. 2. 22:58

 

메서드란?

클래스 안에 존재하며, 코드들의 집합.

 

함수라고 생각하면 됨.

 

다른 언어에는 함수와 메서드가 구분되나, 자바에서는 클래스 밖에 존재하는 것이 없으므로 구분하지 않음

 

 

 

 

매개변수와 인수

명칭 확실히 구분할 것!

 

매개변수 : 메서드에 넣을 입력값을 저장하는 변수   (int a, int b)

 

인       수 : 메서드를 호출할 때 넣는 입력값   (3, 4)

 

 

 

 

메서드의 구조

리턴자료형 메서드명(입력자료형1 매개변수1, 입력자료형2 매개변수2, ...) {
         수행할 코드 1;
         수행할 코드 2;
         ....
         return 리턴값;
}

       

 

1) 입력값 O, 리턴값 O : 메서드 만들 때 리턴자료형 넣어줌, 마지막에 return 코드 사용

 

int sum(int a, int b) {

    return a+b;

}

 

 

2) 입력값 X, 리턴값 O : 입력값에 빈칸, return코드 및 리턴자료형 사용

 

String say()

    return "Hi";

}

 

 

3) 입력값 O, 리턴값 X :  리턴자료형 void 사용

 

void sum(int a, int b) {

    System.out.println("a와 b의 합은 "+(a+b)+"입니다.");

}

 

 

4) 입력값 X, 리턴값 X

void say() {

    System.out.println("Bye");

}

 

void 인 메서드(=리턴값이 없는 메서드)에서는 중간에 return; 사용 시 마치 break;처럼 해당 메서드를 빠져나옴

 

 

 

 

 

 

 

public class Day13 {
/* 5-3 메서드 더 알아보기
 구조 :
 리턴자료형 메서드명(입력자료형1 매개변수1, 입력자료형2, 매개변수2, ...) {
 ...
 return값;                                                       */


    int a;
void varTest(Day13 sample) {
        sample.a++;
    }

void varTest1() {
        this.a++;  // 굳이 입력값으로 객체를 안 받고 this를 활용할 수도 있음
    }

// 입력값O 리턴값O 메서드
int sum(int a, int b) {      //a, b는 매개변수
    return a+b;
}

// 입력값X 리턴값O 메서드
String open() {
    return "Hi";
}

// 입력값O 리턴값X
void multi(int a, int b) {
    System.out.println(a+"과 "+b+"의 곱은 "+ (a*b) + "입니다.");
}

// 입력값X 리턴값X
    void close(){
        System.out.println("Bye");
    }

// return의 또 다른 쓰임 : void메서드에서 return; 만 사용 시 해당 메서드를 즉시 빠져나감
    void sayNick(String nick) {
        if("바보". equals(nick)) {
            return;
        }
        System.out.println("나의 별명은 "+nick+"입니다.");
    }

    //리턴값 없이 값만 1 증가했으므로 main 메서드값에 영향 X
    void varTest(int d) {
        d++;
    }

public static void main(String[] args) {
    int a = 3;
    int b = 4;

    Day13 sample = new Day13();
    int c = sample.sum(a, b);

    System.out.println(c);    // 입력값O 리턴값O
    System.out.println();

    String result = sample.open();   // 입력값X 리턴값O
    System.out.println(result);
    System.out.println();

    sample.multi(a, b);           //입력값O 리턴값X
    System.out.println();

    sample.close();              //입력값X 리턴값X
    System.out.println();


    sample.sayNick("야호");
    sample.sayNick("바보"); // 출력되지 않음
    System.out.println();

    int d = 1;
    sample.varTest(d);
    System.out.println(d);
    System.out.println();

    sample.a = 1;  //객체변수에 접근하여 1 값을 대입
    sample.varTest(sample);   // varTest메서드에 입력값으로 sample객체 넣음 >> sample의 객체변수 a에 1 더해짐
    System.out.println(sample.a);  // 2 출력
}
}