자바를 공부하다 보면 수많은 메소드를 만들게 된다. 자바를 배우면서 따라 할 때는 할 수 있을 것 같았는데, 아무것도 없는 상태에서 직접 만들려고 했을 때, 아무것도 하지 못하고 멍해졌던 순간이 나에게만 있었던 것은 아닐 거라고 생각한다.
그럼에도 포기하지 않고 계속 하다보면 어느 순간 아! 하면서 '흐름'을 깨닫게 되는 순간이 오고, 그때부터 진정한 자바의 시작이라고 봐도 될 것이다.
그러기 위해서 필수로 알아야 하는 것이 바로 이 리턴형과 매개변수라고 생각한다.
public 리턴형 method (매개변수) {
...
}
그럼 리턴형부터 간단하게 알아보면, 메소드에는 리턴이 있는 것과 없는 것으로 나눌 수 있다.
리턴이라는 건 내보낼 것이 있느냐, 없느냐 하는 것.
내보낼 것이 없으면 리턴형은 무조건 void,
내보낼 것이 있으면 내보내려 하는 것에 따라 String, int, double가 될 수도 있고, 내보낼 것이 많을 때는 그 모든 것을 담아둔 객체 자체가 될 수도 있다.
그렇다면 매개변수는 뭘까.
외부에서 전달하는 값(arguments)을 메소드 내부로 전달하기 위한 변수이다.
매개변수가 없다는 것은 값을 전달받지 않고 메소드 내에서 알아서 해결한다는 것이고,
매개변수가 있다는 것은 값을 전달받아 그 값을 이용하여 무언가를 한다는 것이다.
method의 4가지 형태
이제 위 형태를 기본으로 리턴형이 있을 때와 없을 때, 매개변수가 있을 때와 없을 때 값을 출력하는 연습을 해보자.
우선 Test 클래스를 생성하고 그 안에 4개의 메소드를 만들어 보자.
- method1 - 리턴: int, 매개변수: (int a)
- method2 - 리턴: int, 매개변수: X
- method3 - 리턴: X, 매개변수: (int b)
- method4 - 리턴: X, 매개변수: X
다음으로 실행시킬 TestControl 메인 클래스를 생성하고, Test 인스턴스 생성 후 4개의 메소드를 사용하여 콘솔에 값을 찍어 보자.
method1 출력 값: 1,
method2 출력 값: 2,
method3 출력 값: 3,
method4 출력 값: 4

자, 그럼 어떤 형태가 되었는지 코드를 한 번 확인해 보자.
Test.java

1. method1은 리턴형이 int고 int형의 매개변수 a를 받는다.
리턴이 있기 때문에 메소드의 마지막에 return을 적어주어야 하고, 매개변수로 받은 a를 그대로 return 해 주었다.
2. method2는 리턴형이 int이지만 매개변수는 없다.
매개변수는 없지만, 리턴형이 int이기 때문에 int인 값을 전달해야 하므로, 숫자 2를 그대로 리턴해 주었다.
3. method3는 리턴형이 없고 int형의 매개변수 a를 받는다.
리턴형이 없기 때문에 값을 출력하기 위해서는 print문을 사용해줘야 하고, 매개변수로 받는 b가 있기에 b를 그대로 print문에 넣어 주었다.
4. method4는 리턴형이 없고 매개변수도 없다.
리턴할 것이 없기 때문에 print문을 사용해줘야 하고, 받은 값도 없기 때문에 숫자 4를 그대로 print문에 넣어 주었다.
TestControl.java

리턴이 있는 것과 없는 것을 실행시킬 때 그 방법이 다른 것을 알 수 있다.
- method1 - 리턴은 해주었으나 메소드 내에 print문이 없기 때문에 값을 찍기 위해서는 메인 메소드에서 print문을 실행해 주어야 하고, 매개변수를 받아야 하기 때문에 1이라는 arguments를 전달해 준다.
- method2 - 리턴은 해주었으나 메소드 내에 print문이 없기 때문에 값을 찍기 위해서는 메인 메소드에서 print문을 실행해 주어야 하고, 매개변수가 없기 때문에 값을 전달하지 않는다.
- method3 - 리턴이 없기 때문에 해당 메소드 안에 print문이 있어서 실행만 하면 되고, 매개변수를 받아야 하기 때문에 3이라는 arguments를 전달해 준다.
- 리턴이 없기 때문에 해당 메소드 안에 print문이 있어서 실행만 하면 되고, 매개변수도 없기 때문에 값을 전달하지 않는다.
지금 보면 간단해 보이지만 처음 배울 때 어찌나 헷갈리던지..
나는 코딩이라는 안 맞는 걸까, 내 머리가 이정도였나 하는 생각을 많이 했다.
이해가 되면 잘 할 수 있을 것 같은데, 이해가 되지 않아 뒤처지는 것 같은 기분이 들어 초반에는 손코딩까지 해가면서 무식하게 다 외우기도 했다.
그 노력 덕분일까, 어느 순간 '이렇게 해볼까?' 하는 생각이 들더니 시간이 지날수록 '이게 되네?' 하는 경우가 많아졌다.
한 번에 그 흐름을 이해하는 사람도 있겠지만, 나처럼 시간이 많이 걸리는 사람도 있을 것이다.
하지만 거기에서 '나는 아닌가 보다' 하고 포기하지 말고 그 흐름이 이해가 되는 순간까지는 도전해보길 응원한다.
'지식' 카테고리의 다른 글
스프링 빈 스코프 prototype와 singleton의 차이 (0) | 2024.10.14 |
---|---|
[JAVA] 변수의 기본형과 참조형 타입 정리 (0) | 2024.08.27 |
[Spring] IoC와 AOP 이제는 이해해보자 (0) | 2024.06.25 |
[STS4] src/main/resources 의 static과 webapp의 차이 (2) | 2024.01.31 |
스프링 프레임워크란? (0) | 2024.01.23 |