산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C# 생성자(Constructor) 총정리: 종류, 예제, 고급 패턴

C# 생성자 (Constructor)

C#에서 생성자가 객체를 초기화하는 방식, 모든 생성자 유형, 패턴, 모범 사례를 다룹니다.

C#에서 생성자는 클래스 새 인스턴스 생성 시 자동 호출되는 특수 메서드. 일반 메서드와 달리:


C# 생성자 만들기

클래스 내부에서 클래스 이름과 동일하게 정의:

class Car {
    // 생성자
    Car() {
        // 초기화 코드
    }
}

Car()가 생성자. new 키워드로 호출:

new Car();

예:

Car car1 = new Car();

참고: C# 클래스와 객체.


생성자 종류

대표적 생성자 분류:


1. 매개변수 없는 생성자 (Parameterless Constructor)

매개변수 없는 생성자를 매개변수 없는/기본 생성자라 함. 예:

using System;
namespace ConstructorDemo {
    class Car {
        // 매개변수 없는 생성자
        Car() {
            Console.WriteLine("Car Constructor");
        }
        static void Main(string[] args) {
            new Car();
            Console.ReadLine();
        }
    }
}

출력

Car Constructor

2. 매개변수 있는 생성자 (Parameterized Constructor)

인수 받아 인스턴스 필드 초기화:

using System;
namespace ConstructorDemo {
    class Car {
        string brand;
        int price;
        // 매개변수 있는 생성자
        Car(string theBrand, int thePrice) {
            brand = theBrand;
            price = thePrice;
        }
        static void Main(string[] args) {
            Car car1 = new Car("Bugatti", 50000);
            Console.WriteLine("Brand: " + car1.brand);
            Console.WriteLine("Price: " + car1.price);
            Console.ReadLine();
        }
    }
}

출력

Brand: Bugatti
Price: 50000

3. 기본 생성자 (Default Constructor)

생성자 생략 시 컴파일러가 암시적 매개변수 없는 생성자 제공, 필드 기본값 초기화. 예:

using System;
namespace ConstructorDemo {
    class Program {
        int a;
        static void Main(string[] args) {
            Program p1 = new Program();
            Console.WriteLine("Default value of a: " + p1.a);
            Console.ReadLine();
        }
    }
}

출력

Default value of a: 0

숫자 필드 기본값 0, 문자열/객체 null.


4. 복사 생성자 (Copy Constructor)

다른 객체 상태 복사해 새 인스턴스 생성:

using System;
namespace ConstructorDemo {
    class Car {
        string brand;
        // 주 생성자
        Car(string theBrand) {
            brand = theBrand;
        }
        // 복사 생성자
        Car(Car c1) {
            brand = c1.brand;
        }
        static void Main(string[] args) {
            Car car1 = new Car("Bugatti");
            Console.WriteLine("Brand of car1: " + car1.brand);
            Car car2 = new Car(car1);
            Console.WriteLine("Brand of car2: " + car2.brand);
            Console.ReadLine();
        }
    }
}

출력

Brand of car1: Bugatti
Brand of car2: Bugatti

5. Private 생성자

생성자 private로 외부 인스턴스화 방지, 싱글톤 패턴이나 유틸리티 클래스에 유용.

예제

using System;
namespace ConstructorDemo {
    class Car {
        private Car() {
            Console.WriteLine("Private Constructor");
        }
    }
    class CarDrive {
        static void Main(string[] args) {
            // Car car1 = new Car(); // 컴파일 에러
            Console.ReadLine();
        }
    }
}

에러:

error CS0122: 'Car.Car()' is inaccessible due to its protection level

참고: 생성자가 private이면 모든 클래스 멤버는 static이어야 클래스 이름으로 접근 가능.


6. 정적 생성자 (Static Constructor)

정적 생성자는 타입당 한 번 실행, 인스턴스/정적 멤버 최초 접근 전. 직접 호출 불가, 매개변수 없음.

using System;
namespace ConstructorDemo {
    class Car {
        static Car() {
            Console.WriteLine("Static Constructor");
        }
        Car() {
            Console.WriteLine("Default Constructor");
        }
        static void Main(string[] args) {
            Car car1 = new Car();
            Car car2 = new Car();
            Console.ReadLine();
        }
    }
}

출력

Static Constructor
Default Constructor
Default Constructor

참고: 클래스당 정적 생성자 하나만 가능; 매개변수/접근 한정자 가질 수 없음.


C# 생성자 오버로딩 (Constructor Overloading)

서로 다른 매개변수 리스트로 여러 생성자 정의해 유연한 객체 생성 제공. 예:

using System;
namespace ConstructorOverloadDemo {
    class Car {
        Car() {
            Console.WriteLine("Car constructor");
        }
        Car(string brand) {
            Console.WriteLine("Car constructor with one parameter");
            Console.WriteLine("Brand: " + brand);
        }
        static void Main(string[] args) {
            Car car = new Car();
            Console.WriteLine();
            Car car2 = new Car("Bugatti");
            Console.ReadLine();
        }
    }
}

출력

Car constructor
Car constructor with one parameter
Brand: Bugatti

컴파일러가 인수 개수/타입 기반으로 일치하는 생성자 선택. 더 보기: C# 생성자 오버로딩.

C 언어

  1. C# 중첩 클래스(Nested Class) 이해: 정의, 사용법, 상속
  2. C# 생성자 오버로딩 마스터하기: 유연한 클래스 설계
  3. C++ 생성자 이해하기: 기본, 매개변수, 복사 생성자 완벽 해설
  4. Java 생성자 마스터하기: 종류, 사용법, 실전 예제
  5. Java Enum 생성자 완벽 해설: 실전 예제로 이해하기
  6. 자동차 엔진 냉각수(부동액) 완전 가이드: 목적, 종류, 관리법
  7. Java 생성자 이해: 초기화와 모범 사례
  8. 실린더 개수가 엔진 성능에 미치는 영향: 현대 엔진 트렌드
  9. 자동차 연장 보증(익스텐디드 워런티): 가입 전 꼭 알아야 할 장단점과 비용 분석
  10. 자동차 오일 필터 누유 원인 7가지 & 해결법