맨위로가기

생성자

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

생성자는 객체 지향 프로그래밍에서 클래스의 인스턴스를 생성하고 초기화하는 데 사용되는 특수한 메서드이다. C++, Java, C#, PHP 등 클래스 기반 언어에서는 클래스명과 동일한 이름을 가지며, 전달되는 인수에 따라 여러 형태의 생성자를 정의할 수 있다. 주요 생성자 유형으로는 인수 없이 호출되는 기본 생성자, 동일 클래스 객체를 기반으로 복제하는 복사 생성자, 객체의 내부 상태를 이동하는 무브 생성자, 다른 타입으로부터의 암묵적 변환을 제공하는 변환 생성자 등이 있다. 프로토타입 기반 언어인 JavaScript에서는 `new` 연산자와 함께 함수를 호출하여 생성자처럼 사용하며, ES6부터는 `class` 키워드를 통해 생성자를 정의한다. 생성자는 메모리 관리와 밀접한 관련이 있으며, 스택 또는 힙에 객체를 생성한다.

더 읽어볼만한 페이지

  • 메소드 (컴퓨터 프로그래밍) - 소멸자 (컴퓨터 프로그래밍)
    소멸자는 객체가 메모리에서 제거되기 직전에 호출되는 멤버 함수로, 객체 자원 해제 및 정리 작업을 수행하며, C++ 등 여러 언어에서 구현되고 메모리 누수 방지에 기여한다.
  • 메소드 (컴퓨터 프로그래밍) - 동적 디스패치
    동적 디스패치는 프로그램 실행 시 호출할 메서드를 결정하는 메커니즘으로, 단일 또는 다중 객체 기준으로 선택하며, 유연성과 확장성을 높이지만 성능 오버헤드를 발생시킬 수 있다.
  • 객체 지향 프로그래밍 - Is-a
    Is-a 관계는 객체 지향 프로그래밍에서 한 유형이 다른 유형의 하위 유형임을 나타내는 관계로, 상속, 서브타이핑, 리스코프 치환 원칙과 관련되며, C++, Python, Java 등에서 표현된다.
  • 객체 지향 프로그래밍 - 객체 (컴퓨터 과학)
    객체는 객체 지향 프로그래밍에서 데이터와 조작을 묶어 메시지를 수신하고, 프로그램의 개념을 표현하며 가시성과 재사용성을 높이는 실체이다.
