언어 간 키워드 비교

업데이트: 2007년 11월

이 항목에는 언어 키워드로 요약할 수 있는 일반 프로그래밍 작업이 나열되어 있습니다. 코드 예제가 필요한 작업에 대한 자세한 내용은 코드 예제를 통한 다양한 언어의 프로그래밍 개념 비교를 참조하십시오.

용도

Visual Basic

C++

C#

JScript

Visual FoxPro

변수 선언

Dim 문(Visual Basic)

Public(Visual Basic)

Friend(Visual Basic)

Protected(Visual Basic)

Private(Visual Basic)

Shared(Visual Basic)

Static(Visual Basic)1

선언자(키워드가 아닌 개념)

선언자(키워드는 사용자 정의 형식 및 기본 제공 형식 포함)

var

[암시적 선언]

PUBLIC

LOCAL

PRIVATE

명명된 상수 선언

Const

const

const

readonly

const

#DEFINE

클래스의 새 인스턴스 만들기

New

new

gcnew

new

new

NEWOBJECT( ) 함수

새 개체 만들기

New(Visual Basic)

CreateObject()(COM 개체의 경우)

CoCreateInstance()(COM 개체의 경우)

new 

새 ActiveXObject()

CREATEOBJECT( ) 함수

개체 변수에 개체 할당

=

=

=

=

=

STORE

함수/메서드는 값을 반환하지 않음

Sub2

void

void

void

Void(COM 서버에만 해당)

함수 또는 메서드 오버로드(Visual Basic: 프로시저 또는 메서드 오버로드)

Overloads

(이 경우 언어 키워드가 필요하지 않음)

(이 경우 언어 키워드가 필요하지 않음)

(이 경우 언어 키워드가 필요하지 않음)

(이 경우 언어 키워드가 필요하지 않음)

현재 개체 참조

Me3

this

this

this

this

thisform

현재 개체의 가상 메서드를 실제로 호출

MyClass

MyClass::Func1(), 여기서 MyClass는 멤버 함수가 Func1인 C++ 클래스

n/a

n/a

n/a

문자열에서 문자 검색

GetChar 함수

*(p + 10) 또는 p[10], 여기서 p는 char* 또는 wchar_t*

str[10], 여기서 str는 문자열

string4

str[10], 여기서 str는 string

charAt

substring

substr

SUBSTR( )

복합 데이터 형식(구조체) 선언

Structure

class

struct

union

__interface

struct

class

interface

class, interface

n/a

개체(생성자) 초기화

Sub New()5

생성자(키워드가 아니라 개념임)

생성자 또는 시스템 기본 형식 생성자

클래스 생성자

생성자(키워드가 아니라 개념임)6

Init 이벤트

개체 직접 종료

n/a

~ClassName

n/a

n/a

n/a

가비지 수집에 의해 개체가 회수되기 전에 시스템에 의해 호출된 메서드7

Finalize(Visual Basic 6.0인 경우 Class_Terminate)

Destructors (C++)(키워드가 아니라 개념임)

소멸자

n/a

Destroy 이벤트

선언되는 위치에서 변수 초기화

Dim x As Long = 5

Dim c As New Car(FuelTypeEnum.Gas)

// initialize to a value:

int x=5;

//with an appropriate constructor:

C c(10);

// initialize to a value:

int x = 123;

// or use default constructor:

int x = new int();

var x = 5

var y : car = new car()

LOCAL x

x = 5

함수 주소 가져오기

AddressOf(이 연산자는 대리자 인스턴스의 형태로 함수에 대한 참조 반환)

delegate

delegate

괄호로 묶지 않고 함수의 이름 사용

n/a

콜백

한 함수의 주소를 호출자를 다시 호출하는 다른 함수에 전달합니다. 예제를 보려면 방법: Visual Basic에서 프로시저에 다른 프로시저 전달을 참조하십시오.

CALLBACK(표준 형식)

callback(IDL 특성)

delegate

n/a

n/a

개체가 비동기적으로 수정될 수 있음을 선언

n/a

volatile

volatile

