본문 바로가기

Refactoring

.net Winform 에서 코드 룩업하기 리펙토링 step6

Step6

편의사항 개선

 C# 문법에는 확장메서드라는 매우 유용한 문법이 존재한다. 어떠한 객체의 기능을 상속이 아닌 방법으로 확장하는 방식이다. ComboBox에 BindCode라는 메서드가 존재한다면 콤보박스가 코드를 바인딩할 수 있다고 추정할 수 있다. 소스코드의 모양에서 훨씬 더 이해하기 쉬운 코드를 작성할 수 있다.

public static class ComboBoxExtensionBindingCode
{
    public static ICodeBind BindCode(this ComboBox comboBox, IEnumerable<CodeData> codeDatas)
    {
        return new ComboBoxCodeBinder(comboBox, codeDatas);
    }
    public static ICodeBind BindCode(this ComboBox comboBox, IEnumerable<CodeData> codeDatas, ICodeBind refCodeBind)
    {
        return new ComboBoxCodeBinder(comboBox, codeDatas, refCodeBind);
    }
}
public partial class Form1 : Form
{
    private ICodeBind comboBoxCodeBinder1;
    private ICodeBind comboBoxCodeBinder2;
    private CodeDataRepository codeDataRepository;
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        this.codeDataRepository  = new CodeDataRepository();

        comboBoxCodeBinder1 = comboBox1.BindCode(this.codeDataRepository.GetCodeDatas("01"));
        comboBoxCodeBinder2 = comboBox2.BindCode(this.codeDataRepository.GetCodeDatas("02"), comboBoxCodeBinder1);

        button1.Click += new EventHandler(Event_ClickButton);
    }
    private void Event_ClickButton(object sender, EventArgs e)
    {
        string combo1Value = this.comboBoxCodeBinder1.GetCode();
        string combo2Value = this.comboBoxCodeBinder2.GetCode();

        //something...
    }
}

확장 메서드의 사용법은 인터넷에 검색해보면 많이 나와있다. 확장메서드를 이용하게 되면 읽기 쉬운코드와 개발자가 편하게 쓸 수 있는 코드로 확장하기가 매우 쉬워진다. 필히 학습하여 익혀둘 필요성이 높다고 볼 수 있다.

확장메서드를 만들어 쓰게 되면 코딩시에 코드완성창에서 아래와 같은 모습을 볼 수 있다. 메서드의 아이콘이 조금 특이하게 일반 메서드모양과 같은데 옆에 화살표가 표기되어있다.