다음을 통해 공유


JScript 한정자

업데이트: 2007년 11월

JScript 한정자는 클래스, 인터페이스 또는 클래스나 인터페이스 멤버의 동작 및 표시를 변경하는 데 사용합니다. 클래스와 인터페이스를 정의할 때 한정자를 사용할 수 있지만 꼭 필요한 것은 아닙니다.

표시 한정자

표시 한정자는 외부 코드가 클래스, 인터페이스 및 그 멤버에 액세스하는 방법을 제한합니다. 이러한 제한을 사용하여 특수화된 내장 메서드와 필드에 대한 호출을 방지함으로써 개체 지향 프로그래밍을 효율적으로 실행할 수 있습니다.

기본적으로 클래스에 액세스할 수 있는 모든 코드는 그 클래스의 모든 멤버에 액세스할 수 있습니다. 표시 한정자를 사용하면 외부 코드가 특정 클래스 멤버에 액세스하는 것을 선택적으로 막을 수 있으므로 동일한 패키지의 클래스만 멤버에 액세스하거나 파생 클래스만 클래스 멤버에 액세스하도록 할 수 있습니다.

표시 한정자는 전역 함수나 변수에 적용될 수 없습니다. 함께 사용할 수 있는 표시 한정자는 protected와 internal 밖에 없습니다.

표시 한정자

사용 대상

의미

public

클래스, 클래스 멤버, 인터페이스, 인터페이스 멤버 또는 열거

클래스에 액세스하는 모든 코드에서 표시 제한 없이 멤버를 볼 수 있습니다. 기본적으로 JScript에서 클래스, 인터페이스 및 그 멤버는 공용입니다.

전용

클래스 멤버

멤버는 선언된 클래스 안에서만 볼 수 있으며 파생 클래스에서는 볼 수 없습니다. 현재 클래스 외부의 코드는 전용 멤버에 액세스할 수 없습니다.

protected

클래스 멤버

멤버는 자신이 선언된 클래스 내부와 그 클래스의 파생 클래스에서만 볼 수 있습니다. protected 한정자는 패키지 범위의 클래스에는 사용할 수 없지만 중첩 클래스에는 사용할 수 있습니다.

internal

클래스, 클래스 멤버, 열거

클래스, 클래스 멤버 또는 열거는 자신이 선언된 패키지 내부의 모든 위치에서 볼 수 있지만 패키지 외부에서는 볼 수 없습니다.

상속 한정자

상속 한정자는 파생 클래스의 메서드와 속성이 기본 클래스의 메서드와 속성을 재정의하는 방법을 제어합니다. 이 제어를 사용하여 파생 클래스의 메서드가 사용자가 작성한 클래스를 재정의하는 여부를 제어할 수 있습니다.

파생 클래스에서 버전 세이프 hide 속성이 사용되지 않는 한 기본적으로 파생 클래스의 메서드는 기본 클래스 메서드를 재정의합니다. 이 특성을 사용하면 재정의가 되지 않습니다. 상속 한정자를 사용하면 특정 메서드를 항상 재정의할 것인지 또는 재정의하지 않을 것인지를 제어할 수 있습니다.

기본 클래스 메서드가 재정의되는 일이 없도록 해야 하는 상황이 있을 수 있습니다. 예를 들어, 패키지에서 클래스를 정의하는 경우 final 한정자를 사용하여 파생 클래스가 그 클래스의 메서드와 속성을 변경하지 않도록 할 수 있습니다.

반면에 클래스에서 특정 메서드를 재정의하도록 해야 하는 경우도 있습니다. 예를 들어, 몇 가지 기본 기능을 제공하는 클래스를 만들되 일부 메서드에 대해 abstract 한정자를 사용할 수 있습니다. abstract메서드의 구현 여부는 파생 클래스 작성자에게 달려 있습니다.

역시 재정의를 관리하는 버전 세이프 한정자는 기본 클래스가 아니라 파생 클래스 쪽에서 재정의를 관리합니다. 버전 세이프 한정자는 재정의하고 있는 기본 클래스 메서드에 상속 한정자가 없는 경우에만 영향을 줍니다.

두 상속 한정자를 결합하거나 상속 한정자와 static 한정자를 결합할 수 없습니다.

상속 한정자

사용 대상

의미

abstract

클래스, 메서드 또는 속성

메서드 또는 속성의 경우 해당 멤버에 구현된 것이 없다는 것을 나타내며 클래스의 경우 하나 이상의 구현되지 않은 메서드가 있다는 것을 나타냅니다. 추상 클래스 또는 추상 멤버가 포함된 클래스는 new 키워드를 사용하여 인스턴스화할 수 없지만 기본 클래스로 사용할 수 있습니다.

