객체가 가지고 있는 동작 & 기능을 메서드라고 한다. 즉, 클래스에서 생성된 인스턴스 와 관련된 동작 및 기능을 정의한다.
객체지향 프로그래밍에서 객체가 가진 메서드를 통해 데이터를 서로 주고받으며 상호작용 하게 된다.
메서드는 정의 -> 호출의 순서로 사용되어진다.
반복적인 동일한 작업을 메서드를 통해 처리하거나, 커다란 기능을 메서드를 활용해 작은 단위로 만들어서 사용한다.(모듈화)
public int add(int x, int y) {
int z = x + y;
return z;
}
int : 결과(함수가 만들어내는 결과의 타입 - return type)
add : 함수명
(int x, int y) : 입력 값
{} : 구현부(body)
return z : 최종 값
접근제한자 리턴타입 메서드명(인수1,인수2 ...) {
수행코드;
return 반환값;
}
public void add(int a, int b) {// 반환값이 없기 때문에 리턴타입은 void
int sum = a + b;
System.out.println(sum);
}
메서드의 호출 과정은 다음과 같다.
int result = add(3,5); // 메서드 호출(Call)
메서드 호출시 인수의 개수와 타입이 일치해야 호출에 성공한다.
public int add(int a=3, int b=5) { // 호출시 받은 인수로 메서드 몸체가 수행됨
int sum = a+b;
return sum; // 결과값 반환 및 제어흐름 복귀
}
int result = sum; // 결과값(sum)반환 및 제어흐름 복귀
public int add(int a, int b) { // 매개변수로 값이 전달됨
int sum = a+b;
return sum;
}
public int add(int[] a) {// 매개변수로 객체&배열 자체를 전달
int sum = 0;
for(int i=0; i< length; i++) {
sum += a[i];
}
return sum;
}
메서드 오버로딩은 하나의 클래스 내에서 동일한 이름의 메서드를 여러 개 사용할 수 있는 객체지향 프로그래밍에서 등장한 기법이다.
비슷한 동작을 하는 메서드의 이름을 같게 만들어 사용하면 편리하다.(편리성 증대)
매개변수의 개수, 타입 중 하나가 달라야 한다!
public int add(int a, int b) {
int sum = a+b;
return sum;
}
------------------------------
public float add(float a, float b) { // 메서드의 타입이 다른 오버로딩
float sum = a+b;
return sum;
}
------------------------------
public int add(flintoat a, int b, int c) { // 메서드의 개수가 다른 오버로딩
float sum = a+b+c;
return sum;
}
컴파일 시점에서 사용될(호출될)메서드가 결정(연결)되는 바인딩
메서드 실행시에 호출될 메서드를 결정하는 게 아닌, 호출 전 컴파일 시점에서 이미 컴파일러에 의해 오버로딩한 메서드를 구분해서 관리하기 때문에 실행 시점에선 내부적으로 사용될 메서드가 이미 결정되어 있다.
따라서 오버로딩한 메서드의 개수가 많아져도 실행성능 측면에서는 크게 문제가 없다.
메서드는 클래스 내에서 독립적으로 만들어야 한다.(하나의 단위작업을 처리)