Method

김지원·2022년 5월 27일
0

Java

목록 보기
17/38

메서드 = 함수

이름( ) : 메서드

단, 키워드 ( ) != 메서드

키워드 : 약속된 것들(자주색) - if switch while for

ex) print() : 출력함수, 출력메서드라고 한다.


수학 함수로 접근해보자.

f          (x)    =  2x+1 
메서드 이름 매개변수   리턴값

=> f란 메서드 이름을 가지고 x란 '매개'변수를 가진 함수.

매개란..? 연결의 느낌을 가진다.
x가 외부에서 들어오는 값과 f라는 함수를 연결시켜주는 '매개체' 역할을 한다.

  • f(x) 의 x는 저장공간 = 변수는 저장공간!
    2x+1 의 x는 값!

f(1) 함수명과 값을
통채로를 리턴값으로 볼 줄 알아야 한다.
단, 리턴값이 있을 경우만!


메서드의 선언

(1)	리턴타입 메서드명(자료형 매개변수1,.......) {
		실행할 문장
		return 리턴값;
	}
(2)	void 메서드명(자료형 매개변수1, ......) {
		실행할 문장
	}
- return값 없다.
(3)	void 메서드명() {
		실행할 문장
	}
    - return, 매개변수 둘다 없다.
    - 매개변수없이 단순히 실행만 가능.

: 즉 매개변수, 리턴값이 필수는 아니다.

  • 매개변수가 없다면 사용할 때 값을 전달하면 안된다.
  • 받을애가 2개면 값도 2개를 전달
    메서드 사용 전 매개변수가 몇개인지 확인하고 사용

자세하게 뜯어보자구.

Method

리턴타입 메서드명 (매개변수) {
	실행할 문장
    retrun 리턴값;
}

return : 되돌려주다. 사용한쪽 부분으로 돌려주는 것.
사용할때 전체를 리턴값으로 볼 줄 알아야한다.

< example >
f(x) = 2x+1(단, x는 정수)을 자바에서의 메서드로 바꿔보자.

int f (int x ) {        //x : 저장공간
	retrun 2*x+1 ;     //리턴타입은 리턴값의 타입을 말한다. 	
    				  //x : 값.
}

void main()

: void 라는 리턴타입을 가지는 메소드

  • main안에는 return이 없다.
  • retrun값이 없을 때 타입을 void(빈 공간)로 적어준다.

메서드 선언 순서

  1. 메서드 명을 생각한다.
  2. 매개변수를 생각한다.
  3. 실행할 문장과 리턴값을 생각한다.

< example >

class 부분

package method_study;

public class MethodTest {
	//메서드 여기서 선언!!!
	//클래스 안에는 있어야 한다. main메서드안에 선언 xx!!!
	
    //1번 해결방법 (static)
	/*static*/ int add(int num1, int num2) {
		System.out.println("add메서드 입니다.");
		return num1 + num2;  
        //리턴값이 정수니깐 return type은 int
		//외부에서 값이 2개가 들어오게 되고
        //두개의 결과값을 사용하는 부분에서 return 된다.
		//main메서드에서 add사용 
	}
    

클래스 안에서 메서드 작성!

main 부분

메서드 안에서 메서드를 선언할 수 없고 사용할 수 는 있다.

public static void main(String[] args) {
		System.out.println(add(3,7)); 
        //출력 안됨.
		//add(3,7) 를 10이라는 리턴값으로 볼줄알아야한다.
        
        //2번해결방법
		MethodTest m = new MethodTest();
		System.out.println(m.add(5, 7));
        //이 통째가 리턴값!
		//이렇게 되면 아! class 안에 있는 add구나 라는걸 알게 된다.
	}
}

System.out.println(add(3,7));은 출력이 되지 않는다.

이유를 알아보자.
먼저 public static에 대해 알아야 이해가 가능하다.

public static이란?

static

main 메서드는 실행메서드를 컴파일하는 순간 자동으로 실행된다.
컴파일 하자마자 제일 높은 순위에 있는 애들이 static이다.

  • main 메서드를 먼저 실행하라고 해서 static을 붙인다.
    컴파일하자마자 처음부터 메모리에 고정을 시켜버린다.

public

public : 접근권한 제어자
다른 곳에서 main메서드를 사용할때 public 을 주면 공용이된다.
+class 부분에서 자세히

그렇다면 안되는 이유는?

System.out.println(add(3,7));을 main에 적게되면
main 메서드가 실행되고 나서도 add 메서드를 RAM이 모르는 상태이다.

add가 누구지?
자기는 먼저 올라가있지만 add 메서드는 올라가기 전이기때문에 모른다.

< 해결방법 >

1. static int add(int num1, int num2) 
	//얘도 static을 붙여준다. 같이 올라가기 때문에 오류가 없다.
2. add(메서드)의 소속을 알려주면 된다. 
   main 메서드가 실행할 수 있게끔 해주는 방법.

add는 MethodTest라는 class소속이다.
main에게 MethodTest라는 class안에 add가 있다고 알려줘야한다.

그렇다면 class안에 있는 메서드에 접근하려면 변수를 선언해야한다.

참고)
scanner 클래스안에 있는 메서드 사용하려면 scanner 타입으로 변수 선언을 했다.

2번해결방법 - MethodTest 타입으로 변수 선언을 해줘야한다.

MethodTest m = new MethodTest();
		System.out.println(m.add(5, 7));

< example >

int add(int num1, int num2) {     //선언할때는 body가있다.
	syso("덧셈 메서드 입니다.");
	return num1 + num2;
}
int result = add(3, 7)          //사용할때는 body가 없다.
syso(result)

메서드 읽는 tip

컴파일러가 어떻게 움직이는 지 확인하면서 이해하자.
(위에서 아래로, 왼쪽에서 오른쪽으로)

위 예시를 통해서 설명.

첫 줄을 만나고 들어가지 않고 이름만 기억하고 밑으로 넘어간다.
add(3, 7)을 실행하는데, 얘를 만나는 순간 올라가서 안에있는 걸 읽는다.

+add(3, 7) 을 리턴값(10)으로 볼줄 알아야 하다.


메서드 주의사항

  1. 매개변수가 없는 메서드는 외부에서 값을 전달 받을 수 없다.
  2. 리턴값이 있는 메서드는 사용시 전체를 리턴값으로 보자.
  3. 메서드 내부에 다른 메서드를 선언할 수 없다.(단, 사용은 가능하다.)
    //main에서드 안에서 add메서드 선언 불가 밖에서 선언.
  4. 메서드 선언시 매개변수는 저장공간이고,
    사용시에는 값을 그 자리 순서에 맞게 넣어준다.

0개의 댓글

관련 채용 정보