어떠한 문제를 처리하기 위한 방법을 소스 코드로 묶어놓고 필요에 따라 동작하는 기능
리턴타입 메소드이름 ( [매개변수선언, ...] ){
실행할 코드를 작성하는 곳
.
.
}
🫧메소드는 선언부(리턴타입, 메소드 이름, 매개변수 선언)와 실행 블록(메소드 실행 블록)으로 구분됨
🫧메소드 선언부는 메소드 시그니처라고 함
📌리턴 타입(리턴 값의 타입)
-메소드를 실행한 후의 결과값을 말함
-리턴값이 있을 경우 리턴 타입이 선언부에 명시되어야 함
📌메소드 이름
-숫자로 시작하면 안됨
-'$','_'를 제외한 특수 문자 사용하면 안됨
-관례적으로 메소드 이름은 소문자로 작성함
-서로 다른 단어가 혼합된 이름이라면 뒤이어 오는 단어의 첫 글자는 대문자로 작성함 ex)String getName(){ ... }
📌매개변수 선언
-매소드 실행 시 데이터를 외부로부터 받기 위해 사용됨
-매개변수 개수를 모를 때? -> 배열을 이용
ex) int sum1(int[] values) {...}
🫧리턴 타입이 있는 메소드는 반드시 리턴문(return)을 사용해서 리턴값을 지정해야함 -> return문 없으면 컴파일 에러 발생
🫧리턴문이 실행되면 메소드는 즉시 종료
예시코드
int plus(int x,int y){ //더하기
int result = x + y;
return result;
}
❓리턴값이 없으면?
리턴값이 없으면 리턴타입으로 void 사용
🫧void로 선언된 메소드에서도 리턴문을 사용할 수 있음 -> 리턴 값 지정용 x 강제 종료 시키는 역할
ex)
return;
🫧객체 내부 호출
메소드(매개값, ... );
ex)
public class ClassName(){
int method1(int x, int y){
int result = x + y;
return result;
}
void method2(){
int result1 = method1(10, 20);
double result2 = method2(10, 20);
}
}
-자동 타입 변환 될 수 있다는 점에 주의
🫧객체 외부 호출
클래스 참조변수 = new 클래스(매개값, ...);
-외부 클래스에서 메소드를 호출하려면 클래스로부터 객채를 생성해야함 -> 메소드는 객체에 소속된 멤버이므로 객체가 존재하지 않으면 메소드도 존재하지 않기 때문
ex)
Car myCar = new Car();
myCar.keyTurnOn();
myCar.run();
int speed = myCar.getSpeed();
🫧클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것
🫧조건: 매개 변수의 타입, 개수, 순서 중 하나가 달라야 함(메소드 시그니처가 달라야 함)
❓메소드 오버로딩이 필요한 이유?
-> 매개값을 다양하게 받아 처리할 수 있도록 하기 위해!
ex)
다음과 같은 plus() 메소드가 있다고 가정했을 때
int plus(int x, int y){
int result = x + y;
return result;
}
plus() 메소드를 호출하기 위해서는 2개의 int값 필요
만약 int 값이 아니라면? (double, long등..) plus 호출 X
int plus(int x, int y){
int result = x + y;
return result;
}
double plus(double x, double y){
double result = x + y;
return result;
}
long plus(long x, long y){
long result = x + y;
return result;
}
하지만 위와 같이 메소드 오버로딩을 해주면 다양한 타입으로 plus() 메소드를 호출할 수 있음
❓메소드와 함수의 차이?
🫧함수
-특정 작업을 수행하는 '코드조각'
-전역이던 지역이던 '독립된 기능' 수행
🫧메소드
-클래스, 구조체, 열거형에 포함되어 있는 함수
-다른말로 클래스 함수 라고도 함
-> 독립적으로 존재하는 함수이냐, 클래스 내부에 종속되어 있느냐의 구분으로 함수와 메소드를 구분할 수 있음