n/a

n/a

변수를 강제로 명시적으로 선언

Option Explicit

n/a(모든 변수는 사용 전에 선언해야 함)

n/a(모든 변수는 사용 전에 선언해야 함)

fast mode(기본값)

_VFP.LanguageOptions NEW 

지역 형식 유추 사용

Option Infer

개체를 참조하지 않는 개체 변수의 테스트

obj Is Nothing

pobj == NULL

obj == null

obj == undefined

obj == null

VARTYPE(obj)=="0"

개체를 참조하지 않는 개체 변수의 값

Nothing

nullptr

null

null

undefined

.F.

데이터베이스 null 식의 테스트

IsDbNull

n/a

n/a

x == null

ISNULL( )

Variant 변수가 초기화되었는지 여부 테스트

n/a

n/a

n/a

x == undefined

EMPTY( )

기본 속성 정의

Default

property: property 키워드는 관리 코드를 나타냄

인덱서

n/a

n/a

개체 지향 프로그래밍

용도

Visual Basic

C++

C#

JScript

Visual FoxPro

기본 클래스 참조

MyBase

__super

base

super

BaseClass 속성

ParentClass 속성

DODEFAULT()

Class::member

인터페이스 선언

인터페이스

__interface

interface class

interface

interface

DEFINE CLASS

구현될 인터페이스 지정

Implements

(인터페이스에서 파생)

class C1 : public I1

class C1 : I1

인터페이스

IMPLEMENTS

IMPLEMENTS NEW 

클래스 선언

Class

class

Classes and Structs (Managed)

class

class

DEFINE CLASSMyClassAS <ParentClass>

모듈 선언

Module

static class

static class

n/a

n/a

클래스 또는 구조체의 부분 정의 선언

Partial

n/a

Partial

n/a

n/a

클래스가 상속될 수만 있도록 지정. 클래스의 인스턴스를 만들 수 없음

MustInherit

abstract (C++)8

abstract

abstract

n/a

클래스가 상속될 수 없도록 지정

NotInheritable

sealed

sealed

final

n/a

열거 형식 선언

Enum

enum

enum

enum

n/a

클래스 상수 선언

Const

const

const(필드 선언에 적용)

const

#DEFINE

기본 클래스에서 클래스 파생

Class C1 Inherits C2

Class C1 : public Base(이 경우 언어 키워드가 필요하지 않음)

class C1 : C2

class

Class c1 extends c2

DEFINE CLASS MyClass AS ParentClass

메서드 또는 속성 재정의

Overrides

이 경우 언어 키워드가 필요하지 않음. 단 /clr 컴파일을 위한 override는 예외임(Derived Classes 참조)

override

(이 경우 언어 키워드가 필요하지 않음)

(이 경우 언어 키워드가 필요하지 않음)

파생하는 클래스에서 구현되어야 하는 메서드 선언

MustOverride

선언 끝에 = 0 삽입(순수 가상 메서드)

abstract

abstract

(이 경우 언어 키워드가 필요하지 않음)

재정의할 수 없는 메서드 선언

NotOverridable(메서드는 기본적으로 NotOverridable임)

sealed

sealed

final

n/a

가상 메서드나 속성 또는 속성 접근자 선언

Overridable

virtual

virtual

(기본적으로 메서드는 가상임)

n/a

파생 클래스에서 기본 클래스 멤버 숨기기

숨김

new (new slot in vtable)

