CodeGym /Java Blog /무작위의 /자바 메소드
John Squirrels
레벨 41
San Francisco

자바 메소드

무작위의 그룹에 게시되었습니다
Java의 변수와 상수는 값을 저장하는 반면, 메소드에는 특정 작업을 수행하는 연산자 집합이 포함되어 있습니다. 즉, Java의 메소드는 객체의 동작을 결정하고 일부 변수에 대한 작업을 수행합니다. 작업을 수행할 수도 있고 특정 결과를 생성할 수도 있습니다.

Java의 메소드란 무엇입니까?

메소드는 객체의 동작을 정의하며 프로그램에서 일부 작업을 수행할 수 있도록 하는 일련의 명령입니다. 다른 프로그래밍 언어에서는 메서드를 종종 "함수"라고 부르는데, 이는 당연한 일입니다. 실제로 메소드는 수학적 의미에서 함수입니다. 일반적으로 메서드의 입력(일부 변수)에 무언가가 제공되고, 이러한 변수는 일련의 명령에 의해 처리된 다음 메서드가 결과를 생성합니다. 적어도 public static void main(String[] args) 메소드를 이미 접했을 가능성이 있습니다 . 이 메소드는 일반적으로 Java 프로그램의 실행을 시작합니다.

Java에서 메소드를 선언하는 방법은 무엇입니까?

Java의 모든 메소드는 클래스 내부에서 생성됩니다. 그들은 다음과 같이 선언됩니다:
accessSpecifier ReturnType name (parameter list) {
//method body
}
예를 들어:
public int addTwoNumbers (int a, int b){

//method body
return}
여기서 public 은 액세스 지정자이고 int 는 메서드가 반환하는 변수 유형이며 addTwoNumbers 는 메서드 이름, ab 는 메서드의 매개 변수입니다. 조금 더 자세히 살펴보겠습니다. 액세스 지정자는 메소드의 액세스 유형을 정의하는 데 사용됩니다. 그들은 다음과 같을 수 있습니다:
  • public : 모든 클래스에서 메소드에 접근이 가능합니다.

  • private : 정의된 클래스 내에서 접근이 가능합니다.

  • protected : 패키지 또는 다른 패키지의 다른 하위 클래스 내부에서만 액세스가 가능합니다.

  • default : 선언된 패키지에서 접근이 가능합니다. 이 경우 "default"라는 단어는 기록되지 않습니다.

반환 유형은 이 메서드가 반환하는 유형을 정의합니다. 위의 예에서 int는 반환 유형입니다. 메서드가 아무것도 반환하지 않으면 반환 유형은 void입니다.
public void printSomething (String myString) {}
메소드 이름은 메소드의 고유한 이름입니다. 이 문서의 뒷부분에서 일부 Java 명명 규칙에 대해 설명하겠습니다. 위의 메소드에서 이름은 addTwoNumbersprintSomething 입니다 . 매개변수 목록은 메소드가 사용하는 인수(데이터 유형 및 변수 이름) 목록입니다. 위의 첫 번째 예에서 "int a, int b"는 매개변수이고, 두 번째 예에서는 String myString이 인수입니다. 메소드에서 매개변수를 사용하지 않으려면 이 필드를 비워 둘 수도 있습니다.

메소드 매개변수 예

public void printSomething (String myParameter1, int myParameter2) {}
여기에 myParameter1myParameter2 라는 두 개의 변수가 있습니다 . 메소드 매개변수입니다. 메소드가 실행할 중괄호로 묶인 명령어 세트입니다. 메소드의 반환 유형이 void가 아닌 경우 return 키워드가 메소드 본문에 있어야 합니다. return 뒤에는 이 메서드가 반환하는 인수가 옵니다. 따라서 메서드를 만들려면 해당 이름을 대괄호와 함께 지정해야 하며, 필요한 경우 대괄호 안에 메서드가 작동할 변수를 지정해야 합니다. 메서드 이름 앞에는 액세스 지정자와 메서드가 반환하는 변수의 유형이 있거나, 메서드가 아무것도 반환하지 않으면 void가 됩니다. 중괄호 안에 실제 메서드, 즉 메서드의 인수와 가장 자주 작동하는 일련의 명령을 작성합니다. 다음은 배열에서 가장 큰 숫자를 찾아서 반환하는 메서드의 예입니다.
public int findBiggest(int[] numbers) {
   int max;
   max = numbers[0];
   for (int i = 1; i < numbers.length; i++) {
       if (max < numbers[i]) {
           max = numbers[i];
       }
   }
   return max;
}

