반응형
"이니셜라이저(Initializer)"는 객체를 생성할 때 각 프로퍼티의 값을 직접 지정하여 객체를 초기화하는 기능을 의미합니다. 이니셜라이저를 사용하면, 객체 생성 코드를 간결하고 직관적으로 작성할 수 있습니다.

C#에서는 여러 종류의 Initializer를 사용할 수 있습니다. 아래에서는 각 Initializer의 종류와 사용법에 대해 살펴보겠습니다.

1. Object Initializer (객체 이니셜라이저)

객체를 생성한 후 각 프로퍼티의 값을 직접 지정하여 객체를 초기화할 수 있습니다.

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

Car myCar = new Car
{
    Make = "Toyota",
    Model = "Camry",
    Year = 2019
};

2. Collection Initializer (컬렉션 이니셜라이저)

컬렉션 객체를 생성할 때 원소를 초기화할 수 있습니다.

[참고]
"컬렉션(Collection)"이란, 하나의 데이터 구조로서 여러 개의 객체를 담을 수 있는 구조를 의미합니다. 컬렉션은 배열과 마찬가지로 여러 개의 객체를 담을 수 있지만, 배열과는 달리 컬렉션은 동적으로 크기를 조절할 수 있습니다.
C#에서 제공하는 컬렉션 클래스로는 List, ArrayList, Dictionary, HashSet, Queue, Stack 등이 있습니다. 이들 클래스를 사용하여 객체들을 저장, 검색, 정렬, 순회 등의 작업을 수행할 수 있습니다.

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

3. Array Initializer (배열 이니셜라이저)

배열 객체를 생성할 때 원소를 초기화할 수 있습니다.

int[] numbers = new int[] { 1, 2, 3, 4, 5 };

4. Anonymous Type Initializer (익명 타입 이니셜라이저)

익명 타입을 생성할 때 프로퍼티 값을 직접 지정할 수 있습니다.

var car = new { Make = "Toyota", Model = "Camry", Year = 2019 };

5. String Interpolation Initializer (문자열 보간 이니셜라이저)

문자열 내에 변수의 값을 직접 넣어서 새로운 문자열을 생성하는 문자열 보간 처리를 할 수 있습니다.

string message = $"The car is a {myCar.Year} {myCar.Make} {myCar.Model}.";

 

 

반응형

'개발정보' 카테고리의 다른 글

[.net] interop 과 p/invoke  (0) 2023.03.20
[C#] params 키워드  (0) 2023.02.15
[C#] 객체 초기화  (0) 2023.02.13
[C#] log4net 사용법  (0) 2023.02.08
[javascript] Closure(클로저)란  (0) 2023.01.31
반응형

C#에서 객체를 초기화하는 방법은 여러가지가 있습니다. 가장 기본적인 방법은 객체를 생성한 후 각 프로퍼티를 따로 지정하는 것입니다.

class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
}
 
Car myCar = new Car();
myCar.Make = "Toyota";
myCar.Model = "Camry";
myCar.Year = 2019;

또 다른 방법으로는 생성자를 통한 객체 초기화가 있습니다. 생성자를 통해 객체를 생성할 때 필요한 프로퍼티 값들을 매개변수로 전달할 수 있습니다.

class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
 
    public Car(string make, string model, int year)
    {
        Make = make;
        Model = model;
        Year = year;
    }
}
 
Car myCar = new Car("Toyota", "Camry", 2019);
 

마지막으로, C#에서는 Object Initializer 문법을 사용하여 객체를 초기화할 수 있습니다. 이 문법을 사용하면 객체를 생성할 때 필요한 프로퍼티 값들을 직접 지정할 수 있습니다.

class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
}
 
Car myCar = new Car
{
    Make = "Toyota",
    Model = "Camry",
    Year = 2019
};
 

위의 코드에서는 new Car 이후에 각 프로퍼티의 값을 직접 지정하여 객체를 초기화하고 있습니다. 단, 값을 지정할 수 있는 것은 public 속성(property)만 가능 합니다.

위에서 언급한 3가지 방법 중 가장 편리한 방법은 Object Initializer 문법이며, 이 문법을 사용하면 간결하고 직관적인 코드를 작성할 수 있습니다.

반응형
반응형

.Net 환경에서 로깅 처리를 할 수 있는 log4net 사용법 입니다.