new(C# 참조)

new 한정자

n/a

클래스 메서드에 대한 형식 안전 참조 선언

Delegate

delegate

delegate

괄호로 묶지 않고 함수의 이름 사용

n/a

변수에 해당 이벤트를 처리하려는 개체가 포함될 수 있도록 지정

WithEvents

n/a

(코드 쓰기 - 특정 키워드 없음)

(코드 쓰기 - 특정 키워드 없음)

EVENTHANDLER( ) NEW 

이벤트 프로시저가 호출될 이벤트 지정

Handles(이벤트 프로시저는 명명 패턴에 의해 WithEvents 변수와 연결될 수 있음)

n/a

event += eventHandler;

n/a

BINDEVENTS( )

여러 멤버에 액세스하기 위해 개체 식을 한 번 계산

With... End With

n/a

using 문(C# 참조)

with9

WITH ... ENDWITH

예외 처리

용도

Visual Basic

C++

C#

JScript

Visual FoxPro

구조적 예외 처리

Try... Catch... Finally... End Try

Throw

__try, __except

__finally

try, catch, finally

throw

try

catch

finally

throw

TRY

   [ tryCommands ]

[ CATCH [ To VarName ] [ WHEN IExpression ] ]

   [ catchCommands ] ]

[ THROW [ eUserExpression ] ]

[ EXIT ]

[ FINALLY

   [ finallyCommands ] ]

ENDTRY

C++ 예외 처리

n/a

try, catch, throw

n/a

n/a

n/a

판단 구조

용도

Visual Basic

C++

C#

JScript

Visual FoxPro

판단 구조 (선택)

Select... Case... End Select

switch, case, default

goto

break

switch

case

default

goto

break

switch

case

break

CASE

ICASE

판단 구조(if ... then)

If... Then... Else... End If

ElseIf

if, else

if, else

if

else

IF ... ENDIF

IIF( )

루프 구조(조건부)

While... End While

Do...Loop

do, while

continue

do

while

continue

do, while

break, continue

DO, WHILE(절)

루프 구조 (반복)

For... Next

For Each... Next

for

for

foreach

for (x=0;x<10;x++){...}

for (prop in obj) { print (obj[prop]);}

FOR(절)

FOR ... ENDFOR

Continue

NEXT

FOR EACH(절) ,FOR ... ENDFOR, Continue, Next

배열

용도

Visual Basic

C++

C#

JScript

Visual FoxPro

배열 선언

Dim a() As Long

int x[5];

int[] x = new int[5];

var x : int[]

var arr = Array()

DIMENSION

DECLARE

배열 초기화

Dim a() As Long = {3, 4, 5}

int x[5]= {1,2,3,4,5};

int[] x = new int[5] {1, 2, 3, 4, 5};

var x : int[] = [1, 2, 3, 4, 5]

var arr = new Array(1, 2, 3, 4, 5)]

x[1] = 1

x[2] = 2

배열 다시 할당

Redim

n/a

n/a

arr.length=newSize(JScript 배열만 해당)10

DIMENSION

DECLARE

클래스 범위

용도

Visual Basic

C++

C#

JScript

Visual FoxPro

프로젝트 또는 어셈블리 외부에서 볼 수 있음

Public

public

public

public

n/a

선언된 어셈블리 내에서만 볼 수 있음

Friend

private

internal

internal

n/a

현재 또는 파생 클래스 내에서만 볼 수 있음

Protected

n/a

Protected

n/a

n/a

현재 어셈블리 또는 포함하는 클래스에서 파생된 형식으로 액세스가 제한됩니다.

Protected Friend

Type and Member Visibility

protected internal

액세스 가능성 수준

n/a

n/a

프로젝트 내부(중첩 클래스의 경우 포함 클래스 내부)에서만 볼 수 있음

Private

private

private

private

n/a

멤버 범위

용도

Visual Basic

C++

C#

JScript

Visual FoxPro

클래스, 프로젝트 및 모듈 외부에서 액세스할 수 있음

Public

public

public

public

(이 경우 언어 키워드가 필요하지 않음)

클래스 외부, 프로젝트 또는 패키지 내에서 액세스할 수 있음

Friend

public private:

internal

internal

n/a

현재 및 파생된 클래스에만 액세스할 수 있음

Protected

protected

protected

protected

PROTECTED

클래스 또는 모듈 내에서만 액세스할 수 있음

Private

private

private

private

HIDDEN

선언하는 클래스의 private 멤버에 함수 또는 다른 클래스에서 액세스할 수 있도록 지정

n/a

friend(C++에서는 허용 안 됨)

friend

n/a

n/a

어셈블리 내에서 보호되며 다른 어셈블리에 대해 private임

