JavaRush /Java Blog /Random-KO /Java 세계에서 수정자 또는 마법을 부여하는 방법
Petr Gorskin
레벨 22
Москва

Java 세계에서 수정자 또는 마법을 부여하는 방법

Random-KO 그룹에 게시되었습니다
좋은 은하계의 날이 되세요, 동지들! 이것은 나의 첫 번째 행성 간 원고이며, 나는 엔지니어이기 때문에 일부 개념의 해석은 외계 언어로 이루어질 수 있습니다.
Java 세계에서 수정자 또는 마법을 부여하는 방법 - 1
소개 내 생각에 Java는 문(패키지)이 있는 끝없는 복도와 같습니다. 각 문 뒤에는 여유 공간이 있으며, 개체 생성을 위한 지침(클래스)이 포함된 마법의 두루마리 산더미가 저장되어 있는 파일 캐비닛이 있습니다. 각 스크롤은 일련의 특성(변수) 및 능력(메서드), 즉 클래스 자체 또는 클래스 기반으로 구성된 개체에서 수행되는 작업(필드)을 설명합니다. 이 단계에서는 우리 자신을 마법사라고 상상하고 완전히 새로운 명령어(클래스)를 만들어 보겠습니다. 그래서 : Java 세계에서 수정자 또는 마법을 부여하는 방법 - 2지혜의 비약을 마시고 (기본 사항을 배우고) 지침 작성을 시작합시다. 접근 및 비접근 수식어 기반으로 생성된 모든 명령과 개체, 특성 및 능력이 처음에는 마법처럼 마법에 걸릴 것이라고 상상해 봅시다. 특정 수정자 세트가 할당됩니다. 가능한 마법에 대한 가이드를 만들어 보겠습니다.
  1. 클래스, 객체 또는 필드의 접근성을 설명하는 액세스 한정자가 필요합니다. 이것이 없으면 JVM(이것은 범용 마법의 소스임)이 자동으로 패키지에 기본 식별자를 할당합니다.

    두 번째 수정자부터 시작하는 비액세스 수정자는 필수가 아니며 서로 충돌할 수도 있습니다(그러나 먼저 중요한 것이 먼저입니다).

  2. Static 수정자는 클래스, 개체 또는 필드가 정적임을 나타냅니다. 그러나 그것은 무엇을 의미합니까? 기본적으로는 현장에서 시도해 보겠습니다.

    정적 변수는 클래스 변수라고 하며 해당 클래스의 모든 인스턴스에 고유합니다. 정적 메서드는 선언된 개체를 만들지 않고도 호출할 수 있습니다. 정적 클래스는 한 클래스를 다른 클래스에 중첩할 때 사용되며 내부 클래스와 외부 클래스 사이의 상호 작용 원리는 메서드와 유사합니다(이는 별도의 논의 주제입니다). 객체 내에서 별도의 블록으로 사용할 수도 있습니다.

  3. 최종 수정자는 변수가 상수임을 효과적으로 나타냅니다. 메소드의 경우 - 상속 중에 재정의할 수 없지만 클래스의 경우 이는 메소드에서 상속될 수 없음을 나타냅니다(불변).

    static 및 final 수정자는 클래스, 개체 및 필드에 적용됩니다. 그러나 그 중 일부에만 적용되는 수정자가 있습니다(또는 변수와 메서드가 모두 필드이지만 모든 수정자가 둘 다에 적용되는 것은 아니기 때문에 일부에도 적용됨). 비유를 하자면 부츠와 장갑에만 속도 마법을 부여할 수 있지만(더 빠르게 움직이게 하기 위해) 모자에 속도 마법을 부여하는 것은 의미가 없습니다(그리고 Universal Supervisory Council(컴파일러)에서는 이를 허용하지 않습니다).

  4. Abstract 수정자는 메서드와 클래스에만 적용됩니다 . 추상 메서드는 구현(본문)이 없는 메서드입니다.

    클래스가 추상으로 표시되면 추상 메서드가 포함되거나 해당 클래스의 인스턴스 생성을 방지하기 위해 수행됩니다. 비유를 그리면 지침 중간에 "객체 색칠하기"라는 제목이 표시되며 그 뒤에는 설명이 없습니다. 저것들. 이 지침을 사용하면 개체를 만들고 색칠할 수도 있지만, 이 특정 지침은 방법을 알려주지 않습니다(이 개체를 기반으로 빨간색 개체를 만드는 방법을 직접 작성하고 색칠하는 방법을 설명).

