메소드(method)

박성현·2024년 3월 15일

java

목록 보기
15/51
post-thumbnail

메소드

  • 함수는 일반적으로 메모리 스택 Stack 영역에 생성되어 사용이 끝나면 사라진다.
  • 메소드는 객체의 생성과 힙 Heap 영역에 생성되어 객체가 소멸될 때 사라진다.
  • 객체지향 프로그래밍에서의 함수
  • 자바의 클래스 = (멤버)변수 + (멤버)메서드로 구성
  • 메서드(함수) 중요 구성요소 : 인자(argument)와 리턴 값
  • 함수 사용(호출)시 무엇을 주고(전달) 무엇을 받을지(리턴)를 생각하는 것이 중요

메소드의 형식은 다음과 같다

접근자 리턴데이터타입 함수명(인자 x) {
   처리 로직
   결과 리턴
}

// fn으로 받은 x값은 지역변수
public int fn(int x) {
      int y = x * x;
      return y
}

응용해보자 ! !

package methodex;

import java.util.Scanner;

public class MethodReturnEx {

	
	public static int add(int x) {
		int y= x + x;
		return y;
	}
	
	public static void main(String[] args) {
		int x= 10;
		int y= add(x);
		System.out.println("y = add(x) = "+ y);
		
		x= 20;
		y= add(x);
		System.out.println("y = add(x) = "+ y);
		
		System.out.println("int input >");
		Scanner sc=new Scanner(System.in);
		x = sc.nextInt();
		y= add(x);
		System.out.println("y= add(x) = " +y);
	}

}

결과값 :


메서드가 동일 패키지 다른 클래스에 정의 되어 있는경우

  • static은 static끼리 공유한다고 생각하면 편한거 같다.
package methodex;

public class MyMath {
	static int sI=10;
	int i= 100;
	
	// static 메서드
    public static int sAdd(int x) {
        int y = x + x;
        return y;
    }

    // instance 메서드
    public int add(int x1, int x2) {
        int y = x1 + x2;
        return y;
    }
	
	public static void main(String[] args) {
		System.out.println(sI);
		// sAdd는 static 되어있는 부분이기 때문에 바로 호출이 가능하다
		int y= sAdd(sI);
		System.out.println(y);
		
		// static 이 없는 곳을 호출하기 때문에 new를 사용해주면 호출가능해짐
		MyMath math = new MyMath();
		System.out.println(math.i);
		y = math.add(math.i,sI);
		System.out.println(y);
		
	}

}

여러개의 클래스에서 static을 이용해 값을 호출할 수 있다.

  • 한개의 패키지내에서 static을 이용해 여러개의 클래스를 다룰 수 있다.

Mymath.java

package methodex;

public class MyMath {
	static int sI=10;
	int i= 100;

	// static 메서드
	public static int sAdd(int x) {
		int y = x + x;
		return y;
	}

	// instance 메서드
	public int add(int x1, int x2) {
		int y = x1 + x2;
		return y;
	}


}

MyMathTest.java

  • (클래스명.sI)로 호출할 수 있다.
package methodex;

public class MyMathTest {

	public static void main(String[] args) {
		System.out.println(MyMath.sI);
		int y = MyMath.sAdd(MyMath.sI);
		
        //여기서도 마찬가지로 add를 사용하기 위해서 new로 선언해주고 사용할 수 있다.
		MyMath math = new MyMath();
		System.out.println(math.i);
		
		y= math.add(math.i,MyMath.sI);
		System.out.println(y);
	}

}

결과값 :


return의 범위를 알아보자 ! !

  • return이 있어야 해당 값을 가져올 수가 있다.
    즉, return값을 받지 않으면 가장 가까운 곳에 선언된 값이 출력된다.
package methodex;

public class MethoArgsEx {

	public static int varInt(int x) {
		x = 10;
		return x;
	}

	public static void main(String[] args) {
		int x = 0;
		//리턴받기 전 출력
		System.out.println(x); // 0
		//리턴받은 값을 기존 x값에 누적시켜준다.
		x = varInt(x);
		//리턴 받고나서 출력
		System.out.println(x); // 10
	}
}

결과값 :

만약 여기서 x = varInt(x);와 같이 x값으로 받아주지 않는다면 어떻게 될까 ?

한번 실습해보자 !

package methodex;

public class MethoArgsEx {

	public static int varInt(int x) {
		x = 10;
		return x;
	}

	public static void main(String[] args) {
		int x = 0;
		//리턴받기 전 출력
		System.out.println(x);
		// 리턴받은 값을 기존 x값에 누적시켜준다. 만약
		varInt(x);
		//리턴 받고나서 출력
		System.out.println(x);
	}
}

위 코드와 같이 varInt(x);로 값을 받게되면 main내에 선언되어있는 x값을 출력하게 된다.

결과값 :


profile
개발기록장

0개의 댓글