생각보다 길었던 배열을 끝내고
드디어 마지막 과정인 메서드로 넘어왔다.
비슷한 코드들이 여러 군데에서 쓰이기 때문에
같은 코드를 여러번 반복해서 작성하는 번거로움을 지우기 위해
함수를 만들고 (정의), 필요한 입력 값을 넣어서 해당 함수를 호출한다. 계산된 결과가 나온다.
블랙박스와 같기 때문에 함수를 호출할 때 외부에서 필요한 값만 입력하면 계산된 결과가 출력되고, 여러 번 호출이 가능하다.
즉, 재사용이 가능하다.
자바에서는 함수를 메서드(Method)라 한다.
메서드 선언
public static int add(int a, int b)
메서드를 선언하는 부분으로, 메서드 이름, 반환 타입, 매개변수(파라미터) 목록을 포함한다.
메서드 선언 정보를 통해 메서드를 호출 가능하다.
제어자(Modifier) : public, static와 같은 부분이다.
public : 다른 클래스에서 호출할 수 있는 메서드라는 뜻이다. 접근 제어에서 학습한다.
static : 객체를 생성하지 않고, 호출할 수 있는 정적 메서드라는 뜻이다.
메서드 앞에 static이 붙어 있을 때는 static이 붙은 필드 또는 메서드만 호출할 수 있다.
반환타입 : 반환하는 데이터의 타입을 지정한다.
void print(String str) : 입력 매개변수가 없을 때다. 메서드가 반환하는 값이 없다는 것을 의미한다.
int add(int a, int b)
int : 반환 타입을 정의한다. 메서드의 실행 결과를 반환할 때 사용할 반환 타입을 지정
add : 메서드에 이름을 부여한다. 메서드를 호출 가능
(int a, int b) : 메서드를 호출할 때 전달하는 입력 값을 정의한다. 해당 메서드 안에서만 사용된다. = 매개변수(파라미터)
메서드 사용
public static void main(String[] args) {
int sum1 = add(5, 10);
System.out.println("결과 출력" + sum1);
// add 메서드를 만드는 방법이다.
public static int add(int a, int b) {
System.out.println(a + "+" + b + " 연산 수행");
int sum = a * b;
return sum;
}
중복이 제거되고 코드가 깔끔해진다.
메서드의 선언 부분과, 메서드 본문으로 나눌 수 있다.
메서드를 호출하는 곳에서는 메서드 선언은 알지만 메서드 본문은 모른다.
메서드를 호출할 때 메서드에 넘기는 값과 파라미터의 타입이 맞아야 한다.
메서드 정의
int call(String str, int age)
호출
call("hello", 20)
'인'과 '수'의 합성어, '들어가는 수'라는 의미를 가진다. 메서드 내부로 들어가는 값을 의미한다.
인자도 같은 의미이다.
"hello", 20처럼 넘기는 값을 인수(=인자)라고 한다. 아규먼트, 인수, 인자라는 용어를 모두 사용
call("hello", 20)
'매개'와 '변수'의 합성어, '중간에서 전달하는 변수'라는 의미를 가진다.
메서드 호출부와 메서드 내부 사이에서 값을 전달하는 역할을 하는 변수라는 뜻이다.
모든 메서드는 항상 return을 호출해야 한다. 반환 타입이 void의 경우 예외로 생략해도 된다.
메서드를 호출할 때도 형변환이 적용된다. 명시적 형변환, 자동 형변환
public static void main(String[] args) {
int number = 1.5;
printNumber(number);
}
public static void printNumber(double n) {
System.out.println("숫자: " + n);
}
메서드를 호출할 때 double형이 int형보다 범위가 넓기 때문에, main에서
printnumber 메소드를 호출해도 자동으로 int형으로 형 변환이 이루어진다.
이름이 같고 매개변수가 다른 메서드를 여러 개 정의하는 것을 메서드 오버로딩이라 한다.
과하게 물건을 담았다는 뜻이다. 같은 이름의 메서드를 여러개 정의했다고 이해하면 된다.
add(int a, int b)
add(int a, int b, int c)
add(double a, double b)
int add(int a, int b)
int add(double a, int b)
타입을 다르게 지정해줘야 한다.
메서드 이름 + 매개변수 타입(순서)
자바에서 메서드를 구분할 수 있는 고유한 식별자나 서명을 뜻한다. 메서드의 이름과 매개변수 타입(순서 포함)으로 구성되어 있다. 메서드를 구분할 수 있는 기준이다. 각각의 메서드를 고유하게 구분할 수 있어야 한다. 메서드 이름이 같아도 메서드 시그니처가 다르면 다른 메서드로 간주한다. 반환 타입은 시그니처에 포함되지 않는다.
자동형변환도 적용된다.
구조적으로 유지보수 하기 쉽게 사용할 수 있다.
변수명
일반적으로 명사를 사용한다.
customerName, totalSum, employeeCount, isAvailable
메서드명
동작하는데 사용되기 때문에 동사로 시작한다.
printReport(), calculateSum(), addCustomer(), getEmpolyeeCount()
모든 사용할 수 있는 상태의 멤버는 항상 객체 속에만 존재한다.
this.m, this.n
this.init()와 같이 표현한다.
class A{
int m;
int n;
void init(int a, int b){
int c;
c=3;
this.m=a; //필드
this.n=b;
}
void work() {
this.init(2, 3);
}
}
this() // 생성자를 호출
메서드의 매개변수 개수를 동적으로 지정할 수 있다. = 매개변수 생략 가능)
타입...변수명 형식으로 선언할 수 있고, 가변인자는 내부적으로 배열로 처리된다.
ex.
public void averageScore(int... scores) {
double sum = 0;
for (int score : scores) {
sum += score;
}
double average = sum / scores.length;
System.out.println(average);
}