본문 바로가기
개념정복💫/자바 JAVA 정복

[JAVA] 메소드 Method

by 옹쑥이 2023. 9. 14.

메소드란?

어떠한 특정 작업을 수행하기 위한 명령문의 집합

개발자가 특정한 행동을 정의하면 그 행동을 호출하면 프로그램에서 그대로 실행하는 것을 의미

 

[메소드 사용 목적]

  • 가독성 
  • 재사용성

클래스에서 메소드를 작성하여 사용하는 이유는 중복되는 코드의 반복적인 프로그래밍을 피하기 위함.

또한, 모듈화로 인해 코드의 가독성이 좋아지므로 프로그램에 문제가 발생하거나 기능 변경이 필요할 시, 유지보수를 손쉽게 할 수 있음.

 

따라서, 메소드 작성 시에는 하나의 메소드가 하나의 기능만을 수행하도록 작성


메소드 선언과 호출

[메소드 선언]

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; //리턴값 지정;
	}
}

 

결과 리턴 메소드()

  1. 을 가지고 리턴
  2. 그냥 리턴(메소드 실행 중지)
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)

: 부모의 메소드 자식이 재정의