메소드 이름을 어떻게 지정하나요?

메소드 이름 지정에 대한 엄격한 규칙은 없지만 Java를 전문적으로 개발하려는 경우 따라야 할 지침이 있습니다. 메소드 이름은 대소문자 혼합으로 작성되는 동사인 경우가 많으며, 소문자로 시작하지만 각 후속 단어에 대문자를 사용합니다(camelCase). 여기 몇 가지 예가 있어요.
int addTwoNumbers (int a, int b)
void run()

메소드를 호출하는 방법

메소드를 호출하려면 메소드 이름을 쓰고 해당 변수가 선언에 있는 경우 해당 변수를 설정하는 것으로 충분합니다. 기본 메소드 에서 findBiggest 메소드를 호출해 보겠습니다 .
public static void main(String[] args) {
  int[] array = new int[] {5, 7, -2, 6, 7, 1};
  int max = findBiggest(array);
   System.out.println("the biggest number in array is: " + max);
  }
이 프로그램의 출력은 다음과 같습니다.
배열에서 가장 큰 숫자는 7입니다.

Java의 다양한 메소드 유형

Java에서는 모든 것이 객체로 구성되며 객체의 동작은 메소드에 의해 정의됩니다. 일반적으로 Java에는 사전 정의된 메소드와 사용자 정의된 메소드가 있다고 말할 수 있습니다. 사전 정의된 메소드는 Java 언어 자체의 일부인 클래스에 포함된 메소드입니다.

사전 정의된 방법

사전 정의된 또는 표준 라이브러리 메소드가 Java에 내장되어 있습니다. 물론 모든 프로그래머는 이를 사용하거나 프로그램에 맞게 로컬로 수정할 수도 있습니다. Java 클래스 라이브러리는 JVM(Java Virtual Machine) 및 Java 런타임 환경이 포함된 Java 아카이브 파일(예: *jar)에 있습니다. 예를 들어 min() , max() 또는 abs() 와 같은 Math 클래스 의 메서드가 될 수 있습니다 . 또는 concat() 과 같은 문자열 조작 방법 . 기본 메서드를 사용하여 클래스를 만들고 몇 가지 표준 라이브러리 메서드를 호출해 보겠습니다.
import static java.lang.Math.max;

public class Test {

    public static void main(String[] args) {
       int a = 5;
       int b = 7;
       int max = max(a,b);
       System.out.println(max);
       String str1 = "I am ";
       String str2 = "here ";
       String str3 = str1.concat(str2);
       System.out.println(str3);


   }

}
Math 클래스 의 메서드를 사용하려면 프로그램 시작 시 이를 가져와야 합니다. 이것이 완료되지 않은 경우 메소드 이름 앞에 클래스 이름을 점으로 구분하여 쓸 수 있습니다.
int max = Math.max(a,b);

사용자 정의 방법

이러한 방법은 프로그래머가 프로젝트 요구 사항에 따라 생성합니다. 실제로 우리는 위에서 사용자 정의 findBiggest() 메소드를 이미 생성했습니다. 통합하려면 아무것도 반환하지 않고 매개변수도 없지만 입력된 이름에 응답하고 hello(즉, 콘솔에 출력)라고 말하는 또 다른 메서드를 만들어 보겠습니다.
import java.util.Scanner;

public class Test {

   public void repeater() {
       Scanner scanner = new Scanner(System.in);
       System.out.println("WHat should I repeat after you?...");
       String s =  scanner.nextLine();
       System.out.println(s);
   }
}

Java에서 정적 메소드 생성

일반적으로 Java의 메소드는 객체의 메소드입니다. 메서드를 호출하려면 이 메서드가 정의된 클래스의 인스턴스를 만들어야 합니다. 그러나 정적 메서드도 있습니다. 객체가 아닌 클래스에 연결된다는 점에서 일반 항목과 다릅니다. 정적 메서드의 중요한 속성은 정적 변수/메서드에만 액세스할 수 있다는 것입니다. 이는 static 키워드를 사용하여 정의됩니다 . 따라서 Math 클래스에서 변수 작업을 위한 모든 메서드는 정적입니다. Math 클래스 와 유사한 것을 만들고 포함 클래스의 인스턴스를 만들지 않고도 사용할 수 있는 여러 정적 메서드를 수집할 수 있습니다. 그것을 Numbers 라고 부르자 .
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;