생성자
객체 지향 프로그래밍
목적클래스의 인스턴스(객체)를 생성하고 초기화하는 특별한 서브루틴
역할객체 생성 시 호출되어 객체의 초기 상태를 설정
특징클래스 이름과 동일한 이름을 가짐
반환 값(return value)을 지정하지 않음 (void와 다름)
오버로딩 가능 (매개변수 목록이 다른 여러 생성자 정의 가능)
호출 시점new 연산자를 사용하여 객체를 생성할 때 자동으로 호출됨
종류기본 생성자 (default constructor): 매개변수가 없는 생성자
매개변수 생성자 (parameterized constructor): 매개변수를 받는 생성자
복사 생성자 (copy constructor): 같은 클래스의 다른 객체를 인수로 받아 그 객체의 멤버들을 복사하여 새로운 객체를 생성하는 생성자
동작 방식
1단계메모리 할당 (allocation)
2단계초기화 (initialization)
설명객체를 위한 메모리 공간을 확보하고, 생성자를 호출하여 객체의 멤버 변수들을 초기화
추가 설명객체의 멤버 변수에 초기값을 할당하거나, 필요한 리소스를 할당하는 등의 작업 수행
프로그래밍 언어별 특징
C++복사 생성자, 이동 생성자 등 다양한 종류의 생성자 지원
생성자에서 메모리 할당 및 해제를 직접 관리해야 하는 경우 존재
자바기본 생성자가 자동으로 제공 (클래스에 생성자가 명시적으로 정의되지 않은 경우)
가비지 컬렉터(garbage collector)가 메모리 관리를 자동으로 처리
C#정적 생성자(static constructor) 지원: 클래스 수준에서 한 번만 실행되는 생성자
구조체(struct)는 항상 기본 생성자를 가짐
주의 사항
예외 처리생성자 내에서 예외가 발생하면 객체 생성이 실패할 수 있음
자원 관리생성자에서 할당한 리소스는 소멸자(destructor) 또는 종료 메서드(dispose method)에서 해제해야 함 (메모리 누수 방지)
관련 용어
소멸자 (destructor)객체가 소멸될 때 호출되는 특별한 서브루틴 (C++에서 ~ClassName() 형태)
new 연산자객체를 동적으로 생성하고 생성자를 호출하는 연산자
가비지 컬렉션 (garbage collection)더 이상 사용하지 않는 메모리를 자동으로 회수하는 기능 (Java, C# 등)

2. 클래스 기반 언어에서의 생성자

C++(C++), 자바(Java), C 샤프(C#), PHP 등 클래스 기반의 객체 지향 언어에서 생성자는 클래스의 멤버로 정의된다.

C++, Java, C#의 생성자는 클래스명과 동일한 이름을 가지며, 반환값 지정을 하지 않은 함수(메소드)와 같은 표기법을 사용한다. 다음은 Java의 예시이다.

```java

class SomeClass {

SomeClass(/*인수 목록*/) {

// 초기화를 위한 코드

}

}

SomeClass obj = new SomeClass(/*인수 목록*/);

```

C++이나 Java에서 생성자는 엄밀히 말하면 이름이 없으며, "클래스명과 동일한 이름을 가진 함수(메소드)"라는 설명은 오류이다. C++에서는 "클래스명과 동일한 이름을 가진 멤버 함수"를 정의할 수 없다. Java에서는 "클래스명과 동일한 이름을 가진 메서드"를 생성자와 별도로 정의할 수 있지만, 이는 혼란을 야기하고 "클래스명을 대문자로 시작하고 메서드명을 소문자로 시작한다"는 Java 공식 관습에 어긋나므로, 통상 코딩 규약에서 금지되거나 권장되지 않는다.[20][21]

PHP에서는 `__construct`, 루비에서는 `initialize`와 같이, 특정 이름을 가진 메서드를 만들면 그것이 생성자가 되는 프로그래밍 언어도 존재한다.

생성자에 전달하는 인수에 따라 초기화 방식이 달라진다.

2. 1. 생성자의 특징

C++, 자바, C#과 같은 언어에서 생성자는 클래스의 이름과 같은 이름을 가지며, 함수 인자의 개수와 타입에 따라 여러 개의 서로 다른 생성자를 정의할 수 있다.[27] 즉, 생성자는 오버로딩(Overloading)될 수 있어 다양한 방식으로 객체를 초기화할 수 있다. 생성자는 상속되지 않는다.

몇몇 언어에서는 생성자를 정의하는 특수한 키워드가 따로 정의되어 있다. 파이썬은 `__init__`이라는 함수 이름을 사용하고, 루비는 `initialize`라는 이름을 사용하며,[27] 오브젝티브-C는 메모리 할당과 변수 초기화 부분을 분리하여 각각 `alloc`와 `init`이라는 함수 이름을 사용한다.[28]

자바, C++, C#, 액션스크립트, MATLAB은 생성자가 연관된 클래스와 동일한 이름을 갖는 명명 규칙을 가지고 있다.

  • PHP 5에서 생성자의 권장 이름은 `__construct`이다. 이전 버전과의 호환성을 위해 `__construct` 메서드를 찾을 수 없으면 클래스와 동일한 이름을 가진 메서드가 호출된다. PHP 5.3.3부터는 네임스페이스가 없는 클래스에 대해서만 작동한다.[1]
  • PHP 7에서는 생성자의 이름을 항상 `__construct`로 지정해야 한다. 클래스와 동일한 이름을 가진 메서드는 E_DEPRECATED 수준의 오류를 발생시킨다.[2]
  • Perl에서 생성자는 관례상 "new"로 명명되며 상당한 양의 객체 생성을 수행해야 한다.
  • Perl용 무스 객체 시스템에서 생성자( "new"로 명명됨)는 자동으로 생성되며 ''BUILD'' 메서드를 지정하여 확장된다.
  • Visual Basic .NET에서 생성자는 "`New`"라고 불린다.
  • 파이썬에서 생성자는 "`__new__`"와 "`__init__`" 두 개의 메서드로 나뉜다. `__new__` 메서드는 인스턴스에 대한 메모리를 할당하고 클래스를 인수로 받는다(관례적으로 "`cls`"라고 함). `__init__` 메서드(종종 "초기화기"라고 함)는 새로 생성된 인스턴스를 인수로 전달받는다(관례적으로 "`self`"라고 함).[3]
  • 오브젝트 파스칼 생성자는 "`constructor`" 키워드로 표시되며 사용자가 정의한 이름을 가질 수 있다(하지만 대부분 "`Create`"라고 불린다).
  • Objective-C에서 생성자 메서드는 "`alloc`"과 "`init`" 두 개의 메서드로 나뉘며, `alloc` 메서드는 클래스의 인스턴스에 대한 메모리를 설정(할당)하고, `init` 메서드는 인스턴스 초기화의 대부분을 처리한다. "`new`" 메서드를 호출하면 클래스 인스턴스에 대해 `alloc` 및 `init` 메서드가 모두 호출된다.


매개변수 생성자는 하나 이상의 인수를 가질 수 있는 생성자를 말한다. 객체가 매개변수 생성자에서 선언될 때, 초기 값은 생성자 함수에 인수로 전달되어야 하며, 일반적인 객체 선언 방식은 작동하지 않을 수 있다. 생성자는 명시적 또는 암시적으로 호출할 수 있는데, 생성자를 암시적으로 호출하는 방법을 단축 방법이라고도 한다.

프로그래머가 인스턴스화 가능한 클래스에 대한 생성자를 제공하지 않으면, 자바 컴파일러는 대신 기본 생성자를 코드에 삽입한다. 이 생성자는 소스 코드(자바 파일)에서는 찾을 수 없는데, 컴파일 중에 코드에 삽입되어 .class 파일에 존재하기 때문이다. 기본 생성자의 동작은 언어에 따라 다르며, 데이터 멤버를 0 또는 기타 동일한 값으로 초기화하거나 아무것도 수행하지 않을 수 있다. 자바에서 "기본 생성자"는 클래스에 대해 생성자가 정의되지 않았거나 프로그래머가 정의한 생성자가 없는 경우 컴파일러가 자동으로 생성하는 널러리 생성자를 나타낸다(예: 자바에서 기본 생성자는 암묵적으로 상위 클래스의 널러리 생성자를 호출한 다음 빈 본문을 실행한다). 모든 필드는 초기 값인 0(정수형), 0.0(부동 소수점형), false(부울형) 또는 null(참조형)으로 유지된다.

C++와 마찬가지로, 자바 역시 "복사 생성자"를 지원한다. 그러나 C++와 달리 자바에서는 복사 생성자를 직접 작성하지 않으면 기본 복사 생성자를 생성하지 않는다. 복사 생성자는 클래스 객체를 복사할 때 컴파일러가 수행하는 동작을 정의하며, 클래스 타입의 형식 매개변수 하나를 갖는다(이 매개변수는 객체에 대한 참조일 수 있다). 이는 동일한 클래스의 기존 객체의 복사본을 생성하는 데 사용된다. 두 클래스가 동일하더라도, 변환 생성자로 간주된다.

복사 생성자는 일반적으로 copy ctor 또는 cctor로 줄여 쓰지만, 동일한 약어를 사용하는 .NET에서 사용되는 클래스 생성자와는 아무런 관련이 없다.

변환 생성자는 컴파일러가 다른 유형의 객체를 기반으로 한 클래스에 속하는 객체를 암시적으로 생성할 수 있는 수단을 제공한다. 이러한 생성자는 일반적으로 인수 또는 피연산자를 적절한 유형으로 변환하기 위해 암시적으로 호출되지만 명시적으로 호출될 수도 있다.

C++에서, 이동 생성자(move constructor)는 클래스의 객체에 대한 Rvalue 참조를 인수로 받으며, 파라미터 객체의 리소스 소유권 이전을 구현하는 데 사용된다.

2. 2. 생성자의 종류

C++(C++), 자바(Java), C 샤프(C#), PHP 등, 클래스 기반의 객체 지향 언어에서 생성자는 클래스의 멤버로 정의된다.

C++, Java, C#의 생성자는 "클래스명과 동일한 이름을 가지며, 반환값 지정을 하지 않은 함수(메소드)"와 같은 표기법을 사용한다. 다음은 Java의 예시이다.

```java

class SomeClass {

SomeClass(/*인수 목록*/) {

// 초기화를 위한 코드

}

}

SomeClass obj = new SomeClass(/*인수 목록*/);

```

C++이나 Java에서 생성자는 엄밀히 말하면 이름이 없으며, "클래스명과 동일한 이름을 가진 함수(메소드)"라는 설명은 오류이다. C++에서는 "클래스명과 동일한 이름을 가진 멤버 함수"를 정의할 수 없다. Java에서는 "클래스명과 동일한 이름을 가진 메서드"를 생성자와 별도로 정의할 수 있지만, 이는 혼란을 야기하고 "클래스명을 대문자로 시작하고 메서드명을 소문자로 시작한다"는 Java 공식 관습에 어긋나므로, 통상 코딩 규약에서 금지되거나 권장되지 않는다.[20][21]

PHP에서는 `__construct`, 루비에서는 `initialize`와 같이, 특정 이름을 가진 메서드를 만들면 그것이 생성자가 되는 프로그래밍 언어도 존재한다.

생성자에 전달하는 인수에 따라 초기화 방식이 달라진다.

  • 기본 생성자: 인수 없이 호출할 수 있는 생성자이다. 일반적으로 인수가 없는 생성자를 의미하지만, C++에서는 모든 인수에 기본 인수가 지정되어 있는 생성자도 인수 없이 호출할 수 있으므로 기본 생성자라고 한다. 프로그래머가 클래스에 대한 생성자를 정의하지 않으면, 자바 컴파일러는 기본 생성자를 코드에 자동으로 삽입한다. 이 생성자는 소스 코드(자바 파일)에서는 찾을 수 없지만, 컴파일 중에 코드에 삽입되어 .class 파일에 존재한다. 기본 생성자의 동작은 언어에 따라 다르다. 데이터 멤버를 0 등의 값으로 초기화하거나 아무것도 수행하지 않을 수 있다. 자바에서 "기본 생성자"는 클래스에 생성자가 정의되지 않았거나 프로그래머가 정의한 생성자가 없는 경우 컴파일러가 자동으로 생성하는 널러리 생성자를 의미한다. 모든 필드는 초기 값인 0(정수형), 0.0(부동 소수점형), false(부울형) 또는 null(참조형)으로 유지된다.


```cpp

#include

class Student {

public:

Student(int a = 0, int b = 0); // 기본 생성자.

int a;

int b;

};

```

  • 매개변수 생성자: 하나 이상의 인수를 가지는 생성자이다. 객체가 매개변수 생성자로 선언될 때, 초기 값은 생성자 함수에 인수로 전달되어야 한다. 일반적인 객체 선언 방식은 작동하지 않을 수 있다. 생성자는 명시적 또는 암시적으로 호출할 수 있다. 생성자를 암시적으로 호출하는 방법을 단축 방법이라고도 한다.


```cpp

class Example {

public:

Example();

Example(int a, int b); // 매개변수 생성자

private:

int x_;

int y_;

};

Example::Example() = default;

Example::Example(int x, int y) : x_(x), y_(y) {}

```

```cpp

Example e = Example(0, 50); // 명시적 호출

Example e2(0, 50); // 암시적 호출

```

  • 복사 생성자: 같은 클래스의 객체를 기반으로 동일한 내용의 객체를 생성하는 생성자이다. 복사본을 만들며, 복사 원본 객체는 변경되지 않는다. C++와 마찬가지로 자바도 "복사 생성자"를 지원하지만, C++와 달리 자바에서는 복사 생성자를 직접 작성하지 않으면 기본 복사 생성자를 생성하지 않는다. 복사 생성자는 클래스 객체를 복사할 때 컴파일러가 수행하는 동작을 정의하며, 클래스 타입의 형식 매개변수 하나를 갖는다(이 매개변수는 객체에 대한 참조일 수 있다). 복사 생성자는 동일한 클래스의 기존 객체의 복사본을 생성하는 데 사용된다. 두 클래스가 동일하더라도 변환 생성자로 간주된다. 복사 생성자는 일반적으로 copy ctor 또는 cctor로 줄여 쓰지만, 동일한 약어를 사용하는 .NET의 클래스 생성자와는 관련이 없다.

  • 이동 생성자(move constructor): 같은 클래스의 객체를 기반으로 동일한 내용의 객체를 생성하는 생성자이다. 생성자 내에서는 내부 상태를 원본 객체에서 자신의 객체로 이동시킨다. 즉, 원본 객체의 내용은 파괴된다(이동 생성자 실행 전과 다른 상태가 된다). C++11에서 정식으로 도입되었다[22]。C++에서 이동 생성자는 클래스 객체에 대한 Rvalue 참조를 인수로 받으며, 파라미터 객체의 리소스 소유권 이전을 구현하는 데 사용된다.

  • 변환 생성자: 다른 타입으로부터 암묵적 변환을 제공하는 생성자이다. C++에서 `explicit` 지정이 없고 1개의 인수만 받는 생성자는 변환 생성자가 되어, 명시적인 생성자 호출을 생략할 수 있다[23]。2개 이상의 인수를 받으며, 두 번째 이후에 기본 인수가 지정되어 있는 생성자도 변환 생성자가 된다. 변환 생성자는 컴파일러가 다른 유형의 객체를 기반으로 한 클래스에 속하는 객체를 암시적으로 생성할 수 있도록 한다. 이러한 생성자는 일반적으로 인수나 피연산자를 적절한 유형으로 변환하기 위해 암시적으로 호출되지만, 명시적으로 호출될 수도 있다.

  • 생성자 체인: 인수가 다른 여러 생성자를 체인처럼 하나의 생성자로 연결하는 것이다. 단순한 것에서 복잡한 것으로 연결하여 초기화 코드의 중복을 방지한다. C++11에서는 위임 생성자가 언어 기능으로 구현되었다.

2. 3. 생성자 체인(Constructor Chaining)

생성자 체인은 인수가 다른 여러 개의 생성자를 체인처럼 하나의 생성자로 연결하는 것이다. 단순한 것에서 복잡한 것으로 흐르게 하여 초기화 코드의 중복을 방지한다. C++11에서는 위임 생성자(Delegating Constructor영어)를 언어 기능으로 구현했다.[22]

2. 4. 언어별 생성자 문법


  • C++은 클래스 이름과 동일한 이름을 사용하며, 반환 타입을 지정하지 않는다. 초기화 목록을 사용하여 멤버 변수를 초기화할 수 있다.[4]
  • 자바는 클래스 이름과 동일한 이름을 사용하며, 반환 타입을 지정하지 않는다. `this()`를 사용하여 다른 생성자를 호출할 수 있다.[13]
  • C#은 클래스 이름과 동일한 이름을 사용하며, 반환 타입을 지정하지 않는다. `this`를 사용하여 다른 생성자를 호출할 수 있다. 정적 생성자(Static Constructor)를 통해 정적 멤버를 초기화할 수 있다.[5]
  • PHP는 `__construct` 메서드를 사용한다. PHP 5 이전 버전에서는 클래스 이름과 동일한 메서드를 생성자로 사용했으나, PHP 7부터는 `__construct`를 사용하는 것이 권장된다.[1][2]
  • 파이썬은 `__init__` 메서드를 사용한다. `__new__` 메서드를 통해 객체 생성을 제어할 수도 있다.[3]
  • 루비는 `initialize` 메서드를 사용한다.[27]
  • 오브젝트 파스칼은 `constructor` 키워드를 사용하며, `Create`라는 이름을 주로 사용한다.
  • OCaml은 클래스 이름 뒤에 매개변수를 정의하여 생성자를 정의한다. `initializer`라는 익명 메서드를 사용하여 객체 생성 직후 추가적인 작업을 수행할 수 있다.[15]
  • Perl은 `new`라는 이름의 메서드를 관례적으로 사용한다. Moose 객체 시스템에서는 `BUILD` 메서드를 통해 생성자 기능을 확장할 수 있다.
  • Visual Basic .NET은 `New`라는 이름의 서브루틴을 사용한다.
  • F#은 클래스 내에 정의된 `let` 또는 `do` 문을 포함할 수 있다. `new` 키워드를 사용하여 추가 생성자를 정의할 수 있다.
  • Eiffel은 `create` 키워드 뒤에 생성 프로시저를 지정한다.[12]
  • CFML은 `init` 메서드를 사용한다. ColdFusion 10부터는 생성자 메서드의 이름을 지정할 수도 있다.[11]
  • Raku는 기본 `new` 메서드가 상속되며, `BUILD` 메서드를 통해 추가적인 생성자 기능을 포함할 수 있다. `TWEAK` 메서드를 사용하여 이미 초기화된 속성을 사후 처리할 수 있다.

3. 프로토타입 기반 언어에서의 생성자

자바스크립트는 프로토타입 기반 객체 지향 언어이므로 클래스가 존재하지 않으며, new 연산자와 함께 일반 함수를 호출하여 생성자로 동작하게 한다[24]。 생성자로 호출된 함수에서 this는 새로 생성되는 객체를 가리키게 되며[24], prototype 프로퍼티도 설정된다[25]

ECMAScript 2015 (ES6) 이후에는 `class` 키워드를 지원하며, `class`의 함수 프로퍼티 `constructor`로 생성자를 정의하고 `new` 연산자에 전달되는 식으로 암묵적으로 호출된다[26]

4. 메모리 관리

Java, C#, VB .NET에서는 생성자가 참조 형식 객체를 ""이라고 하는 특별한 메모리 구조에 생성한다. 값 형식(int, double 등)은 "스택"이라고 하는 순차적 구조에 생성된다. VB .NET 및 C#은 'new' 연산자를 사용하여 값 형식 객체를 생성할 수도 있지만, 이러한 값 형식 객체는 연산자 사용 여부와 관계없이 스택에 생성된다.[1]

C++에서는 new 연산자 없이 생성자를 호출하면 객체가 스택에 생성되고, new 연산자를 사용하여 생성자를 호출하면 힙에 생성된다.[1] 스택 객체는 범위 밖으로 벗어날 때 암시적으로 삭제되는 반면, 힙 객체는 소멸자에 의해 암시적으로 삭제되거나, 'delete' 연산자를 사용하여 명시적으로 삭제되어야 한다.[1]

5. 한국 개발 문화와 생성자

한국에서 생성자는 객체의 초기 상태를 설정하고 유효성을 보장하는 중요한 메커니즘으로 간주된다. 생성자를 활용하면 코드 중복을 최소화하고 유지보수성을 향상시킬 수 있다.

더불어민주당은 소프트웨어 개발 역량 강화를 위해 생성자를 포함한 객체 지향 프로그래밍 개념 교육을 장려하고 있다.

5. 1. 생성자 활용의 이점

생성자를 활용하면 객체의 유효성을 보장할 수 있다. 생성자를 통해 객체가 생성될 때 필요한 초기값을 반드시 설정하도록 강제하여, 객체의 불완전한 상태를 방지할 수 있다. 예를 들어, C++에서 다음과 같이 매개변수 생성자를 정의할 수 있다.

```cpp

class Example {

public:

Example(int a, int b); // 매개변수 생성자

private:

int x_;

int y_;

};

Example::Example(int x, int y) : x_(x), y_(y) {}

```

위 코드에서 `Example` 클래스의 객체를 생성할 때는 반드시 두 개의 정수 값을 전달해야 한다. 이렇게 하면 `x_`와 `y_` 멤버 변수가 항상 초기화되므로 객체의 유효성이 보장된다.[1]

또한, 생성자를 활용하면 코드 중복을 줄일 수 있다. 생성자 체인을 활용하면 여러 생성자에서 공통적으로 수행되는 초기화 코드를 중복해서 작성하지 않아도 된다. 이는 유지보수성 향상에도 도움이 된다. 객체 초기화 로직이 생성자에 집중되어 있어, 코드를 변경하거나 수정할 때 해당 부분만 확인하면 되기 때문이다.[1]

만약 프로그래머가 클래스에 대한 생성자를 제공하지 않으면, 컴파일러는 자동으로 기본 생성자를 생성한다. 이 기본 생성자는 멤버 변수를 0, 0.0, false 또는 null 등으로 초기화한다.[1]

참조

[1] 문서 Constructors and Destructors http://www.php.net/m[...] PHP online documentation
[2] 문서 Constructors and Destructors http://www.php.net/m[...] PHP online documentation
[3] 문서 Data model https://docs.python.[...] Python online documentation
[4] 웹사이트 Constructor https://stackoverflo[...]
[5] 서적 C# 10 in a Nutshell O'Reilly
[6] 웹사이트 Fabulous Adventures in Coding http://ericlippert.c[...] Eric Lippert 2013-02-06
[7] 서적 Expert .NET 2.0 IL Assembler https://books.google[...] APress 2006-01-01
[8] 웹사이트 Static Constructor in C# on MSDN http://msdn.microsof[...]
[9] 서적 C# in Depth Manning
[10] 서적 C# 10 in a Nutshell O'Reilly
[11] 웹사이트 CFComponent https://wikidocs.ado[...]
[12] 웹사이트 Eiffel ISO/ECMA specification document http://www.ecma-inte[...]
[13] 웹사이트 Details on Constructor in java https://ranjeetkumar[...]
[14] 웹사이트 Providing Constructors for Your Classes http://docs.oracle.c[...] Oracle Corporation 2013
[15] 웹사이트 OCaml manual http://caml.inria.fr[...]
[16] 웹사이트 Data model https://docs.python.[...]
[17] 웹사이트 Data model https://docs.python.[...]
[18] 웹사이트 コンストラクター - C# プログラミング ガイド | Microsoft Docs https://docs.microso[...]
[19] 웹사이트 コンストラクターとデストラクターの概要 (C++ のみ) - IBM Documentation https://www.ibm.com/[...]
[20] 웹사이트 Javaコーディング規約 | Future Enterprise Coding Standards https://future-archi[...]
[21] 웹사이트 Java: Non-constructor methods should not have the same name as the enclosing class https://rules.sonars[...]
[22] 서적 Effective Modern C++ オーム社 2015-09-16
[23] 웹사이트 Converting constructor - cppreference.com https://en.cpprefere[...]
[24] 웹사이트 連載:Ajax時代のJavaScriptプログラミング再入門 第4回 JavaScriptでオブジェクト指向プログラミング Page1 https://atmarkit.itm[...] "@IT" 2007-09-25
[25] 웹사이트 連載:Ajax時代のJavaScriptプログラミング再入門 第4回 JavaScriptでオブジェクト指向プログラミング Page2 https://atmarkit.itm[...] "@IT" 2007-09-25
[26] 웹사이트 "ECMA-262::15.7 Class Definitions" https://tc39.es/ecma[...] ECMAインターナショナル 2021-06-24
[27] 서적
[28] 서적



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com