코드 그라데이션

[보충] 메소드의 입력값과 리턴값 본문

Java/Mega

[보충] 메소드의 입력값과 리턴값

완벽한 장면 2023. 3. 29. 12:42

메서드의 입력값과 리턴값

메서드는 들어온 입력값을 가지고 어떤 처리를 하여 적절한 리턴값을 돌려주는 블랙박스와 같다.

입력값 ---> 메서드(블랙박스) ----> 리턴값

 

메서드의 구조

자바의 메서드 구조는 아래와 같다.

리턴자료형 메서드명(입력자료형1 매개변수1, 입력자료형2 매개변수2, ...) {
    ...    
    return 리턴값;  // 리턴자료형이 void 인 경우에는 return 문이 필요없다.
}

 

리턴자료형은 메서드 수행 후 돌려줄 값의 자료형을 의미한다. 메서드의 리턴값은 return 이라는 명령을 사용한다.

메서드는 입출력 유무에 따라 다음과 같이 4가지로 분류할 수 있다.

  • 입력과 출력이 모두 있는 메서드 
  • 입력과 출력이 모두 없는 메서드
  • 입력은 없고 출력은 있는 메서드
  • 입력은 있고 출력은 없는 메서드

 

일반적인 메서드

입력 값이 있고 리턴값이 있는 메서드가 일반적인 메서드이다.

 

일반적인 메서드의 전형적인 예

int sum(int a, int b) {
    return a+b;
}

sum 메서드의 입출력 자료형은 다음과 같다.

  • 입력 값 - int 자료형 a, int 자료형 b
  • 리턴 값 - int 자료형

sum 메서드는 두 개의 입력값을 받아서 서로 더한 결과값을 돌려주는 메서드이다.

리턴값받을변수 = 객체.메서드명(입력인수1, 입력인수2, ...)

 

사용 예시

Sample sample = new Sample();
int result = sample.sum(3, 4);

위에서 보듯이 sample.sum(3, 4) 호출 후 리턴값을 저장하는 result의 자료형은 int 로 해야만 한다.

왜냐하면 sum 메서드의 리턴타입이 int로 되어 있기 때문이다.

 

sum 메서드의 리턴타입은 int sum(int a, int b) { ... 에서 보듯이 메서드명(sum) 바로 좌측에 표기하도록 되어 있다.

 

---------

 

입력값이 없는 메소드

String say() {
    return "Hi";
}

say 메서드의 입출력 자료형은 다음과 같다.

  • 입력 값 - 없음
  • 리턴 값 - String 자료형

say라는 이름의 메서드를 만들었다. 하지만 입력 인수를 나타내는 괄호 안이 비어있다.

 

이렇듯 입력 인수가 없을 경우에는 괄호 안을 비워놓으면 된다.

 

예시

public class Sample {
    String say() {
        return "Hi";
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        String a = sample.say();
        System.out.println(a);  // "Hi" 출력
    }
}

 

say 메서드를 쓰기 위해서는 say()처럼 괄호 안에 아무런 값도 넣지 않고 써야 한다.

say 메서드는 입력값은 없지만 리턴값으로 'Hi'라는 문자열을 리턴한다.

따라서 String a = sample.say() 처럼 하면 a에는 "Hi"라는 문자열이 대입될 것이다.

 

즉, 입력값이 없고 리턴값만 있는 메서드는 다음과 같이 사용된다.

리턴값받을변수 = 객체.메서드명()

 

--------------

 

리턴값이 없는 메서드

void sum(int a, int b) {
    System.out.println(a+"과 "+b+"의 합은 "+(a+b)+"입니다.");
}

위 sum 메서드의 입출력 자료형은 다음과 같다.

  • 입력 값 - int 자료형 a, int 자료형 b
  • 리턴 값 - void (없음)

리턴값이 없는 메서드는 명시적으로 리턴타입 부분에 void라고 표기한다.

리턴값이 없는 메서드는 다음과 같이 사용한다.

 

public class Sample {
    void sum(int a, int b) {
        System.out.println(a+"과 "+b+"의 합은 "+(a+b)+"입니다.");
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.sum(3, 4);
    }
}

 

 

리턴값이 없는 메서드는 다음과 같이 사용된다.

객체.메서드명(입력인수1, 입력인수2, ...)

 

실행 결과

3과 4의 합은 7입니다.

 

그런데...

 "3과 4의 합은 7입니다." 라는 문장을 출력해 주었는데 왜 리턴값이 없다는 것인가?

이 부분이 초보자들이 혼동스러워 하는 부분이기도 한데 

 

System.out.println 문은 메서드내에서 사용되어지는 문장일 뿐이다. 리턴 값은 당연히 없다.

리턴 값은 return 명령어로만 가능하다.

 

-----------

 

입력값도 리턴값도 없는 메서드

void say() {
    System.out.println("Hi");
}

위 say 메서드의 입출력 자료형은 다음과 같다.

  • 입력 값 - 없음
  • 리턴 값 - void (없음)

이 메서드를 사용하는 방법은 단 한가지이다.

 

public class Sample {
    void say() {
        System.out.println("Hi");
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.say();
    }
}

 

입력값도 리턴값도 없는 메서드는 다음과 같이 사용한다

객체.메서드명()

 

-------

 

return의 또 다른 쓰임새

 

특별한 경우에 메서드를 빠져나가고 싶다면 return을 단독으로 사용하여 메서드를 즉시 빠져나갈 수 있다

 

public class Sample {
    void sayNick(String nick) {
        if ("fool".equals(nick)) {
            return;
        }
        System.out.println("나의 별명은 "+nick+" 입니다.");
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.sayNick("angel");
        sample.sayNick("fool");  // 출력되지 않는다.
    }
}

sayNick 메서드는 입력으로 받은 문자열을 출력하는 메서드이다. 이 메서드 역시 리턴값은 없다.

 

문자열을 출력한다는 것과 리턴값이 있다는 것은 전혀 다른 말이다. 혼동하지 말도록 하자.

 

메서드의 리턴값은 오로지 return문에 의해서만 가능하다.

이 메서드는 입력값으로 "fool" 이라는 값이 들어오면 문자열을 출력하지 않고 메서드를 즉시 빠져나간다.

 

이렇게 메서드 수행 시 특정 조건에 따라 메서드를 즉시 빠져나가고 싶은 경우

return 문을 단독으로 사용하면 된다.

이 방법은 실제 프로그래밍에서 자주 쓰인다.

return 문만 단독으로 사용하여 메서드를 빠져나가는 이 방법은 리턴 자료형이 void인 메서드에만 해당된다. 리턴자료형이 명시되어 있는 메서드에서 return 문만 작성하면 컴파일 오류가 발생한다.

728x90
Comments