public class Numbers {


   public static int findMax(int left, int right) {
       return (left < right) ? right : left;

   }


   public static boolean isNegative(int number) {
       return number < 0;
   }

   public static long power(long number, int deg) {

       if (deg == 0) {
           number = 1;
           return number;
       } else {
           number = power(number, deg - 1) * number;
           return number;
       }
   }

   public static long abs(long number) {
       return number > 0 ? number : -number;
     }


    public static void main(String[] args) {

       int a = 5;
       int b = 7;
       long c = -7;
       long abs = abs(c);
       System.out.println(abs);
       System.out.println(findMax(a,b));

   }

}
프로그램의 출력은 다음과 같습니다.
7 7
먼저 숫자의 절대값을 찾는 메서드가 호출된 다음 두 숫자 중 더 큰 숫자를 찾는 메서드가 호출됩니다. 두 메서드 모두 정적으로 정의되어 있으므로 이러한 메서드를 호출하기 위해 Numbers 클래스 의 인스턴스를 만들 필요가 없습니다 .

Java 코드에 인스턴스 메소드 적용

메소드가 정의된 클래스의 인스턴스에서 인스턴스 메소드 또는 일반 메소드를 호출할 수 있습니다.
public class Cat implements Voice{
   String name;
   String breed;
   int year;


   public void talk() {
       System.out.println("meow meow");
   }
}
talk() 메서드를 호출하려면 Cat 클래스 의 인스턴스를 만들어야 합니다 .
public class Demo {
   public static void main(String[] args) {
       Cat cat = new Cat ();
       cat.talk();

   }
}
이 프로그램 출력은 다음과 같습니다.
야옹 야옹

Java의 추상 메소드

Java의 추상 메소드는 구현이 없는 메소드입니다. 즉, 선언될 때 코드가 포함되어 있지 않습니다. 추상 클래스에서만 선언할 수 있고 추상이 아닌 자손에서만 구현할 수 있습니다. 하나의 추상 메서드 myMethodAdd() 를 사용하여 추상 클래스를 만들어 보겠습니다 .
abstract class DemoAbs {
   abstract void myMethodAdd();
}
이제 이 추상 클래스의 Child 클래스인 DemoAbs를 만들어 보겠습니다 . 여기서는 반드시 myMethodAdd() 메소드를 구현해야 합니다 .
public class myClass extends DemoAbs {

   void myMethodAdd() {
       System.out.println("hello");
   }

   public static void main(String[] args) {
       DemoAbs demoAbs = new myClass();
       demoAbs.myMethodAdd();
   }
}

메소드 호출을 위한 메모리 할당

이는 보다 신중한 분석이 필요한 다소 복잡한 주제입니다. 여기서는 해당 주제에 대한 피상적인 지식을 얻기 위해 가장 기본적인 사항만 언급하겠습니다. JVM 메모리는 힙 영역과 스택 영역으로 구성됩니다. 힙은 Java 객체를 저장하는 메모리 영역입니다. 스택 메모리는 기본 변수와 메소드 객체에 대한 참조를 저장하는 임시 메모리 영역입니다. 스택 메모리에는 메서드에 따라 수명이 짧은 값이 포함되어 있습니다. 이러한 유형의 메모리는 LIFO(후입선출) 원칙을 기반으로 합니다. 스택 메모리는 메소드를 호출할 때 새로운 블록을 생성합니다. 여기에는 로컬 기본 값이 포함됩니다. 메소드를 종료하면 스택 메모리에 생성된 블록이 해제됩니다.

결론

이 기사에서 우리는 Java 언어로 메소드를 생성하는 기본 사항과 Java에 어떤 메소드가 있고 어떻게 작동하는지에 대해 알아봤습니다. 우리는 메소드가 클래스의 동작을 결정한다는 것을 배웠습니다. 메소드가 없으면 객체가 서로 상호 작용하는 것이 불가능합니다. 배운 내용을 강화하려면 Java 과정의 비디오 강의를 시청하는 것이 좋습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION