매개변수는 저장공간이다.
리턴타입 메서드명(매개변수) {
실행할 문장
return 리턴값;
}
리턴타입이란, 리턴 값의 타입을 말한다.
리턴값이 있는 메소드는 사용할 때 통째로를 리턴값으로 보아야 한다.
리턴값이 없을 때에는 타입을 void로 준다. (void : 비어있는)
f (x) = 2x+1 함수와 같다.
메서드 이름, 매개변수, 리턴값
매개변수와 리턴 값이 있는 경우
(1) 리턴타입 메소드명 (자료형 매개변수 1,.....) {
실행할 문장
return 리턴값;
}
리턴값이 없는 경우도 있다
(2) void 메소드명 (자료형 매개변수1,.....) {
실행할 문장
}
(3) void 메소드명 () {
실행할 문장
}
메인 메소드는 실행 메소드이다. 그래서 우리가 컴파일 하는 순간 자동으로 실행되는 메소드이다. 왜? 앞에 붙은 static은 컴파일 하자마자 가장 우선순위가 높다. 그래서 Main에 고정을 시켜 제일 먼저 실행되게끔 하는 것이다.
public은 접근 제한 권한자 라고 한다. public은 "너희 다 사용할 수 있어" 즉, 공용을 뜻한다.
main 메소드가 실행되고 나서 메인 바깥에 있는 add메소드를 램이 알까?
main 메소드는 먼저 올라가지만 add는 아직 올라가기 전일 것이다.
그래서 add에도 static을 붙여준다. 즉 같이 올라간다는 것.
아래 코드를 통해 확인해보자.
package Method;
public class Method01 {
public static int add(int num1, int num2) {
System.out.println("add 메소드입니다.");
return num1 + num2;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(add(2,4));
}
}
다만 static을 사용할 때 주의할 점이 있다.
static은 처음 시작하자마자 메모리에 올라가있다. 즉, 프로그램이 종료될 때가 되서야 끝나기 때문에 실행할 때 느려진다.
- 다른 방법
public static을 붙이지 않더라도 메인 메소드에서 add가 어디에 있는 아이인지 소속을 알려주면 된다.
add의 소속은 Method01이라는 클래스 안에 있다.
저 클래스 안에 add가 있다는 것을 main에 알려주면 되는데, 접근하기 위해서는 Method01 타입으로 선언해주면 접근이 가능하다.
아래 코드를 통해 확인해보자.
package Method;
public class Method01 {
int add(int num1, int num2) {
System.out.println("add 메소드입니다.");
return num1 + num2;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Method01 m = new Method01();
System.out.println(m.add(2, 4));
}
}
우선 우리가 배운 것들의 사용이유를 전부 짚어보자.
1.변수를 사용하는 이유는 반복되는 값을 쉽게 관리하기 위해
2.입출력 함수를 사용하는 이유는 개발자가 한 작업에 대해 확인하기 위해서
3.조건문을 사용하는 이유는 결과가 2가지 이상일 경우 선택하기 위해
4.반복문을 사용하는 이유는 반복되는 것들을 쉽게 사용하기 위해서
5.배열을 사용하는 이유는 반복되는 같은 타입의 변수들을 쉽게 관리하기 위해서
메소드를 사용하는 이유는 반복되는 기능들을 쉽게 관리하기 위해서,
코드를 줄이기 위해! 그리고 궁극적인 목적은 재사용에 있다.
단 상황에 따라 특정성을 부여함에 있어 주의해야 한다.
롯데리아, 맥도날드, 버거킹에게 order라는 메소드를 동일하게 사용한다 가정했을 때,
"안녕하세요 롯데리아입니다" 라는 특정성을 넣으면 안된다는 것이다.
(1) 1부터 내가 입력한 정수까지의 누적합 구해주는 메소드
(2) 두 정수의 나눗셈 메소드
public class MethodTask {
void getSumFrom1(int end){
int result = 0;
if(end > 1) {
for (int i = 1; i < end+1; i++) {
result += i;
}
System.out.println(result);
} else {
System.out.println("1보다 큰 수를 입력하세요.");
}
}
void div(int num1, int num2) {
double result = 0.0;
if(num2 != 0) {
result = Double.parseDouble(String.format("%.3f", (double)num1/num2));
System.out.println(result);
} else {
System.out.println("0으로 나눌 수 없습니다.");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MethodTask m = new MethodTask();
m.getSumFrom1(5);
m.div(10, 3);
}
}