멀티스레드 환경에서 작업할 때 특수 수정자를 사용할 수 있습니다.
  1. 동기화 수정자는 메소드에만 사용됩니다. 해당 존재는 한 번에 하나의 스레드만 실행할 수 있음을 나타냅니다. 객체 내에서 별도의 코드 블록으로 사용될 수도 있습니다(동기화 객체 지정).

  2. 휘발성 수정자 - 변수에만 해당됩니다 . 여러 스레드에서 동시에 사용할 수 있는 변수에 사용하는 것이 좋습니다. 이러한 수정자가 있는 변수는 변경될 때마다 프로세서 캐시에서 메인 메모리로 즉시 복사되므로 병렬 스레드가 가장 최근 값을 받을 수 있습니다.

    하나의 스레드만 변수에 쓸 수 있고 나머지 스레드는 읽기만 가능한 경우 휘발성이 적용 가능하다는 점은 주목할 가치가 있습니다. 다른 경우에는 휘발성 변수에 쓰는 메서드에 동기화 수정자를 추가하는 것이 좋습니다.

  3. 과도 수정자 – 변수에만 해당됩니다 . 이 수정자는 객체를 직렬화할 때 건너뛰어야 하는 변수를 표시합니다. (이것은 원칙적으로 스스로 읽을 수 있는 스마트한 프로세스입니다...)*

    * - 제가 이 글을 레벨 17에 썼는데 그때까지는 연재 과정에 대한 설명이 없었기 때문에 복사 붙여넣기보다는 필요하다면 직접 공부해 보시길 권합니다.

충돌하는 수정자 쌍 다양한 클래스, 개체 및 필드에 수정자를 적용할 수 있는 것 외에도 충돌하는 쌍의 개념도 있습니다. 투구에 힘을 부여하면 무거워지지만, 동시에 투구에 마법을 부여하면 가벼워지고 싶다고 가정해 보겠습니다. 하나는 다른 하나와 맞지 않습니다.
  1. 최종 및 휘발성 - 변수의 경우 최종(상수)이라고 동시에 말할 수 없으며 여러 스레드가 이를 변경할 수 있습니다... 결국 변수는 상수이며 언제든지 스레드가 이를 읽을 수 있습니다. , 그러나 단일 스레드는 상수를 변경할 수 없습니다(Universal Supervisory Council은 이를 허용하지 않습니다).
  2. 최종 및 추상 - 클래스와 메서드는 추상(대부분의 경우 구현을 위해 명확하게 해야 함)이면서 최종일 수 없습니다. 불변. 지침에는 모든 재료(추상 부분)로 내구성이 뛰어난 헬멧을 만드는 방법이 나와 있지만 이를 위해서는 구멍이 없어야 합니다(마지막 필수 부분은 변경할 수 없음).
  3. 추상 및 정적 - 추상 메서드는 동시에 정적이거나 동기화될 수 없습니다. 정적 추상 메소드는 아무 것도 하지 않을 뿐만 아니라 전체 클래스에 속하기 때문에 의미가 없습니다. 결과는 쓸모가 없습니다.
  4. 추상화 및 동기화 - 아무것도 하지 않는 방법으로 작업을 동기화하는 것이 무슨 의미가 있습니까?
요약하면 수정자에 대한 설명이 끝났고 모든 충돌이 해결되었으며 이제 결과를 치트 시트(인챈트 다이어그램)로 통합할 수 있습니다. Java 세계에서 수정자 또는 마법을 부여하는 방법 - 3결론적으로, 이 기사를 쓰는 것이 내 욕망의 실현이라고 말하고 싶습니다. 수정자를 연구합니다. 경험의 성공 여부는 판단에 달려 있습니다. 나는 이를 개선/수정하기 위한 여러분의 제안을 기다리고 있으며 아마도 함께 초심자 Java 플레이어에게 매우 유용한 매뉴얼을 만들 것입니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION