언어 간 키워드 비교
업데이트: 2007년 11월
이 항목에는 언어 키워드로 요약할 수 있는 일반 프로그래밍 작업이 나열되어 있습니다. 코드 예제가 필요한 작업에 대한 자세한 내용은 코드 예제를 통한 다양한 언어의 프로그래밍 개념 비교를 참조하십시오.
용도 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
변수 선언 |
선언자(키워드가 아닌 개념) |
선언자(키워드는 사용자 정의 형식 및 기본 제공 형식 포함) |
var |
[암시적 선언] PUBLIC LOCAL PRIVATE |
|
명명된 상수 선언 |
const |
#DEFINE |
|||
클래스의 새 인스턴스 만들기 |
new |
NEWOBJECT( ) 함수 |
|||
새 개체 만들기 |
CreateObject()(COM 개체의 경우) |
CoCreateInstance()(COM 개체의 경우) |
새 ActiveXObject() |
CREATEOBJECT( ) 함수 |
|
개체 변수에 개체 할당 |
= |
= |
= |
= STORE |
|
함수/메서드는 값을 반환하지 않음 |
Sub2 |
void |
Void(COM 서버에만 해당) |
||
함수 또는 메서드 오버로드(Visual Basic: 프로시저 또는 메서드 오버로드) |
(이 경우 언어 키워드가 필요하지 않음) |
(이 경우 언어 키워드가 필요하지 않음) |
(이 경우 언어 키워드가 필요하지 않음) |
(이 경우 언어 키워드가 필요하지 않음) |
|
현재 개체 참조 |
Me3 |
this |
this thisform |
||
현재 개체의 가상 메서드를 실제로 호출 |
MyClass::Func1(), 여기서 MyClass는 멤버 함수가 Func1인 C++ 클래스 |
n/a |
n/a |
n/a |
|
문자열에서 문자 검색 |
*(p + 10) 또는 p[10], 여기서 p는 char* 또는 wchar_t* |
str[10], 여기서 str는 문자열 |
str[10], 여기서 str는 string charAt substring substr |
SUBSTR( ) |
|
복합 데이터 형식(구조체) 선언 |
class, interface |
n/a |
|||
개체(생성자) 초기화 |
생성자(키워드가 아니라 개념임) |
생성자 또는 시스템 기본 형식 생성자 |
생성자(키워드가 아니라 개념임)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(이 연산자는 대리자 인스턴스의 형태로 함수에 대한 참조 반환) |
괄호로 묶지 않고 함수의 이름 사용 |
n/a |
||
콜백 |
한 함수의 주소를 호출자를 다시 호출하는 다른 함수에 전달합니다. 예제를 보려면 방법: Visual Basic에서 프로시저에 다른 프로시저 전달을 참조하십시오. |
CALLBACK(표준 형식) callback(IDL 특성) |
n/a |
n/a |
|
개체가 비동기적으로 수정될 수 있음을 선언 |
n/a |
n/a |
n/a |
||
변수를 강제로 명시적으로 선언 |
n/a(모든 변수는 사용 전에 선언해야 함) |
n/a(모든 변수는 사용 전에 선언해야 함) |
fast mode(기본값) |
_VFP.LanguageOptions NEW |
|
지역 형식 유추 사용 |
|||||
개체를 참조하지 않는 개체 변수의 테스트 |
pobj == NULL |
obj == null |
obj == undefined obj == null |
VARTYPE(obj)=="0" |
|
개체를 참조하지 않는 개체 변수의 값 |
nullptr |
null undefined |
.F. |
||
데이터베이스 null 식의 테스트 |
n/a |
n/a |
x == null |
ISNULL( ) |
|
Variant 변수가 초기화되었는지 여부 테스트 |
n/a |
n/a |
n/a |
x == undefined |
EMPTY( ) |
기본 속성 정의 |
property: property 키워드는 관리 코드를 나타냄 |
n/a |
n/a |
개체 지향 프로그래밍
용도 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
기본 클래스 참조 |
super |
BaseClass 속성 ParentClass 속성 DODEFAULT() Class::member |
|||
인터페이스 선언 |
interface |
DEFINE CLASS |
|||
구현될 인터페이스 지정 |
(인터페이스에서 파생) class C1 : public I1 |
class C1 : I1 인터페이스 |
IMPLEMENTS |
IMPLEMENTS NEW |
|
클래스 선언 |
class |
DEFINE CLASSMyClassAS <ParentClass> |
|||
모듈 선언 |
static class |
static class |
n/a |
n/a |
|
클래스 또는 구조체의 부분 정의 선언 |
n/a |
n/a |
n/a |
||
클래스가 상속될 수만 있도록 지정. 클래스의 인스턴스를 만들 수 없음 |
abstract |
n/a |
|||
클래스가 상속될 수 없도록 지정 |
final |
n/a |
|||
열거 형식 선언 |
enum |
n/a |
|||
클래스 상수 선언 |
const(필드 선언에 적용) |
const |
#DEFINE |
||
기본 클래스에서 클래스 파생 |
Class C1 : public Base(이 경우 언어 키워드가 필요하지 않음) |
class C1 : C2 |
Class c1 extends c2 |
DEFINE CLASS MyClass AS ParentClass |
|
메서드 또는 속성 재정의 |
이 경우 언어 키워드가 필요하지 않음. 단 /clr 컴파일을 위한 override는 예외임(Derived Classes 참조) |
(이 경우 언어 키워드가 필요하지 않음) |
(이 경우 언어 키워드가 필요하지 않음) |
||
파생하는 클래스에서 구현되어야 하는 메서드 선언 |
선언 끝에 = 0 삽입(순수 가상 메서드) |
abstract |
(이 경우 언어 키워드가 필요하지 않음) |
||
재정의할 수 없는 메서드 선언 |
NotOverridable(메서드는 기본적으로 NotOverridable임) |
final |
n/a |
||
가상 메서드나 속성 또는 속성 접근자 선언 |
(기본적으로 메서드는 가상임) |
n/a |
|||
파생 클래스에서 기본 클래스 멤버 숨기기 |
n/a |
||||
클래스 메서드에 대한 형식 안전 참조 선언 |
괄호로 묶지 않고 함수의 이름 사용 |
n/a |
|||
변수에 해당 이벤트를 처리하려는 개체가 포함될 수 있도록 지정 |
n/a |
(코드 쓰기 - 특정 키워드 없음) |
(코드 쓰기 - 특정 키워드 없음) |
EVENTHANDLER( ) NEW |
|
이벤트 프로시저가 호출될 이벤트 지정 |
Handles(이벤트 프로시저는 명명 패턴에 의해 WithEvents 변수와 연결될 수 있음) |
n/a |
event += eventHandler; |
n/a |
BINDEVENTS( ) |
여러 멤버에 액세스하기 위해 개체 식을 한 번 계산 |
n/a |
with9 |
WITH ... ENDWITH |
예외 처리
용도 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
구조적 예외 처리 |
try catch finally throw |
TRY [ tryCommands ] [ CATCH [ To VarName ] [ WHEN IExpression ] ] [ catchCommands ] ] [ THROW [ eUserExpression ] ] [ EXIT ] [ FINALLY [ finallyCommands ] ] ENDTRY |
|||
C++ 예외 처리 |
n/a |
n/a |
n/a |
n/a |
판단 구조
용도 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
판단 구조 (선택) |
case |
switch case break |
CASE ICASE |
||
판단 구조(if ... then) |
if else |
IF ... ENDIF IIF( ) |
|||
루프 구조(조건부) |
do, while break, continue |
DO, WHILE(절) |
|||
루프 구조 (반복) |
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 |
---|---|---|---|---|---|
배열 선언 |
int[] x = new int[5]; |
var x : int[] var arr = Array() |
DIMENSION DECLARE |
||
배열 초기화 |
var x : int[] = [1, 2, 3, 4, 5] var arr = new Array(1, 2, 3, 4, 5)] |
x[1] = 1 x[2] = 2 |
|||
배열 다시 할당 |
n/a |
n/a |
arr.length=newSize(JScript 배열만 해당)10 |
DIMENSION DECLARE |
클래스 범위
용도 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
프로젝트 또는 어셈블리 외부에서 볼 수 있음 |
public |
n/a |
|||
선언된 어셈블리 내에서만 볼 수 있음 |
internal |
n/a |
|||
현재 또는 파생 클래스 내에서만 볼 수 있음 |
n/a |
n/a |
n/a |
||
현재 어셈블리 또는 포함하는 클래스에서 파생된 형식으로 액세스가 제한됩니다. |
protected internal |
n/a |
n/a |
||
프로젝트 내부(중첩 클래스의 경우 포함 클래스 내부)에서만 볼 수 있음 |
private |
n/a |
멤버 범위
용도 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
클래스, 프로젝트 및 모듈 외부에서 액세스할 수 있음 |
public |
(이 경우 언어 키워드가 필요하지 않음) |
|||
클래스 외부, 프로젝트 또는 패키지 내에서 액세스할 수 있음 |
public private: |
internal |
n/a |
||
현재 및 파생된 클래스에만 액세스할 수 있음 |
protected |
PROTECTED |
|||
클래스 또는 모듈 내에서만 액세스할 수 있음 |
private |
HIDDEN |
|||
선언하는 클래스의 private 멤버에 함수 또는 다른 클래스에서 액세스할 수 있도록 지정 |
n/a |
friend(C++에서는 허용 안 됨) |
friend |
n/a |
n/a |
어셈블리 내에서 보호되며 다른 어셈블리에 대해 private임 |
n/a |
protected private |
n/a |
n/a |
n/a |
현재 어셈블리 또는 포함하는 클래스에서 파생된 형식으로 액세스가 제한됨 |
protected internal |
n/a |
n/a |
기타 수명
용도 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
프로시저의 지역 변수 유지 |
Static11 |
n/a |
n/a |
||
클래스의 모든 인스턴스에 의해 공유 |
static |
n/a |
기타
용도 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
주석 코드 |
//, /* */ 주석이 여러 줄인 경우 |
* && NOTE |
|||
대/소문자 구분? |
아니요 |
예 |
예 |
예 |
아니요 |
Windows API 호출 |
n/a |
n/a |
DECLARE - DLL |
||
이벤트 선언 및 발생 |
n/a |
n/a |
RAISEEVENT( ) 함수 |
||
스레딩 기본 형식 |
n/a |
n/a |
n/a |
||
이동(분기) |
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을 사용하여 변수를 선언하면 해당 변수가 범위를 유실했다가 다시 확보하는 경우에도 변수 값이 보존됩니다.
참고 항목
참조
여러 언어 및 라이브러리에서 사용되는 컨트롤 및 프로그래밍 가능한 개체 비교