n/a

protected private

n/a

n/a

n/a

현재 어셈블리 또는 포함하는 클래스에서 파생된 형식으로 액세스가 제한됨

Protected Friend

Type and Member Visibility

protected internal

액세스 가능성 수준

n/a

n/a

기타 수명

용도

Visual Basic

C++

C#

JScript

Visual FoxPro

프로시저의 지역 변수 유지

Static11

static

static(C# 참조)

n/a

n/a

클래스의 모든 인스턴스에 의해 공유

Shared

static

static

static

n/a

기타

용도

Visual Basic

C++

C#

JScript

Visual FoxPro

주석 코드

'

Rem

//, /* */ 주석이 여러 줄인 경우

//, /* */ 주석이 여러 줄인 경우

/// XML 주석인 경우

//, /* */ 주석이 여러 줄인 경우

*

&&

NOTE

대/소문자 구분?

아니요

아니요

Windows API 호출

Declare <API>

n/a

Platform Invoke 사용

n/a

DECLARE - DLL

이벤트 선언 및 발생

Event

RaiseEvent

n/a

event

n/a

RAISEEVENT( ) 함수

스레딩 기본 형식

SyncLock

n/a

lock

n/a

n/a

이동(분기)

Goto

goto

goto

n/a

n/a

1Visual Basic에서 Static은 Static x As Long과 같이 프로시저 내에서 변수를 선언할 때만 단독으로 사용할 수 있습니다.

2Visual Basic에서 Sub 키워드로 선언한 프로시저는 값을 반환할 수 없습니다. 프로시저가 값을 반환하게 될 경우 Function 키워드로 해당 프로시저를 선언해야 합니다.

3Visual Basic에서 Me는 컴파일 타임에 확인되지 않으므로 속성 또는 메서드의 반환 값으로 사용할 수 있습니다.

4 JScript에서 substr 함수는 계속 지원되지만 문자열 내의 문자에 액세스하는 방법으로 더 이상 선호되지 않습니다. 문자열의 특정 위치에 있는 문자에 액세스하는 가장 효율적인 방법은 괄호를 사용하는 것입니다. 예를 들어, str 문자열의 10번째 문자에 액세스하려면 str[10]을 사용합니다.

5Visual Basic에서 .NET Framework System.Object에서 파생된 클래스의 생성자는 항상 New로 명명됩니다.

6 JScript에서 생성자에 대해서는 오버로드가 허용되지 않습니다.

7 일반적으로 이러한 메서드의 코드는 가비지 수집기가 자동으로 해제하지 않는 시스템 리소스를 사용 가능하게 합니다.

8 C++에서 추상 클래스는 적어도 하나의 순수 가상 멤버를 포함합니다.

9 JScript에는 Visual Basic에서 사용하는 것과 같이 선행 마침표가 없습니다. 변수를 속성으로 잘못 파악하거나 속성을 변수로 잘못 파악할 수 있기 때문에 이 기능은 혼동하기 쉽습니다. 또한 with 문은 느린 코드를 생성합니다.

10 JScript에서 이것은 배열을 다시 할당하지 않고 "증가"시키지도 않습니다. JScript 배열(형식 Array로 선언)은 항상 간격이 넓고 동적입니다. 네이티브 배열(System.Array 또는 type[]으로 선언)은 동적이지 않습니다.

11Visual Basic에서, 공유되지 않는 클래스 메서드의 정적 지역 변수는 다른 언어의 경우처럼 단일 복사본을 공유하지 않고 클래스 인스턴스 단위로 저장됩니다. Static을 사용하여 변수를 선언하면 해당 변수가 범위를 유실했다가 다시 확보하는 경우에도 변수 값이 보존됩니다.

참고 항목

참조

코드 예제를 통한 다양한 언어의 프로그래밍 개념 비교

언어 간 연산자 비교

언어 간 데이터 형식 비교

여러 언어 및 라이브러리에서 사용되는 컨트롤 및 프로그래밍 가능한 개체 비교

기타 리소스

언어 관련 정보

Visual J#