Welcome to Wesley & Harry's Traveling & Programming

IT Program/Java Basic

자바(java) 메서드(method)의 구조와 사용법

Wesley & Harry 2022. 3. 7. 20:27
반응형

이번 포스팅은 메서드의 생김새와 어떻게 사용해야 하는지를 알아보도록 하겠습니다.

 

메서드는 크게 두부분으로 나뉩니다.

선언부와 구현부로 나뉘어집니다.

우선 아래를 보면서 기본 구조를 알아보도록 합니다.

반환타입 메서드이름(매개변수 선언, 매개변수선언...){
	메서드호출시 수행코드
}

이 구조는 앞선 게시글들에서 많이 보았을것이다.

간단한 예시를 코드로 적어보겠다.

	int add(int a, int b) {
		int resultValue = a + b;
		return resultValue;
	}

해당 코드는 더하기를 하는 메서드이다.

int add는 각각 반환타입 , 메서드 이름을 뜻한다.

int a, int b 는 매개변수를 선언한것이고

int resultValue = a + b;

return resultValue; 는 구현부로써

add라는 메서드가 실행되면 실행되는 부분이다.

여기서 return reslutValue는 그전에 썻던 메서드에서 볼수 없던 부분이다.

그 이유는 그전엔 void add 라는식으로 사용했기 때문이다.

resultValue라는 값을 돌려주기 위한것으로 resultValue는 int타입을 가지고있다.

int 타입을 돌려주기위해 

위에서 int add의 형식을 쓴것이다.(반환타입)

해당 코드를 활용해보고 어떻게 돌아가는지 한번 알아보자.

package wesley.java.practice.basic;

public class methodEx {
	public static void main(String[] args) {
		int wesley = 2;
		int harry = 3;
		int result = add(wesley,harry);
		System.out.println(result);
	}
	
	int add(int a, int b) {
		int resultValue = a + b;
		return resultValue;
	}
}

우선 해당 코드를 따라해보도록 합시다.

저희가 배운대로라면 

add(wesley,harry)를 통해

wesley의 값이 a로 들어가고

harry의 값이 b로 들어가

구현부의 코드를 실행하고,

resultValue의 값을 리턴해줘 

int result에 저장이 되어 출력이 되어야 할것입니다.

하지만 어째서인지 add에 빨간 오류가 들어가있는것을 확인할 수 있을겁니다.

Cannot make a static reference to the non-static method add(int, int) from the type methodEx

해당 오류가 생기는 이유가 무엇일까.

static으로 선언된 메소드에서는 static으로 선언되지 않은 메소드를 불러오지 못하기 때문입니다.

staitc 메소드와 non-static 메소드는 다른 메모리 영역에 생성되어 동작하게 됩니다.

static 메소드는 정적데이터 영역에서 생성되며 프로그램 시작시 만들어지고, 끝까지 사용이 가능합니다.

하지만 non-static 메소드는 객체가 생성될때 같이 생성되며 객체가 소멸할 때 같이 소멸하게됩니다.

 

쉬운말로 static 메소드가 먼저 컴파일되고, non-static 메소드는 정의되지 않았기때문에 참조를 못하는것입니다.

 

해당문제를 해결하기위해선 static을 서로 붙여주거나 빼주면됩니다.

하지만 main메소드는 static이 필요하기 때문에

add 메소드 앞에 static을 붙여봅시다.

package wesley.java.practice.basic;

public class methodEx {
	public static void main(String[] args) {
		int wesley = 2;
		int harry = 3;
		int result = add(wesley,harry);
		System.out.println(result);
	}
	
	static int add(int a, int b) {
		int resultValue = a + b;
		return resultValue;
	}
}

static을 추가한 모습입니다. 해당 코드가 잘 돌아가고있는것을 알 수 있습니다.


반환 타입이 void인 경우 또한 알아보도록 하겠습니다.

void는 반환할게 없을때 쓰는 것이라고 생각하면 편하겠습니다.

아래 코드를 보겠습니다.

package wesley.java.practice.basic;

public class methodEx {
	public static void main(String[] args) {
		int wesley = 2;
		int harry = 3;
		printMyMethod(wesley, harry);
	}
	
	static void printMyMethod(int a, int b) {
		int result = a + b;
		System.out.println("wesley와 harry의 합친값은 " + result);
	}
}

해당 코드는 반환타입을 int가 아닌 void로 설정하였습니다. return이 사라진것을 알 수 있습니다.

반환해줄 값이 없기 때문에 생략이 가능합니다. 생략된 return은 자바 컴파일러가 붙여주게됩니다.

printMyMethod(wesley, harry); 는 앞선 add메소드와 같이 따로 저장이 불가능합니다.

이를이용해 void, int, String, char 등 다양한 리턴값을 부여할 수 있습니다.

또한 더 나아가 메서드 안에서 if-else에 따른 각각 다른 값에 return을 부여할 수 있습니다.

package wesley.java.practice.basic;

public class methodEx {
	public static void main(String[] args) {
		int wesley = 2;
		int harry = 3;
		int result = anotherExampleMethod(wesley, harry);
		System.out.println("최종 a와b를 더하거나 뺀값" + result);
	}
	
	static int anotherExampleMethod(int a, int b) {
		if(a<10) {
			int result = a + b;			
			return result;
		}else {
			int result = a - b;
			return result;
		}
	}
}

이런식으로도 작성이 가능합니다. 해당 결과를 출력해보며 여러가지 코드를 연습해보도록 합시다.

반응형