TIL (56) | 2023.10.16 | 디자인 패턴: 빌더(Builder) 패턴

kjg5370·2023년 10월 16일
0

TIL

목록 보기
56/91
post-thumbnail

들어가기 앞서

오늘 디자인 패턴 강의에서 빌더 패턴에 대해 배우게 되었습니다.
생각지 못한 활용 방법을 배운 느낌이라 좋았습니다.

오늘 배운 것

  • 빌더(Builder) 패턴
    소프트웨어 디자인 패턴 중 하나로, 객체 생성 과정을 더 유연하게 만들고 복잡한 객체의 생성을 단순화하는 데 도움을 주는 패턴 중 하나.

  • 고안된 이유

    • 복잡한 객체 생성:
      프로그램에서 객체를 생성하는 과정이 복잡할 때, 객체의 생성 및 초기화를 간편하게 만들기 위한 필요성이 높아짐.
      복잡한 객체란 여러 속성이나 설정 옵션을 가진 객체를 의미하며, 이러한 객체를 생성하는 코드는 매우 복잡하고 가독성이 떨어질 수 있음.

    • 생성자 매개변수의 길이:
      객체를 생성할 때 많은 생성자 매개변수를 전달해야 하는 경우, 이를 구분하기 어렵고 코드의 가독성이 떨어짐.
      특히 선택적으로 값을 설정해야 하는 경우 생성자 오버로딩이 복잡해질 수 있음.

    • 변경 불가능한(Immutable) 객체:
      변경 불가능한 객체를 생성할 때, 생성된 객체의 속성을 변경할 수 있는 방법이 없어야 함.
      따라서 한 번 생성된 객체를 변경하지 않고 새로운 객체를 생성해야 함.

  • 장점
    객체 생성과 초기화 과정을 분리: 객체 생성 및 초기화 단계를 분리함으로써 객체 생성 과정을 더 유연하게 다룰 수 있음.

    가독성 향상: 복잡한 객체를 생성할 때 빌더 패턴을 사용하면 가독성이 향상되며, 객체의 설정 옵션을 명확하게 분리할 수 있음.

    선택적 속성 설정: 빌더 패턴을 사용하면 선택적으로 객체의 속성을 설정할 수 있으며, 불필요한 생성자 오버로딩을 피할 수 있음.

  • Person.cs 예시

    using System;
    
    // Person 클래스를 정의합니다.
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Address { get; set; }
    
        public void DisplayInfo()
        {
            Console.WriteLine($"Name: {Name}, Age: {Age}, Address: {Address}");
        }
    }
    
    // PersonBuilder 클래스를 정의하여 빌더 패턴을 구현합니다.
    public class PersonBuilder
    {
        private Person person;
    
        public PersonBuilder()
        {
            person = new Person();
        }
    
        public PersonBuilder SetName(string name)
        {
            person.Name = name;
            return this;
        }
    
        public PersonBuilder SetAge(int age)
        {
            person.Age = age;
            return this;
        }
    
        public PersonBuilder SetAddress(string address)
        {
            person.Address = address;
            return this;
        }
    
        public Person Build()
        {
            return person;
        }
    }
    
    class Program
    {
        static void Main()
        {
            // 빌더 패턴을 사용하여 Person 인스턴스를 생성합니다.
            Person person = new PersonBuilder()
                .SetName("John")
                .SetAge(30)
                .SetAddress("123 Main St")
                .Build();
    
            // 생성된 Person 객체의 정보를 출력합니다.
            person.DisplayInfo();
        }
    }

    Person 클래스는 사람의 속성을 나타내며, PersonBuilder 클래스는 Person 객체를 생성하고 설정하는 역할을 합니다.
    PersonBuilder 클래스는 각 속성을 설정하기 위한 메서드를 제공하고, 메서드 체이닝을 통해 객체의 속성을 설정한 후 Build 메서드를 호출하여 실제 객체를 반환합니다.

내일 할 일

  • 스테이지 맵 2 만들기
profile
학생입니다

0개의 댓글