Wanna be Brilliant Full-Stack Developer

2/17 Java 메서드 개념잡기! 본문

Some Memos/Java

2/17 Java 메서드 개념잡기!

Flashpacker 2022. 2. 17. 21:27


목표 

꼭 알아될 개념인 메서드에 대해 알아보자

 

손님과 커피 머신이 있다. 손님은 커피머신에 가서 커피머신의 버튼을 클릭하면 커피머신이 커피를 뱉어줄것이다.

손님이 커피를 마시게된다. 

1. 손님 - > 커피머신

2. 손님 -> 커피

3. 손님 -> 커피 마시기 

손님이 커피를 줘 요청하게 되면 커피머신이 커피를 준다! 

커피라는게 하나만들어져서 돌려준다! 이떄 엄청나게 중요한 개념이 나온다. 커피 머신이라는건 커피라는게 자바에 있는타입인가? 자바에서는 배운게 int , double , boolean, char 같은거만 배웠다. 

커피머신이 과 커피라는 타입은 없다. 그러면 커피머신과 손님은 커스텀 자료형 클래스로 만들어야한다! 

그리고 커피를 만들라고 요청하면 커피를 응답한다. 커피를 달라고 하면 요청하면 커피를 만들어야하는데 커피를 만드는건 행위인데 , 커피머신은 커피 만들기를 해야한다! , 손님은 커피를 마신다 이 둘다 행위! 

굉장히 중요한 개념인데!

손님과 커피머신이 하는 행위를 메서드라고 한다! 

이런 커피머신이나 손님이 해야될 행위를 메서드라고한다!  

커피머신이나 손님이 하는 이 행위를 메서드라고한다! 

우리가 이 행위를 만들어보자! 

1. 자바에서는 모든것들이 클래스 내부에 존재해야한다고 말했다 , 어떤 클래스 , 어떤 행위를 메서드라고 했는데 행위를 어떻게 만들까?

그러면 이 행위는 6번 라인만 실행하고 멈출것이다

package ch02;

public class MethodEx01 {
	
	// 메서드 = MethodEx01 클래스의 행위
	void start() {
		System.out.println("만나서 반갑습니다."); // String 타입
		System.out.println("start 메서드 종료");
	}

	public static void main(String[] args) {
		

	}

}

start앞에 static이 붙어있나? 안붙어있다. static이 안붙어 있으면 main안에서 찾을 수 없다. 왜냐하면 메모리에 안떠있으니까.  그러면 start를 메모리에 띄우는 방법은 new를 해서 heap공간에 올리거나 static을 붙여서 main이라는 애가 실행되기도전에 메모리에 띄어놓는것이다. 

 

package ch02;

public class MethodEx01 {
	
	// 메서드 = MethodEx01 클래스의 행위
	static void start() {
		System.out.println("만나서 반갑습니다."); // String 타입
		System.out.println("start 메서드 종료");
	}

	public static void main(String[] args) {
		MethodEx01.start();

	}

}

Start라는 이 이름이 static 공간에 뜨고, 메인이라는 이름이 static공간에 뜬다

그다음에 자바에 메인이라는 애를 실행하게되는데 12번라인이 실행될떄 start내부를 실행하게 되는것이다. 

메서드를 실행한다는것은 이름을 똑같이 적고 괄호를 적으면 된다. 

내부가 실행이 되고나서 종료가 되는것이다. 

 

메서드를 만들때는 꼭 괄호를 붙여야한다! 

package ch02;

class 손님 {
	
	void 커피마시기() {
		System.out.println("손님이 커피를 마셔요");
	}


public class MethodEx01 {
	
	// 메서드 = MethodEx01 클래스의 행위
	static void start() {
		System.out.println("만나서 반갑습니다."); // String 타입
		System.out.println("start 메서드 종료");
	}

	public static void main(String[] args) {
		MethodEx01.start();

	}

}

저 커피마시기라는 행위를 만들었는데 이 행위는 누구의 행위 인가? 손님의 행위이다.

만약에 

package ch02;

void 커피마시기() {
System.out.println("손님이 커피를 마셔요");
}

class 손님 {

// 손님의 행위
void 커피마시기() {
System.out.println("손님이 커피를 마셔요");
}   저위에 있는 커피마시기는 메서드가 아니다. 어떤 클래스 내부에 존재해야지 메서드가 된다. 

 

그러면 커피마시기를 static없이 실행하기 위해서는 어떻게 해야할까? 

package ch02;


class 손님 {
	
	// 손님의 행위
	void 커피마시기() {
		System.out.println("손님이 커피를 마셔요");
	}
}

public class MethodEx01 {
	
	// 메서드 = MethodEx01 클래스의 행위
	static void start() {
		System.out.println("만나서 반갑습니다."); // String 타입
		System.out.println("start 메서드 종료");
	}

	public static void main(String[] args) {
		MethodEx01.start();
		손님 s = new 손님();
		s.커피마시기();
	}

}

이렇게 new를 통해 메모리에 떴는데 손님이라는 클래스가 가지고 있는 메서드의 이름(커피마시기) 이 뜬것이다. 내부가 실행된것은 아니다.  커피마시기가 이름에 떳으니까.

s.커피마시기(); 가 실행이 될떄 

void 커피마시기() {
System.out.println("손님이 커피를 마셔요");
} 내부가 실행이 된것이다!  이게 행위이다.


메서드는 어떤 클래스가 들고 있는 행위이다.