티스토리 뷰
메서드의 입력값과 리턴값
메서드는 들어온 입력값을 가지고 어떤 처리를 하여 적절한 리턴값을 돌려주는 블랙박스와 같다.
입력값 ---> 메서드(블랙박스) ----> 리턴값
메서드의 구조
자바의 메서드 구조는 아래와 같다.
리턴자료형 메서드명(입력자료형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 문만 작성하면 컴파일 오류가 발생한다.
'[개발] - Java > Mega' 카테고리의 다른 글
함수의 실행 흐름 - 선입후출 구조 (0) | 2023.03.30 |
---|---|
계산기 과제 (0) | 2023.03.29 |
[보충] 메소드 기초 - 메소드 개념, 매개변수와 인 (0) | 2023.03.29 |
[보충] 객체 지향에 대한 이해 - 객체 변수는 공유되지 않는다. (0) | 2023.03.29 |
[보충] 객체 지향에 대한 이해 - 메소드(1) (0) | 2023.03.29 |