1. 액세스 한정자

각 메서드 전에 프로그래머는 소위 액세스 한정자를 지정할 수 있습니다. 여기에는 다음 키워드가 포함됩니다. public, protected, private.

이러한 액세스 한정자를 사용하면 메서드에 대한 다른 클래스의 액세스를 제한할 수 있습니다.

private예를 들어 메소드 선언 전에 키워드를 작성하면 메소드가 선언된 동일한 클래스에서만 메소드를 호출할 수 있습니다. 키워드 public를 사용하면 모든 클래스의 모든 메서드에서 표시된 메서드에 액세스할 수 있습니다.

이러한 수정자는 총 3개가 있지만 메서드에 대한 액세스 유형은 4가지입니다. 액세스 한정자가 없다는 것도 의미가 있기 때문입니다.

에서 액세스...
수식어 모든 클래스 자식 클래스 패키지 그것의 클래스
public
protected 아니요
수식어 없음 아니요 아니요
private 아니요 아니요 아니요

1. public수식어

한정자 로 표시된 메서드(또는 변수 또는 클래스)는 프로그램의 어디에서나public 액세스할 수 있습니다 . 이것은 최고 수준의 개방성입니다. 제한이 없습니다.

2. private수식어

한정자 로 표시된 메서드(또는 변수 또는 클래스)는 선언된 동일한 클래스에서만private 액세스할 수 있습니다 . 다른 모든 클래스의 경우 표시된 메서드(또는 변수)는 보이지 않습니다. 마치 존재하지 않는 것과 같습니다. 이것은 최고 수준의 제한이며 자체 클래스만 가능합니다.

3. 수정자 없음(기본 수정자)

메서드(또는 변수)가 수정자로 표시되지 않은 경우 '기본 수정자'가 있는 것으로 간주됩니다. 해당 수정자가 있는(즉, 전혀 없는) 변수 또는 메서드는 선언된 패키지의 모든 클래스에서 볼 수 있습니다 . 그리고 그들에게만. 이 수정자는 때때로 라고도 불리며 package-private변수 및 메서드에 대한 액세스가 해당 클래스가 있는 전체 패키지에 대해 열려 있음을 암시합니다.

4. protected수식어

메서드가 한정자로 표시되면 protected동일한 클래스, 동일한 패키지 및 하위 항목(메서드가 선언된 클래스를 상속하는 클래스)에서 액세스할 수 있습니다. Java Core 퀘스트에서 이 주제를 더 자세히 분석할 것입니다.

publicJava 구문 퀘스트가 끝날 때까지 모든 메서드(모든 클래스 및 클래스 변수 포함)에 수정자를 사용할 수 있습니다 . OOP를 적극적으로 학습하기 시작하면 다른 수정자가 필요합니다.

액세스 수정자가 필요한 이유는 무엇입니까?

수십, 수백 명의 프로그래머가 동시에 작성하는 대규모 프로젝트에 필요합니다.

때로는 프로그래머가 지나치게 큰 메서드를 부분으로 분할하고 코드의 일부를 도우미 메서드로 이동하려는 상황이 있습니다. 그러나 동시에 해당 코드가 제대로 작동하지 않을 수 있기 때문에 다른 프로그래머가 이러한 도우미 메서드를 호출하는 것을 원하지 않습니다.

그래서 그들은 이러한 액세스 수정자를 생각해 냈습니다. 헬퍼 메서드에 private 이라는 단어를 표시하면 클래스 이외의 어떤 코드도 헬퍼 메서드를 볼 수 없습니다.



2. static키워드

키워드 static는 메서드를 정적으로 만듭니다. 이것이 무엇을 의미하는지 나중에 살펴보겠습니다. 지금은 정적 메서드에 대한 몇 가지 사실만 기억하세요.

사실 1. 정적 메서드는 객체에 연결되지 않고 대신 선언된 클래스에 속합니다. 정적 메서드를 호출하려면 다음과 같이 작성해야 합니다.

ClassName.MethodName()

정적 메서드의 예:

클래스 이름 정적 메서드 이름
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

클래스 내에서 정적 메서드를 호출하는 경우 정적 메서드 이름 앞의 클래스 이름을 생략할 수 있습니다. 이것이 호출되는 각 정적 메소드의 이름 앞에 쓸 필요가 없는 이유입니다 .Solution

사실 2. 정적 메서드는 자체 클래스의 비정적 메서드에 액세스할 수 없습니다 . 정적 메서드는 정적 메서드에만 액세스할 수 있습니다. 결과적으로 우리는 정적 메서드에서 호출하려는 모든 메서드를 선언합니다 main.

왜? OOP를 배우기 시작하고 정적 방법이 작동하는 방식을 이해하면 이 질문에 스스로 답할 수 있을 것입니다.



3. throws키워드

메서드 선언에서 본 적이 있는 또 다른 키워드가 있습니다. 바로 throws키워드입니다. 액세스 수정자 및 static키워드와 달리 이 키워드는 메서드 매개변수 뒤에 배치됩니다.

public static Type name(parameters) throws Exception
{
  method body
}

나중에 예외를 공부할 때 그 정확한 의미를 고려할 것입니다.

그러나 피상적으로 다루기 위해 throws 키워드로 표시된 메서드는 오류(예외)를 발생시킬 수 있다고 말할 수 있습니다. 즉, 클래스의 인스턴스 Exception (및 이를 상속하는 클래스)를 의미합니다. 한 클래스에서 여러 유형의 오류가 발생할 수 있는 경우 각각을 쉼표로 구분하여 나열해야 합니다.


4. main방법

모든 수정자를 포함하는 메서드가 선언된 줄은 이 메서드가 다른 클래스 및 메서드에서 호출되는 방식에 영향을 미칩니다. 메서드가 반환할 결과 유형에 영향을 미치고 실행할 때 발생할 수 있는 오류를 나타냅니다.

이러한 줄을 메서드 선언이라고 하며 다음과 같은 일반 형식을 갖습니다.

access modifier static Type name(parameters) throws exceptions
메서드 선언의 일반 형식

는 , , 또는 전혀 access modifiers 교체되지 않습니다 .publicprotectedprivate

메서드가 정적이면 static키워드가 나타납니다(비정적 메서드에는 없음).

Type반환 값의 유형입니다( void결과가 없는 경우).

이제 메소드 선언에서 모든 키워드가 의미하는 바를 이해했을 것입니다 main.

public static void main(String[] args) throws Exception
main메서드 선언

메소드 에 대한 액세스는 키워드 main()로 표시된 대로 모든 클래스에서 가능합니다 public.

메서드는 정적이므로 명시적으로 Solution.main().

main메서드는 결과를 반환하지 않습니다. 반환 유형은 void(유형 없음)입니다.

main메서드는 문자열 배열인 인수(!)를 사용합니다. 그리고 매개변수 이름은 args우리 마음에 '인수'를 암시합니다. 프로그램이 시작되면 인수(문자열 배열)를 전달할 수 있습니다. args 메서드 의 배열 에 포함됩니다 main().

Exception(또는 그 자손) 과 같은 처리되지 않은 오류가 main()메서드에서 발생할 수 있습니다.