< 메서드 >
- 객체의 동작에 해당하는 { } 블록
- 메서드 호출하면 중괄호 블록에 있는 모든 코드들이 실행
① 메서드 선언
- 리턴타입 메서드명 ( [매개변수 선언, ... ] ) {
실행할 코드 ....
}
- 메서드 선언은 선언부와 실행 블록으로 구성
· 선언부 : 리턴 타입, 메소드 이름, 매개 변수 선언
- 메서드는 두가지 값을 return 할 수 없다.
· return 변수1, 변수2 (X)
· 리턴값이 없으면 void로 선언
- 메소드 이름 규칙
· 숫자로 시작하면 안됨
·특수문자는 $, _ 만 사용가능
· 관례적으로 소문자 사용
· 혼합된 이름이라면 띄어쓰기 다음에 오는 문자는 대문자로
- 매개 변수 선언
· 매개변수는 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용
- 호출시에는 참조변수.메서드이름(매개값, ...)
public class Calculator{
// 메서드
void powerOn(){
System.out.println("전원을 켭니다.");
}
int plus(int x, int y){
int result = x + y;
return result;
}
double divide(int x, int y){
double result = (double)x/(double)y;
return result;
}
void powerOff(){
System.out.println("전원을 끕니다.");
}
}
public class CalculatorExample{
public static void main(String[] args){
// 생성자
Calculator myCalc = new Calculator();
// 메서드 호출
myCalc.powerOn();
int result1 = myCalc.plus(5,6);
System.out.println("result1: "+result1);
byte x = 10;
byte y = 4;
double result2 = myCalc.divide(x,y);
System.out.println("result2: "+result2);
myCalc.powerOff();
}
}
- 가변인자
· 메서드 선언할 때 매개변수 개수를 알 수 없는 경우
1) ... 으로 선언
2) 같은 타입의 매개변수가 많이 들어오면 배열로 생각해서 처리해줌
int sum1(int ... values) {}
int sum2(int[] values) {}
sum2(10,20); // int [] values = {10,20}
sum2(100,200,300); // int [] values = {100,200,300}
public class Computer{
int sum1(int[] values){
int sum=0;
for(int i=0; i<values.length;i++){
sum+=values[i];
}
return sum;
}
int sum2(int ... values){
int sum=0;
for(int i=0; i<values.length; i++){
sum+=values[i];
}
return sum;
}
}
public class ComputerExample{
public static void main(String[] args){
Computer myCom = new Computer();
int[] values1 = {1,2,3};
int result1 = myCom.sum1(values1);
System.out.println("result1: "+result1);
int result2 = myCom.sum1(new int[] {1,2,3,4,5});
System.out.println("result2: "+result2);
int result3 = myCom.sum2(1,2,3);
System.out.println("result3: "+result3);
int result4 = myCom.sum2(1,2,3,4,5);
System.out.println("result4: "+result4);
}
}
< 리턴문 >
- 메서드 선언에 리턴 타입이 있는 메서드는 반드시 리턴문을 사용해서 리턴값 지정
- 리턴문 이후의 실행문은 실행되지 않는다
① void
- 리턴값이 없는 메서드에서 사용
- void로 선언된 메서드에서도 return문을 사용할 수 있고 이것은 메서드 실행을 강제 종료시키는 역할임
· while문에서 break문 대신 return문 사용가능
< 메서드 호출 >
- 메서드는 클래스 내/외부의 호출에 의해 실행
① 객체 내부에서 호출
- 단순한 메서드 이름으로 호출
- 리턴값이 있어도 받고 싶지 않으면 return문 생략가능
- 리턴값이 있는 메서드 호출하고 리턴값 받고 싶으면 변수 선언해서 리턴값 대입
public class ClassName{
int method1(int x, int y){
int result = x + y;
return result;
}
void method2(){
int result1 = method1(10,20);
double result2 = method1(10,20);
}
void method3(){
method1(10,20);
}
}
· 리턴값을 result1,2 변수 선언해서 받음
· 리턴값없이 호출만 하려면 메서드명만 쓰면됨
② 객체 외부에서 호출
- 클래스부터 생성한 뒤 참조 변수 이용해서 호출
클래스 참조변수 = new 클래스( 매개값, ... );
참조변수.메서드( 매개값, ... ); // 리턴값이 없거나, 있어도 리턴값을 받지 않을 경우
타입 변수 = 참조변수.메서드(매개값, ... ); // 리턴값이 있고, 리턴값을 받고 싶을 경우
Car myCar = new Car();
myCar.keyTurnOn(); // 리턴값 X
myCar.run(); // 리턴값 X
int speed = myCar.getSpeed(); // 리턴값 O
< 메서드 오버로딩 >
- 클래스 내에 같은 이름의 메서드를 여러 개 선언하는 것
- 조건 : 매개변수의 타입, 개수, 순서 중 하나가 달라야함
- 매개값을 다양하게 받아 처리할 수 있도록 하기 위함
- 오버로딩된 메서드를 호출할 경우 매개값의 타입을 보고 메서드 선택함
- 아래와 같이 리턴 타입만 다르고 매개변수가 동일한 경우 메소드 오버로딩 아님
int divide(int x, int y) { ... }
double divide(int a, int b) { ... }
public class Calculator{
//정사각형 넓이
double areaRectangle(double width){
return width*width;
}
//직사각형 넓이
double areaRectangle(double width, double height){
return width*height;
}
}
public class CalculatorExample{
public static void main(String[] args){
Calculator myCalcu = new Calculator();
//정사각형 넓이 구하기
double result1 = myCalcu.areaRectangle(10);
System.out.println(result1);
//직사각형 넓이 구하기
double result2 = myCalcu.areaRectangle(10,20);
System.out.println(result2);
}
}
'자바 웹 개발자가 될거야 > JAVA' 카테고리의 다른 글
[JAVA] 필드 / 생성자 / 생성자 오버로딩 / this. 참조 / this() 다른생성자 호출 (0) | 2021.11.19 |
---|---|
이클립스 워크스페이스 기본 경로 변경 / 프로젝트 익스플로어 창 사라졌을 때 (0) | 2021.11.19 |
[JAVA] 중첩클래스 / 인스턴스 멤버 클래스 / 정적 멤버 클래스 / 로컬 클래스 / 중첩클래스 참조 (0) | 2021.11.18 |
[JAVA] 자료형 범위 / 데이터 형변환 / 연산자 / 상수 (0) | 2021.10.06 |
[JAVA] 자바 이클립스 시작/ 자바 변수명 규칙/ print와 println 차이/ 연결연산자 / 자바 데이터 타입 / 데이터 형 변환 (0) | 2021.10.01 |