C# 학습/C# 언어의 기초

C# 세미나 자료: 생성자와 인스턴스화

DevGourmet 2025. 4. 7. 09:23

1. 개요

C#에서 **생성자(Constructor)**와 **인스턴스화(Instantiation)**는 객체지향 프로그래밍의 핵심 개념입니다. 본 세미나에서는 객체를 생성하고 초기화하는 과정에 대한 이론을 정리하고, 다양한 생성자 활용법 및 인스턴스화 방식에 대해 초급부터 고급까지 단계별로 설명합니다.


2. 기본 이론

2.1 생성자(Constructor)란?

  • 클래스나 구조체의 인스턴스를 생성할 때 호출되는 특수한 메서드
  • 클래스 이름과 동일하며 반환 형식이 없음
  • 객체의 초기 상태 설정에 사용

2.2 인스턴스화(Instantiation)란?

  • new 키워드를 사용해 클래스 또는 구조체의 **실제 객체(인스턴스)**를 생성하는 과정
  • 메모리 공간 할당 + 생성자 호출 포함

3. 단계별 설명

3.1 초급: 기본 생성자와 인스턴스화

이론 요약

  • 생성자는 클래스에 정의되지 않아도 기본 생성자(Default Constructor)가 자동 생성됨
  • new 키워드를 통해 인스턴스 생성

예시 코드

class Person
{
    public string Name;
    public int Age;
}

Person p = new Person();
p.Name = "홍길동";
p.Age = 30;

주의사항

  • 구조체(struct)는 자동으로 매개변수 없는 생성자가 있음
  • 클래스는 명시적으로 생성자를 정의할 수 있음

3.2 중급: 사용자 정의 생성자와 오버로딩

이론 심화

  • 생성자에 매개변수를 추가하여 다양한 초기화 방식 구현 가능
  • 여러 생성자를 정의할 수 있음 (오버로딩)

예시 코드

class Person
{
    public string Name;
    public int Age;

    // 사용자 정의 생성자
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

Person p = new Person("이영희", 25); // 인스턴스 생성과 동시에 초기화

  • 생성자를 통해 필수 데이터의 누락을 방지 가능
  • 필요 시 this() 키워드로 생성자 체이닝 가능

3.3 고급: 정적 생성자, private 생성자, 객체 생성 다양화

이론 고급

  • 정적 생성자: 클래스 전체에 대해 한 번만 호출됨, static 키워드 사용
  • private 생성자: 외부에서 직접 생성 금지 → 싱글턴 패턴 등에 활용
  • 객체 생성 방식 다양화: 팩토리 메서드, DI(의존성 주입), 리플렉션 등

예시 코드

// 정적 생성자 예시
class Config
{
    public static string Version;
    static Config()
    {
        Version = "1.0.0";
    }
}

// private 생성자 & 싱글턴
class Logger
{
    private static Logger instance = new Logger();
    private Logger() { }
    public static Logger Instance => instance;
}

// 객체를 반환하는 팩토리 메서드
class ShapeFactory
{
    public static Shape CreateCircle() => new Circle();
}

실무 팁

  • 정적 생성자는 설정 초기화에 유용하지만 예외 처리를 잘 해야 함
  • private 생성자는 설계 패턴과 함께 자주 사용됨 (ex: Singleton)
  • 테스트/유지보수 편의를 위해 팩토리 패턴이나 DI도 고려

4. 생성자 설계 시 고려사항

항목설명

불변성 생성 시 모든 필수 값 초기화
과도한 오버로딩 생성자가 많아지면 팩토리 메서드 고려
접근 제한자 용도에 따라 public/private 선택
정적 vs 인스턴스 클래스 전체용인가, 개별 객체용인가?

5. 결론

  • 생성자는 객체 초기화의 핵심 도구이며, 다양한 방식으로 오버로딩 가능
  • 인스턴스화는 실제 객체를 메모리에 생성하는 중요한 과정
  • 고급 설계에서는 생성자 접근 제한, 정적 생성자, 팩토리 메서드 등을 통한 유연한 객체 생성이 중요함

6. Q&A

  • Q: 생성자를 꼭 정의해야 하나요? A: 기본 생성자는 자동으로 제공되지만, 커스텀 초기화가 필요할 경우 명시적으로 정의해야 합니다.
  • Q: 생성자에서 다른 생성자를 호출할 수 있나요? A: this(...) 키워드를 사용해 가능하며, 생성자 체이닝이라고 합니다.
  • Q: 정적 생성자는 언제 호출되나요? A: 클래스가 처음 로드될 때 한 번만 자동 호출됩니다.

감사합니다!