Codegym University 과정의 일부로 멘토와 함께하는 강의 스니펫. 전체 과정에 등록하십시오.
"안녕하세요, 아미고! 당신은 이미 방법을 잘 알고 있다고 들었습니다."
"안녕, 리시. 그래, 나는 이미 그 선생님의 속임수를 뚫어버렸어. 나는 그것이 그렇게 나쁘지 않다고 말하고 싶지만, 너는 나에게 '아니, 아니! 당신은 아무것도 알아내지 못했어. '"
"분명 특정 선생님들, 아마도 디에고와 대화하는 데 너무 많은 시간을 보냈습니다. 어쨌든... 여전히 방법을 충분히 이해하기를 바랍니다. 결국 오늘은 방법을 설명하는 데 도움이 되는 몇 가지 마법의 단어를 가르쳐 드리겠습니다. ' 영향력의 영역."
"흥미롭게 들리네요."
"사실 모든 것이 간단합니다. 각 메서드 앞에 프로그래머는 소위 액세스 한정자를 지정할 수 있습니다. 여기에는 다음 키워드가 포함됩니다: public
, protected
, private
.
"이러한 액세스 한정자를 사용하면 메서드에 대한 다른 클래스의 액세스를 제한할 수 있습니다.
"예를 들어 private
메소드 선언 전에 키워드를 작성하면 메소드가 선언된 동일한 클래스에서만 메소드를 호출할 수 있습니다. 키워드를 사용하면 public
모든 클래스의 메소드에서 표시된 메소드에 액세스할 수 있습니다.
이러한 수정자는 총 3개가 있지만 메서드에 대한 액세스 유형은 4가지입니다. 액세스 한정자가 없다는 것도 의미가 있기 때문입니다. 다음은 완전한 표입니다.
에서 액세스... | ||||
---|---|---|---|---|
수식어 | 모든 클래스 | 자식 클래스 | 패키지 | 그것의 클래스 |
public |
예 | 예 | 예 | 예 |
protected |
아니요 | 예 | 예 | 예 |
수식어 없음 | 아니요 | 아니요 | 예 | 예 |
private |
아니요 | 아니요 | 아니요 | 예 |
"액세스 한정자에 대한 완전한 설명은 다음과 같습니다.
1. public
수식어
한정자 로 표시된 메서드(또는 변수 또는 클래스)는 프로그램의 어디에서나public
액세스할 수 있습니다 . 이것은 최고 수준의 개방성입니다. 제한이 없습니다.
2. private
수식어
한정자 로 표시된 메서드(또는 변수 또는 클래스)는 선언된 동일한 클래스에서만private
액세스할 수 있습니다 . 다른 모든 클래스의 경우 표시된 메서드(또는 변수)는 보이지 않습니다. 마치 존재하지 않는 것과 같습니다. 이것은 최고 수준의 제한이며 자체 클래스만 가능합니다.
3. 수정자 없음(기본 수정자)
메서드(또는 변수)가 수정자로 표시되지 않은 경우 '기본 수정자'가 있는 것으로 간주됩니다. 해당 수정자가 있는(즉, 전혀 없는) 변수 또는 메서드는 선언된 패키지의 모든 클래스에서 볼 수 있습니다 . 그리고 그들에게만. 이 수정자는 때때로 라고도 불리며 package-private
변수 및 메서드에 대한 액세스가 해당 클래스가 있는 전체 패키지에 대해 열려 있음을 암시합니다.
4. protected
수식어
메서드가 한정자로 표시되면 protected
동일한 클래스, 동일한 패키지 및 하위 항목(메서드가 선언된 클래스를 상속하는 클래스)에서 액세스할 수 있습니다. 자바 코어 퀘스트에서 이 주제를 더 자세히 분석할 것입니다."
"흥미롭지만 이 수정자를 모든 올바른 위치에 즉시 배치할 수 있을지 확신이 서지 않습니다.
public
"점진적으로 도달할 것입니다. 미리 걱정할 필요가 없습니다. Java 구문 퀘스트가 끝날 때까지 모든 메서드(클래스 및 인스턴스 변수 포함)에 수정자를 사용할 수 있습니다. 우리가 적극적으로 OOP를 배우기 시작할 때 다른 수식어."
"액세스 한정자가 필요한 이유를 자세히 설명해 주시겠습니까?"
"수십, 수백 명의 프로그래머가 동시에 작성하는 대규모 프로젝트에 필요합니다.
"프로그래머가 지나치게 큰 메서드를 부분으로 분할하고 코드의 일부를 헬퍼 메서드로 옮기고 싶은 상황이 있습니다. 그러나 동시에 다른 프로그래머가 이러한 헬퍼 메서드를 호출하는 것을 원하지 않습니다. 해당 코드가 제대로 작동하지 않을 수 있습니다."
"그래서 그들은 이러한 액세스 수정자를 생각해 냈습니다. 개인이라는 단어로 헬퍼 메서드를 표시하면 클래스 이외의 어떤 코드도 헬퍼 메서드를 볼 수 없습니다."
"이해가가는 것 같네요."
static
예어
"흥미로운 또 다른 키워드가 있습니다. 그것은 static
. 당연히 메소드를 정적으로 만듭니다."
"그게 무슨 뜻이야?"
"나중에 자세히 설명하겠습니다. 걱정하지 마세요. 지금은 정적 메서드에 대한 몇 가지 사실을 기억해 보세요.
사실 1. 정적 메서드는 객체에 연결되지 않고 대신 선언된 클래스에 속합니다. 정적 메서드를 호출하려면 다음과 같이 작성해야 합니다.
ClassName.MethodName()
정적 메서드의 예:
클래스 이름 | 정적 메서드 이름 | |
---|---|---|
Thread.sleep() |
Thread |
sleep() |
Math.abs() |
Math |
abs() |
Arrays.sort() |
Arrays |
sort() |
클래스 내에서 정적 메서드를 호출하는 경우 정적 메서드 이름 앞의 클래스 이름을 생략할 수 있습니다. 이것이 호출되는 각 정적 메서드의 이름 앞에 쓸 필요가 없는 이유입니다 .Solution
사실 2. 정적 메서드는 자체 클래스의 비정적 메서드에 액세스할 수 없습니다. 정적 메서드는 정적 메서드에만 액세스할 수 있습니다. 결과적으로 우리는 main
정적 메서드에서 호출하려는 모든 메서드를 선언합니다."
"왜 그런 겁니까?"
"OOP를 배우기 시작하고 정적 방법이 어떻게 작동하는지 이해하면 이 질문에 스스로 대답하게 될 것입니다. 그때까지는 저를 믿으세요.
throws
예어
"메소드 선언에서 본 적이 있는 또 다른 키워드가 있습니다. 바로 throws
키워드입니다. 액세스 한정자 및 키워드와 달리 이 키워드는 메서드 매개변수 뒤에static
배치됩니다 .
public static Type name(parameters) throws Exception
{
method body
}
"그게 무슨 뜻이야?"
"나중에 우리가 예외를 연구할 때(레벨 15에서) 그것의 진정한 목적을 알게 될 것임을 다시 한 번 말해야 합니다.
그러나 피상적으로 다루기 위해 키워드로 표시된 메서드는 클래스의 인스턴스(및 이를 상속하는 클래스) throws
를 의미하는 오류(예외)를 throw할 수 있다고 말할 수 있습니다. Exception
한 클래스에서 여러 유형의 오류가 발생할 수 있는 경우 각각을 쉼표로 구분하여 나열해야 합니다."
"이상하고 이해할 수 없는 소리군요! 레벨 14를 기다려야 합니다."
주요 방법
"이제 기본 메서드를 자세히 살펴보겠습니다. 모든 수정자를 포함하는 메서드가 선언된 행이 이 메서드가 다른 클래스 및 메서드에서 호출되는 방식에 영향을 미친다는 것을 이미 알고 있습니다. 결과 메서드는 반환하고 실행할 때 발생할 수 있는 오류를 나타냅니다.
"이러한 줄을 메서드 선언 이라고 하며 다음과 같은 일반 형식을 갖습니다.
access modifier static Type name(parameters) throws exceptions
는 , , 또는 전혀 access modifiers
교체되지 않습니다 .public
protected
private
메서드가 정적이면 static
키워드가 나타납니다(비정적 메서드에는 없음).
Type
반환 값의 유형입니다( void
결과가 없는 경우).
"이제 메소드 선언에서 이 모든 단어가 의미하는 바를 훨씬 더 잘 이해하게 되었습니다 main
.
public static void main(String[] args) throws Exception
"글쎄, 이제 나는 키워드 main()
로 표시된 것처럼 모든 클래스에서 메서드에 대한 액세스가 가능하다는 것을 깨달았습니다 public
. 메서드는 정적이므로 명시적으로 호출할 수 있습니다 Solution.main()
."
" main()
메소드가 반환하는 결과는 무엇입니까?"
"전혀 없습니다! 결과 유형은 입니다 void
. 일종의 빈 유형, 자리 표시자입니다."
" main()
괄호 안에 있는 것은 무엇입니까?"
"흠... 메소드가 인수(!)를 취하는 것으로 나타났습니다 main
. 인수는 문자열 배열로 전달됩니다."
"맞습니다. 그리고 매개변수 이름은 우리 마음에 '인수'를 제안합니다. 프로그램이 시작되면 문자열 배열인 인수를 전달할 수 있습니다. 메서드 의 배열 args
에 포함될 것입니다. "args
main()
"와우! 처음 봤을 때 이게 궁금했는데, 익숙해지다 보니 아무 생각 없이 파라미터 목록을 쓰기 시작했어요."
"우리는 모두 거기에 있었습니다. 마지막으로 Exception
(또는 그 자손)과 같은 처리되지 않은 오류가 메서드에서 발생할 수 있습니다 . 우리는 선언 부분 main()
덕분에 이것을 알고 있습니다 ."throws Exception
"고마워, 리시. 다 이해하진 못했지만 재미있었어."
"천만에요. 차차 이 모든 미묘한 점들을 이해하게 될 거에요."
GO TO FULL VERSION