#빌더패턴(Builder)

sejun-Lee·2025년 4월 8일

<체인 메소드>


StringBuilder -> 매모리 효과적, 스트링을 만드는 과정을 가지고 있다가 마지막에 만듬
  
static void Main(string[] args)
{
    StringBuilder stringBuilder = new StringBuilder();  // 스트링 빌더를 사용하여 문자열을 조합함
    stringBuilder.AppendLine("안녕하세요")   // AppendLine() 한줄 붙이기
        .AppendLine("반갑습니다.")   // AppendLine() 메소드를 사용하여 줄바꿈을 추가함
        .Append("저는 ")
        .Append("Name")             // Append() 메소드를 사용하여 줄바꿈 없이 붙이기
        .AppendLine("라고 합니다.")
        .Replace("Name", "김전사");   // Replace() 메소드를 사용하여 문자열을 바꿈

    Console.WriteLine(stringBuilder.ToString());   // ToString() 메소드를 사용하여 최종 문자열을 출력함
}

안녕하세요
반갑습니다.
저는 김전사라고 합니다.


internal class Program
{
    static void Main(string[] args)
    {
        GameObject gameObject = new GameObject();

        gameObject.SetX(10).SetY(5).SetZ(3);    // 아래의 return this; 를 사용하여 체인 메소드를 구현함
    }

}

  
public class GameObject
{
    public int x;
    public int y;
    public int z;

    public GameObject SetX(int x)
    {
        this.x = x;
        return this;    // this 는 gameObject.SexX(10) 의 gameObject 를 의미함
    }

    public GameObject SetY(int y)
    {
        this.y = y;
        return this;    // this 는 gameObject.SetX(10).SetY(5) 의 gameObject 를 의미함
    }

    public GameObject SetZ(int z)
    {
        this.z = z;
        return this;    // this 는 gameObject.SetX(10).SetY(5).SetZ(3) 의 gameObject 를 의미함
    }
}

internal class Program
{
    static void Main(string[] args)
    {
        MonsterBuilder orcArcherBuilder = new MonsterBuilder();
        orcArcherBuilder.SetName("오크 궁수")   // 체인 메소드를 사용하여 MonsterBuilder 를 설정함
            .SetWeapon("나무 활")
            .SetArmor("가죽갑옷");

        MonsterBuilder orcWarriorBuilder = new MonsterBuilder();
        orcWarriorBuilder.SetName("오크 전사")   // 체인 메소드를 사용하여 MonsterBuilder 를 설정함
            .SetWeapon("철 검")
            .SetArmor("철 갑옷");

        Monster orcArcher = orcArcherBuilder.Build();
        Console.WriteLine("이름 : {0}, 무기 : {1}, 갑옷 : {2}", orcArcher.name, orcArcher.weapon, orcArcher.armor);

        Monster orcWarrior = orcWarriorBuilder.Build();
        Console.WriteLine("이름 : {0}, 무기 : {1}, 갑옷 : {2}", orcWarrior.name, orcWarrior.weapon, orcWarrior.armor);

    }

}

  
public class MonsterBuilder
{
    public string name;
    public string weapon;
    public string armor;

    public MonsterBuilder()
    {
        name = "몬스터";
        weapon = "기본무기";
        armor = "기본갑옷";
    }
    public Monster Build()
    {
        Monster monster = new Monster();
        monster.name = this.name;
        monster.weapon = this.weapon;
        monster.armor = this.armor;
        return monster;
    }
    public MonsterBuilder SetName(string name)
    {
        this.name = name;
        return this;    
    }
    public MonsterBuilder SetWeapon(string weapon)
    {
        this.weapon = weapon;
        return this;    
    }
    public MonsterBuilder SetArmor(string armor)
    {
        this.armor = armor;
        return this;    
    }
}
public class Monster
{
    public string name;
    public string weapon;
    public string armor;
}

static void Main(string[] args)
{
    HambergerBuilder chickbergerBuilder = new HambergerBuilder();
    chickbergerBuilder           // 체인 메소드를 사용하여 HambergerBuilder 를 설정함
        .SetSource("매운양념")
        .SetPatty("치킨 패티");

    HambergerBuilder bigmacBuilder = new HambergerBuilder();
    bigmacBuilder.SetBread("참깨빵")   // 체인 메소드를 사용하여 HambergerBuilder 를 설정함
        .SetPatty("순쇠고기패티두장")
        .SetSource("특별한 소스")
        .SetVegetable("양상추");

    HambergerBuilder shirimpbergerBuilder = new HambergerBuilder();
    shirimpbergerBuilder.SetBread("호밀빵")   // 체인 메소드를 사용하여 HambergerBuilder 를 설정함
        .SetPatty("새우 패티")
        .SetSource("마요네즈");

	Hamberger chickberger = chickbergerBuilder.Build();
	Console.WriteLine("빵 : {0}, 소스 : {1}, 패티 : {2}, 야채 : {3}", chickberger.bread, chickberger.source, chickberger.patty, chickberger.vegetable);
}
  
  
public class HambergerBuilder
{
    public string bread;
    public string source;
    public string patty;
    public string vegetable;
    public HambergerBuilder()
    {
        bread = "기본빵";
        source = "캐찹";
        patty = "기본패티";
        vegetable = "양상추";
    }
    public Hamberger Build()
    {
        Hamberger hamberger = new Hamberger();
        hamberger.bread = this.bread;
        hamberger.source = this.source;
        hamberger.patty = this.patty;
        hamberger.vegetable = this.vegetable;
        return hamberger;
    }
    public HambergerBuilder SetBread(string bread)
    {
        this.bread = bread;
        return this;    
    }
    public HambergerBuilder SetSource(string source)
    {
        this.source = source;
        return this;
    }
    public HambergerBuilder SetPatty(string patty)
    {
        this.patty = patty;
        return this;
    }
    public HambergerBuilder SetVegetable(string vegetable)
    {
        this.vegetable = vegetable;
        return this;
    }
}
public class Hamberger
{
    public string bread;
    public string source;
    public string patty;
    public string vegetable;
}
profile
초보 개발자

0개의 댓글