메소드란?
어떠한 특정 작업을 수행하기 위한 명령문의 집합
개발자가 특정한 행동을 정의하면 그 행동을 호출하면 프로그램에서 그대로 실행하는 것을 의미
[메소드 사용 목적]
- 가독성
- 재사용성
클래스에서 메소드를 작성하여 사용하는 이유는 중복되는 코드의 반복적인 프로그래밍을 피하기 위함.
또한, 모듈화로 인해 코드의 가독성이 좋아지므로 프로그램에 문제가 발생하거나 기능 변경이 필요할 시, 유지보수를 손쉽게 할 수 있음.
따라서, 메소드 작성 시에는 하나의 메소드가 하나의 기능만을 수행하도록 작성
메소드 선언과 호출
[메소드 선언]
public static 리턴타입 메소드명 (매개변수, ...) {
실행 코드
}
리턴 타입
: 메소드가 리턴하는 값의 타입 표시. 리턴 값이 없는 메소드는 void로 작성.
int, string, boolean 등의 자료형을 넣어주며 void가 들어가는 경우 return받는 데이터가 없다는 것을 의미
//리턴값이 없는 메소드 선언
void powerOn(){...}
//double 타입 값을 리턴하는 메소드 선언
double divide(int x, int y){...}
메소드명
: 메소드명은 첫문자를 소문자로 시작하며, 캐멀 스타일로 작성.
void run(){...}
void setSpeed(int speed){...}
String getName(){...}
String get_name(){...}
매개변수
: 메소드가 실행할 떄 필요한 매개값을 전달받기 위한 변수. 전달할 매개값이 없다면 매개변수는 생략 가능.
double divide(int x, int y){...}
실행 블록
: 실행 코드가 작성된 공간이며 메소드 호출시 실행되는 부분.
[메소드 호출]
메소드명();
메소드(파라미터)
public class Calculator {
//리턴값이 없는 메소드 선언
void powerOn() {
System.out.println("전원을 켭니다.");
}
//리턴값이 없는 메소드 선언
void powerOff() {
System.out.println("전원을 끕니다.");
}
//호출 시 두 정수 값을 전달 받고,
//호출한 곳으로 결과값 int를 리턴하는 메소드 선언
int plus(int x, int y) {
int result = x + y;
return result; //리턴값 지정;
}
int plus(int [] x) {
int result = 0;
for (int a : x) {
result += a;
}
return result;
}
//호출 시 두 정수 값을 전달 받고,
//호출한 곳으로 결과값 double을 리턴하는 메소드 선언
double divide(int x, int y) {
double result = (double)x / (double)y;
return result; //리턴값 지정;
}
}
결과 리턴 메소드()
- 값을 가지고 리턴
- 그냥 리턴(메소드 실행 중지)
public class Car {
int gas;
void setGas(int gas) {
this.gas = gas;
}
boolean isLeftGas() {
if(gas == 0) {
System.out.println("gas가 없습니다");
return false;
}
System.out.println("gas가 있습니다");
return true;
}
void run() {
while(true) {
if(gas>0) {
System.out.println("달립니다. (gas잔량: " +gas+")");
gas -= 1;
}else {
System.out.println("멈춥니다. (gas잔량: " +gas+")");
return;
}
}
}
}
메소드 오버로딩(Over Loading)
: 같은 메소드여도 매개 변수가 다르거나 리턴 받는 데이터 타입이 다른 경우 여러개 선언하는 것
public class Car {
//필드 선언
String company = "현대자동차";
String model;
String color;
int maxSpeed;
Car(String model){
//20라인 생성자 호출
this(model, "은색", 250);
}
Car(String model, String color){
//20라인 생성자 호출
this(model, color, 250);
}
Car(String model, String color, int maxSpeed){
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
[참고]
오버라이드(Over Riding)
: 부모의 메소드 자식이 재정의