1. 메서드는 함수?
메서드는 함수의 한 종류이다.
함수란 무엇인지 먼저 살펴보고, 자바에서 사용하는 메서드가 무엇인지 알아보려 한다.
함수는 '하나의 기능을 수행하는 일련의 코드'를 말한다.
어떤 기능을 수행하도록 미리 구현해 놓고 필요할 때마다 간단하게 불러서 사용하는 것이다.
이 함수는 이름이 있고 입력 값과 결과 값을 갖는다.
그래서 함수에 이름을 붙일 때는 의미를 알 수 있는 단어를 사용하는 것이 좋다.
2. 함수 정의하기
함수가 하는 일을 구현해내는 것을 '함수를 정의한다'라고 한다.
그렇다면 더하기 함수를 만들어보자.
int add (int num1, int num2) {
int result;
result = num1 + num2;
return result;
}
- 함수 이름 : add
함수 이름은 add로 지었다.
그리고 함수의 이름 앞에는 함수의 결과가 되는 반환값의 형에 맞춘 자료형이 붙는다.
add함수의 반환값은 정수형이므로 int형을 사용하였다.
- 매개변수 num1, num2
add 함수는 두 값을 더하는 일을 한다.
덧셈을 수행하기 위해서는 함수에 두 값이 입력되어야 하기에 num1, num2 변수를 선언해주었다.
* 함수를 수행하기만 하면 되는, 매개변수가 필요없는 함수도 있다(예를 들어 1부터 10까지 더한 합을 늘 반환하는 함수를 만들면 입력해야하는 값이 필요한 것이 아니라 일련의 과정을 수행하기만 하게 하면 되므로 매개변수가 필요없다).
- return 예약어와 반환형
add() 함수를 수행한 후 결과 값은 변수 result에 저장된다.
이 result에 저장된 결과 값은 함수를 호출했을 때 반환되는 값이므로 반환값이라고도 부른다.
이 때 함수의 결과 값을 반환한다는 뜻의 예약어가 바로 return이다.
* 반환 값이 없는 함수도 있다. 예를 들어 이름이라는 매개변수를 입력하면 "ㅇㅇㅇ님 안녕하세요"라는 문장을 바로 출력하도록 하고 반환값 없이 바로 출력하는 코드를 입력했을 땐 함수의 앞에 자료형을 붙일 게 없다. 그렇다고 붙이지 않으면 오류가 발생하기에 이때는 'void'라고 쓴다. 'void'는 비어 있다는 뜻의 예약어다.
3. 함수 호출하고 값 반환하기
이제 정수를 더한 후 결과 값을 돌려주는 함수를 만들고 사용해보려한다.
이 과정을 '함수를 호출한다'고 한다.
package classpart;
public class FunctionTest {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
int sum = add(num1, num2);
System.out.println(num1 + " + " + num2 " = " + sum + "입니다.");
}
public static int add(int n1, int n2) {
int result = n1 + n2;
return result;
}
}
위 코드는 add() 함수를 구현했다.
add() 함수는 두 매개변수에 int형 값을 전달받아 두 수의 합을 돌려준다. 고로 결과 값이 int형이기에 반환형은 int형이다.
8번째 줄에 add 함수를 호출하는 코드가 보인다.
이 때 main() 함수에서 먼저 지정한 num1, num2 값과 add(int n1, int n2) 함수에서 지정한 n1, n2 값의 이름은 달라야 할까, 아님 같아야 할까?
결론은 상관이 없다!
이름과 상관 없이 각자 다른 함수로 호출한 값이기에 이름이 같아도, 달라도 상관 없다.
4. 함수의 장점
이렇게 복잡해 보이는 함수를 굳이 사용하는 이유는 뭘까?
1) 함수를 사용하면 기능을 나누어 코드를 효율적으로 구현할 수 있다.
2) 기능별로 함수를 구현해 놓으면 같은 기능을 매번 코드로 만들지 않고 그 기능의 함수를 호출하면 되니까 편리하며 중복 코드를 막을 수 있다.
3) 하나의 기능이 하나의 함수로 구현되어 있기에 프로그램을 실행할 때 생긴 오류를 수정하는 디버깅 작업을 할 때도 편리하다.
5. 클래스 기능을 구현하는 메서드
자바 프로그램에는 클래스 내부에서 사용하는 멤버 함수가 있다.
이를 메서드(method)라고 하는데 메서드는 멤버 변수를 사용하여 클래스의 기능을 구현한다.
즉, 메서드는 함수에 객체 지향 개념이 포함된 용어로 이해하면 된다.
그러면 Student 클래스에서(4-1 참고) 메서드를 직접 구현해보자.
package classpart;
public class Student {
int studentID;
String studentName;
int grade;
String address;
public String getStudentName() {
return studentName;
}
}
학생의 이름을 가져오는 메서드를 만들어 보았다.
메서드 이름은 해당 클래스를 사용하는 코드의 입장에서 짓는 것이 좋다.
그리고 studentName의 자료형이 String이므로 메서드의 반환형도 String이 된다.
그러면 학생 이름을 멤버 변수에 대입하는 setStudentName() 메서드를 만들어보자.
...
public void setStudentName(String name) {
studentName = name;
}
setStudentName() 메서드는 Student 클래스를 사용하는 다른 코드에서 학생 이름을 새로 지정하거나 바꿔준다.
이 때 이 메서드는 이름을 전달받아 지정하는 것이기에 매개변수 name이 필요하고, 이 매개변수는 멤버변수 studentName에 대입되는 변수이다.
반환값은 없으므로 반환형은 void로 지정한다.
** 자바의 이름 짓기 규약
자바에는 이름을 짓는 특별한 약속이 있는 것은 아니지만 개발자들만의 약속이 있다.
- 클래스의 이름은 대문자로 시작한다.
- 하나의 자바 파일에 클래스가 여러 개 있을 수도 있지만 public 클래스는 단 하나이고, public 클래스 이름과 자바 파일 이름은 같아야 한다.
- 패키지 이름은 모두 소문자로 만든다.
- 변수와 메서드 이름은 소문자로 시작하며 이름이 길어질 경우 단어가 바뀔 때마다 대문자를 써서 가독성을 띈다(camel notation).
'⁂ Java > : 독학으로 공부하기(과거)' 카테고리의 다른 글
[java] #4-4 생성자 (0) | 2022.07.09 |
---|---|
[java] #4-3 클래스와 인스턴스 (0) | 2022.07.06 |
[java] #4-1 객체, 클래스, 패키지 (0) | 2022.07.04 |
[java] #3-2 반복문 : 제어 흐름 이해하기 (0) | 2022.07.03 |
[java] #3-1 조건문 : 제어 흐름 이해하기 (0) | 2022.07.01 |