생성자와 속성

황현중·2025년 11월 18일

C#

목록 보기
4/24

🚀 1. 생성자(Constructor) 개념

✔ 생성자란?

클래스를 new로 만들 때 가장 먼저 자동 실행되는 메서드입니다.
즉, 객체를 초기화하는 역할을 합니다.

✔ 생성자의 특징

  • 클래스 이름과 동일하다
  • 반환형이 없다(void도 없음)
  • 객체가 생성될 때 자동 호출
  • 여러 개 만들 수 있다(오버로드 가능)

✔ 기본 생성자(Default Constructor)


class Person
{
    public Person()   // 생성자
    {
        Console.WriteLine("생성자 호출됨!");
    }
}

사용 예:


var p = new Person();  // 생성자 자동 실행

✔ 매개변수 있는 생성자(Overloading)


class Person
{
    public string Name;
    public int Age;

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

사용 예:


Person p = new Person("홍길동", 20);

➡ 객체를 만들면서 값을 편하게 넣을 수 있어 실무에서 매우 자주 사용됩니다.

✔ 생성자에서 필수값 강제하기 (실무에서 중요)


class Account
{
    public string Id { get; }
    public string Password { get; }

    public Account(string id, string password)
    {
        // 필수 정보 강제
        Id = id;
        Password = password;
    }
}

➡ 생성자를 통해 “이 객체가 동작하려면 반드시 필요한 값”을 강제할 수 있습니다.


🚀 2. new 키워드의 역할


Person p = new Person();

new의 실제 역할 3가지

  1. 힙(Heap)에 메모리 공간 확보
  2. 생성자(Constructor) 호출
  3. 생성된 객체의 주소를 반환하여 변수(p)에 저장

🚀 3. Property(속성) 개념

✔ Property란?

“필드처럼 보이지만, 사실은 메서드처럼 동작하는 문법”입니다.
즉, 필드 + Getter + Setter를 간단하게 묶어둔 기능입니다.

✔ 자동구현 프로퍼티 (실무에서 가장 많이 사용)


public class Person
{
    public string Name { get; set; }
}

사용 예:


Person p = new Person();
p.Name = "철수";           // set 실행
Console.WriteLine(p.Name); // get 실행

➡ 내부에서 자동으로 private 필드를 생성하므로 매우 편리합니다.

✔ Getter/Setter 커스터마이징


private int _age;

public int Age
{
    get { return _age; }
    set
    {
        if (value < 0)
            throw new Exception("나이는 음수가 될 수 없습니다.");

        _age = value;
    }
}

➡ 유효성 검사가 필요한 경우 이런 방식으로 커스터마이징합니다.

✔ 읽기 전용 속성(Read-only Property)


public int Id { get; }

➡ 생성자에서만 값을 설정할 수 있습니다.

✔ init 세터 (C# 9.0~)


public class Order
{
    public int OrderId { get; init; }
}

사용 예:


var o = new Order { OrderId = 123 };

➡ 생성 시에만 값을 설정할 수 있고 이후에는 변경할 수 없습니다.
➡ 불변 객체(Immutable Object)에 적합합니다.


🚀 4. 생성자 vs Property: 실무 선택 기준

목적 생성자 사용 Property 사용
객체 생성 시 필요한 필수값 ✔ 강제 가능 ❌ 강제 불가
객체 생성 후 변경할 값 ❌ 적합하지 않음 ✔ 적합
필수값 전달 ✔ 생성자가 적합
선택적 값 ✔ Property에 적합

📘 실무 예제: User 등록 객체


class User
{
    // 필수값 - 생성자로 강제
    public string Id { get; }
    public string Password { get; }

    // 선택값 - 속성으로 설정
    public string Email { get; set; }
    public string Phone { get; set; }

    public User(string id, string password)
    {
        Id = id;
        Password = password;
    }
}

사용 예:


var user = new User("hong", "1234")
{
    Email = "hong@test.com",
    Phone = "010-1234-5678"
};

➡ 필수값과 선택값을 명확하게 구분한 실무 패턴입니다.

🚀 직관적 예제 (생성자 + Property 혼합)


class Car
{
    public string Model { get; }
    public int Year { get; }

    public int CurrentSpeed { get; set; }

    public Car(string model, int year)
    {
        Model = model;
        Year = year;
    }
}

사용 예:


Car c = new Car("K5", 2021);
c.CurrentSpeed = 100;

🎯 결론 요약

✔ 생성자(new)

  • 객체 생성 + 필수값 초기화
  • 반환형 없음
  • 여러 개 오버로드 가능

✔ Property

  • 필드 + Getter/Setter 묶음
  • 값 저장/조회 시 유효성 검사 가능
  • 선택적 값 설정에 적합
  • 자동구현 프로퍼티가 실무에서 가장 많이 사용됨

0개의 댓글