1.Visual Studio의 NuGet 패키지 관리에서 log4net을 검색 하여 설치 합니다.

2. 설치가 완료되면 참조에 log4net이 추가 됩니다.

3. 구성 파일을 신규로 작성하여 추가 합니다.

<?xml version="1.0" encoding="utf-8"?>

<log4net>
  <root>
    <level value="ALL" />
    <appender-ref ref="RollingFileAppender" />
  </root>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <!--<file type="log4net.Util.PatternString" value="log-%property{processid}-%date{yyyy-MM-dd}.txt" />-->
    <file value="Log\common.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
    </layout>
  </appender>
</log4net>

구성파일에 대한 자세한 작성법은 여기를 참조 합니다.

4. 구성파일은 프로그램 배포시 별도의 파일로 존재할 수도 있지만 여기서는 어셈블리에 포함 시키기 위하여 속성창에서 빌드 작업을 '포함 리소스'로 지정 합니다.

5. 이제 로그를 남기기 원하는 곳에서 실제로 로그 처리를 합니다.

namespace log4net_test
{
    internal class Program
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(Program));

        static void Main(string[] args)
        {
            var assembly = typeof(Program).Assembly;
            using (var stream = assembly.GetManifestResourceStream("log4net_test.config.log4net.config"))
            {
                log4net.Config.XmlConfigurator.Configure(stream);
            }

            log.Info("Application started");
            Console.WriteLine("Press Enter to exit");
            Console.ReadLine();
            log.Info("Application ended");
        }
    }
}

여기서 GetManifestResourceStream() 메소드의 인자값으로 포함 리소스로된 구성파일을 전달 합니다. 예제의 경우 config 폴더를 만들어서 그 아래에 구성파일을 두었기 때문에 폴더명을 '.' 을 이용하여 위와 같이 namespace와 파일명 사이에 넣어 줘야 합니다.

빌드 후 프로그램을 실행 시켜보면 구성파일에서 지정한 로그 파일인 Log\common_log 가 생성되고 로그가 남게 됩니다.

 

반응형
반응형

SQL Server에서 Identity Column은 테이블에 고유한 값을 자동으로 생성하는 기능입니다. 주로 테이블의 Primary Key로 사용되며, 값의 중복을 방지하는 기능을 가지고 있습니다.

생성 방법

테이블을 생성할 때 Identity Column을 추가하는 방법입니다.

CREATE TABLE [테이블명](
  [ID] INT IDENTITY(1,1) PRIMARY KEY,
  [Name] NVARCHAR(50),
  [Email] NVARCHAR(50)
)

사용 방법

Identity Column을 사용하여 데이터를 입력할 때는 해당 컬럼의 값을 직접 입력할 필요가 없습니다.

INSERT INTO [테이블명]([Name], [Email])
VALUES ('John Doe', 'johndoe@example.com')

주의점

  • Identity Column은 테이블 내의 모든 레코드에서 고유한 값을 생성해야 합니다.
  • 기존 레코드의 값을 수정할 경우, 고유한 값을 유지할 수 없으므로 주의해야 합니다.
  • SET IDENTITY_INSERT를 사용할 때에도 고유한 값을 유지하는 것을 확인해야 합니다.

SET IDENTITY_INSERT

Identity Column은 직접 값을 입력하는 것을 허용하지 않습니다. 하지만, 데이터를 마이그레션 한다든지 꼭 필요한 값으로 등록해야 하는 경우 SET IDENTITY_INSERT라는 기능을 사용하여 값을 직접 입력할 수 있는 것을 허용할 수 있습니다.

사용법

  • SET IDENTITY_INSERT 테이블명 ON/OFF
  • 예시
SET IDENTITY_INSERT [dbo].[test_table] ON
GO

INSERT INTO [dbo].[test_table] ([ID], [Name], [Age])
VALUES (1, 'John Doe', 25)
GO

SET IDENTITY_INSERT [dbo].[test_table] OFF
GO
  • 주의사항
    • Identity Column의 값이 기존의 레코드와 중복되면 오류가 발생할 수 있으므로 주의해야 합니다.
    • 반드시 다시 OFF 상태로 전환시켜야 Identity Column이 정상 동작 합니다.

 

반응형

+ Recent posts