final

클래스, 메서드 또는 속성

확장할 수 없는 클래스나 재정의할 수 없는 메서드의 경우입니다. final을 사용하면 파생 클래스가 중요 함수를 재정의하여 클래스의 동작을 변경할 수 없도록 합니다. final 한정자를 사용하는 메서드는 숨기거나 오버로드할 수 있으나 재정의할 수 없습니다.

버전 세이프 한정자

버전 세이프 한정자는 기본 클래스의 메서드를 재정의하는 파생 클래스 메서드를 제어합니다. 이러한 제어를 사용하여 사용자가 만든 클래스가 기본 클래스의 메서드를 재정의할 것인지 여부를 결정할 수 있습니다.

파생 클래스 정의에 상속 한정자를 포함시켜 재정의를 방지할 수 있지만, 기본적으로 파생 클래스 메서드는 기본 클래스의 메서드를 재정의합니다. 버전 세이프 한정자를 사용하여 특정 메서드를 재정의할 것인지 여부를 제어할 수 있습니다.

기본 클래스 메서드가 재정의되지 않도록 해야 하는 경우가 있습니다. 예를 들어, 클래스를 확장하여 기본 클래스 메서드의 동작을 변경할 경우 그러한 메서드가 기본 클래스에서 재정의되지 않도록 하려면 메서드를 선언할 때 hide 한정자를 사용합니다.

반대로 특정 기본 클래스 메서드를 재정의해야 하는 경우도 있습니다. 예를 들어, 클래스를 수정하지 않고 클래스 메서드를 변경하려면 클래스를 확장하고 메서드 선언에 override 한정자를 사용하여 새 메서드가 기본 클래스를 재정의하도록 할 수 있습니다.

버전 세이프 한정자를 제대로 사용한 것인지는 기본 클래스 메서드의 선언에서 상속 한정자를 사용했는지 여부에 달려 있습니다. final 한정자로 표시된 기본 클래스 메서드는 재정의할 수 없으며, abstract 한정자로 표시된 기본 클래스 메서드는 추상 기본 클래스 메서드를 명시적으로 구현해야만 숨길 수 있습니다.

두 버전 세이프 한정자를 결합하거나 버전 세이프 한정자와 static 한정자를 결합할 수 없습니다. 버전 세이프 모드에서 실행할 때는 기본 클래스 메서드를 재정의하는 각 메서드에 하나의 버전 세이프 한정자만 사용할 수 있습니다.

버전 세이프 한정자

사용 대상

의미

hide

메서드 또는 속성

기본 클래스에 있는 같은 이름의 멤버를 재정의하지 않습니다.

override

메서드 또는 속성

기본적으로 기본 클래스에 있는 같은 이름의 멤버를 재정의합니다.

expando 한정자

expando 한정자는 클래스 기반 개체가 JScript 개체인 것처럼 동작하도록 만듭니다. expando 개체에는 메서드와 속성을 동적으로 추가할 수 있습니다. 자세한 내용은 프로토타입 기반 개체를 참조하십시오.

다른 한정자에 상관 없이 expando 한정자를 사용할 수 있습니다.

한정자

사용 대상

의미

expando

클래스 또는 메서드

클래스의 경우 동적 속성인 expando를 저장하고 검색할 수 있는 인덱싱된 속성을 클래스 기본값으로 제공합니다. 메서드의 경우 expando 개체의 생성자라는 것을 나타냅니다.

static 한정자

static 한정자는 클래스 멤버가 클래스의 인스턴스가 아니라 클래스 자체에 속한다는 것을 나타냅니다. 따라서, 클래스에 한정된 데이터와 메서드는 어느 특정 인스턴스와 연관되지 않을 수 있습니다.

static 한정자는 버전 세이프 한정자 또는 상속 한정자와 결합할 수 없습니다.

한정자

사용 대상

의미

static

메서드, 속성, 필드 또는 클래스

메서드의 경우 클래스의 인스턴스 없이 호출할 수 있다는 것을 나타냅니다. 속성 및 필드의 경우 모든 인스턴스에서 한 복사본을 공유한다는 것을 나타냅니다. 클래스를 초기화하는 코드를 의미하는 static 문과 static 한정자를 혼동하지 않도록 합니다.

참고 항목

참조

class 문

interface 문

function 문

function get 문

function set 문

var 문

const 문

static 문

기타 리소스

한정자