JavaRush /Java Blog /Random-KO /자바의 메소드
articles
레벨 15

자바의 메소드

Random-KO 그룹에 게시되었습니다
Java의 메소드 - 1Java에서 애플리케이션은 클래스로 구성됩니다. 클래스는 변수로 구성됩니다. 클래스의 동작, 즉 클래스가 제공할 수 있는 논리(예: 일부 데이터 처리, 다른 메서드 호출 등)를 담당하는 데이터와 메서드를 저장하는 일을 담당합니다. 우리는 오랫동안 변수와 같은 구성요소에 대해 이야기할 수 있었지만 그것이 오늘 우리가 모인 이유는 아닙니다. 클래스의 구성 요소를 메서드로 더 잘 이야기합시다. Java의 메소드 - 2메소드는 클래스 내에서 선언된 명명된 코드 블록입니다. 여기에는 재사용이 가능한 별도의 문제를 해결하기 위한 일련의 완전한 작업(지침)이 포함되어 있습니다. 즉, 메소드는 클래스가 수행할 수 있는 함수입니다. 다른 언어에도 기능이 있습니다. Java에서만 클래스의 멤버이며 OOP 용어에 따르면 메서드라고 합니다. 하지만 계속하기 전에 간단한 예를 살펴보겠습니다.
public String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
  return resultSentence;
}
여기에는 복잡한 것이 없습니다. 전달된 이름으로 인사말 문자열을 생성하는 작업을 수행하는 Java 메서드입니다. 예를 들어 - Hello world! My name is Bobby 메소드 선언문의 각 키워드를 왼쪽에서 오른쪽으로 살펴보면서 메소드의 구성을 제대로 이해해보자. 첫 번째 키워드는 이며 public액세스 한정자를 나타냅니다.

접근 수정자

이는 클래스 멤버에게 허용되는 가시성 범위, 즉 변수나 메소드를 사용할 수 있는 위치의 제한을 나타냅니다. Java의 메소드 - 3Java에서는 다음 액세스 한정자가 사용됩니다.
  • 공개 : 공개. 이 수정자가 있는 메서드나 필드는 공개되어 현재 패키지와 외부 패키지의 다른 클래스(또는 해당 메서드와 필드)에 표시됩니다. 이는 알려진 가장 광범위한 액세스 수준입니다.

  • protected : 이 수정자가 있는 메서드나 변수는 현재 클래스나 패키지, 또는 이를 상속하는 클래스뿐만 아니라 메서드나 필드(다른 패키지에 있더라도) 어디에서나 액세스할 수 있습니다.

    protected String constructHelloSentence(String name) {...}
  • 기본 수정자. 클래스 필드 또는 메서드에 수정자가 없으면 기본 수정자가 적용됩니다. 이 경우 필드 또는 메서드는 현재 패키지의 모든 클래스에 표시됩니다( protected 와 같지만 상속 시 표시되지 않음).

    String constructHelloSentence(String name) {...}
  • private : public 한정자 의 반대입니다 . 이러한 수정자가 있는 메서드나 변수는 해당 수정자가 선언된 클래스에서만 사용할 수 있습니다.

    private String constructHelloSentence(String name) {...}
String다음으로 메소드 서명(해당 속성을 설명하는 메소드의 첫 번째 줄)이 있습니다 .

반환 값

반환 값은 호출 후 그 자리에 나타나는 데이터(메서드 실행의 일부 결과)입니다. 모든 메소드에는 반환 값이 있습니다. 아니면?

반환 값 방법

이 값은 단순 유형의 변수 또는 참조 유형 등 모든 유형의 데이터일 수 있습니다. 이 예에서는 메소드가 String문자열을 설명하는 클래스인 유형의 객체를 반환해야 함을 나타냅니다. 여기서 두 번째 요점은 단어입니다 return. 이는 반환 값과 직접적인 관계가 있습니다. 그 뒤의 값은 메서드가 호출된 위치로 다시 전송되고 메서드 자체가 닫힙니다 return. 이 단어는 일반적으로 메서드의 마지막 줄에 나타납니다( if, else...와 같은 다양한 분기가 있는 메서드 제외). 다음 줄에 코드를 작성하면 다음과 같습니다 return.
private String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  return resultSentence;
  System.out.println(resultSentence);
}
그러면 우리는 컴파일러로부터 저주를 받게 될 것입니다. 이는 별로 좋지 않습니다(컴파일러는 넌센스를 권장하지 않습니다). с또한 이후의 데이터 유형은 메서드 시그니처에 선언된 데이터 유형과 일치해야 한다는 점을 기억해야 합니다 . 자세한 내용은 여기를return 참조하세요 .

무효의

voidJava에서는 어떤 용도로 사용되나요 ? 모든 메서드에 반환 값이 있는 것은 아닙니다. 일부는 아무것도 갖고 있지 않거나 아무것도 반환할 필요가 없습니다. 그러면 무엇을 해야 할까요? 그런 다음 메소드 서명에 void. 반환 값이 없으면 메소드는 어떻게 보일까요?
protected void constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
}
우리 메소드가 아무 것도 반환해서는 안 되기 때문에 반환 값과 함께 returnSo it is라는 단어가 사라진 것을 눈치챘을 것입니다. 그러나 여기에 배치할 수도 있지만 아무런 의미 없이 그냥 return; 마지막 줄에. 이는 일반적으로 쓸모가 없으므로 void메소드에서는 선택 사항입니다. void그러나 메서드를 즉시 종료하려는 분기 또는 루프와 같은 메서드 에서는 유용하게 사용할 수 있습니다 . 다음으로 메소드 선언에는 constructHelloSentence.

메소드 이름

constructHelloSentence - 방법의 이름, 하나 또는 다른 방법을 구별할 수 있는 독특한 특징. 따라서 하나 또는 다른 방법을 호출하십시오. Java의 메소드 - 4메소드 이름은 소문자로 시작해야 하지만 카멜 케이스(CamelCase, Camel Case)도 사용해야 합니다. 이름의 다음 단어는 이전 단어와 인접하며 대문자로 작성됩니다. 메소드 이름은 메소드를 설명해야 합니다(가장 좋은 설명은 적절한 이름 지정입니다). 이렇게 하려면 동사 또는 동사와 조합을 사용하십시오: getCat, delete, createCar등. 한 클래스 내에서 메서드 이름은 고유해야 합니다(나중에 설명할 메서드 오버로드는 계산하지 않음). 우리가 분석하고 있는 방법을 좀 더 자세히 살펴보고 ( String name)

메소드 매개변수

메소드에는 외부, 즉 메소드가 호출된 위치에서 오는 특정 데이터가 있을 수도 있고 없을 수도 있습니다. String우리의 경우에는 이름이 있는 유형 개체가 도착하는 것을 볼 수 name있으며 앞으로는 이 변수를 메서드에서 사용합니다. 한 메서드에서 매개변수를 무제한으로 사용할 수 있지만 7개를 초과하는 것은 권장되지 않습니다. 정확한 요소 수를 모르지만 이러한 요소가 모두 동일한 목적에 필요하고 동일한 유형일 경우(예: String) 줄임표가 사용됩니다.
public void constructHelloSentence(String...name) {
 ...
}
각 요소의 매력은 다음과 같습니다. name[0] 생각나는 것이 있나요? 그렇구나, 배열! 다음과 같이 쓴다면 아무것도 바뀌지 않을 것입니다:
protected void constructHelloSentence(String[] name) {
 ...
}
요소에 대한 액세스는 다음과 같은 형식으로도 이루어집니다. name[1] 그리고 한 가지가 더 있습니다. 메소드 인수는 final 일 수 있습니다 .
public String constructHelloSentence(final String name) {
  ...
}
이는 이름 참조가 특정 개체에 바인딩되어 String재정의될 수 없음을 의미합니다. " Java의 참조 데이터 유형 " 자료에서 참조 변수 작업 및 예약어와의 상호 작용에 대해 final읽을 수 있습니다 .

호출 방법

이제 메소드 생성을 정리했습니다. 이제 메소드 사용에 대해 이야기하겠습니다. Java에서 메소드를 호출하는 방법은 무엇입니까? Java의 메소드 - 5Java의 모든 메소드는 클래스에 있습니다. Java에서 메소드 호출이 어떻게 작동하는지 이해하기 위해 다음 수업을 들어보겠습니다.
public class StringConstructor {
  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
우리의 메소드는 정적이지 않기 때문에(이것은 오늘 기사의 범위를 벗어나는 별도의 논의 주제입니다) 이를 호출하려면 먼저 객체를 생성한 다음 객체에 대한 메소드를 호출해야 합니다.
class Application{
  public static void main(String[] args) {
     StringConstructor stringConstructor = new StringConstructor();
     stringConstructor.constructHelloSentence("Den");
  }
}
메소드의 인수에서 화면에 표시되는 결과 문자열에서 보려는 문자열(이름)을 전달했습니다.

Hello world! My name is Den
또한 메서드는 필요한 만큼 여러 번 재사용할 수 있다는 점을 기억할 가치가 있습니다. 제한이 없습니다.

이것

setter에서와 같이 code 에서 키워드를 자주 볼 수 있습니다 this.
public void setValue(Long value) {
   this.value = value;
}
그리고 그것은 무엇을 의미합니까? thisJava에서는 이 클래스의 현재 객체에 대한 참조입니다. 예를 들어 객체를 생성했다면:
StringConstructor stringConstructor = new StringConstructor();
그러면 this개체 내부에 stringConstructor동일한 개체에 대한 링크가 있습니다. this위의 setter에서와 같이 객체 변수를 참조하고 일부 메서드를 호출하는 데 사용됩니다. 우리는 클래스를 약간 다시 작성할 수 있습니다:
public class StringConstructor {

  public String constructHelloSentence(String name) {
     String resultSentence = this.getSentence()  + name;
     System.out.println(resultSentence);
     return resultSentence;
  }

  private String getSentence() {
     return "Hello world! My name is ";
  }
}
이를 통해 this이 개체의 메서드를 호출하여 필요한 문자열을 가져옵니다. 그러나 여전히 이것은 원칙적으로 메소드에 거의 사용되지 않습니다. 왜냐하면 메소드가 없어도 주어진 객체의 메소드에 대한 참조가 있고 주로 객체 변수에 사용되기 때문입니다.

메소드 오버로딩

본질적으로 동일한 논리를 수행하지만 Hello world! 대신 world우리는 우리 자신의 단어(문자열)를 삽입하고 싶습니다. 하지만 우리에게는 이미 방법이 있습니다 constructHelloSentence. 그렇다면 본질적으로 동일한 기능을 수행하는 메서드에 대한 새로운 이름을 찾아야 할까요? 그것이 어떻든 간에, 이 순간 메소드 오버로딩이 우리에게 도움이 됩니다. Java의 메소드 - 7메소드 오버로딩은 클래스에서 선언할 때 동일한 메소드 이름을 두 번 이상 사용하는 것입니다. 언어 구문의 관점에서 볼 때 일부 지역 공간에는 동일한 이름이 두 개 있을 수 없습니다. 그러나 이름은 같지만 인수가 다른 메서드를 선언하는 것도 가능합니다. 즉, 이름은 같지만 입력 데이터가 다른 두 개 이상의 메서드가 있는 경우 클래스에 오버로드가 포함됩니다.
public class Constructor {

  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }

  protected String constructHelloSentence(String firstName, String secondName) {
     String resultSentence = "Hello " + firstName + "! My name is " + secondName;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
여기서 우리는 메소드가 동일한 액세스 수정자(및 반환 유형)를 포함할 필요가 없다는 것을 알 수 있습니다. 오버로드된 메서드가 호출되면 컴파일러는 선언된 여러 메서드 중에서 호출 중에 지정된 매개 변수를 기반으로 필요한 메서드를 자동으로 결정합니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION