익스프레션 스튜디오
[닷넷TDD]
  (14) TDD를 위한 객체지향 - 인터페이스의 분리 (Interface segregation)
 작성자 : 박경훈  작성일 : 2014-06-24
 E-mail : hoonsbara골뱅hotmail.com  Homepage : http://blog.hoons.net
 강좌 읽음 : 5495  
인터페이스를 이용해서 객체를 기능별로 잘 분리해야 한다는 원칙이다. 솔리드의 첫번째 규칙이었던 객체는 하나의 기능을 가지고 있어야 한다는 것과 의미적으로 보면 같은 맥락이 될 수 있다. 하지만 여기서의 의미는 인터페이스를 통해서 기능을 세부저긍로 분리하는 것이다. 바로 앞의 예제가 완벽하지 않은 이유는 일반 고객은 할인이 불가능함에도 불구하고 GetDiscount라는 메서드를 가지고 있기 때문이다. 필자는 이 기능을 분리하기 위해서 아래와 같이 인터페이스를 추가해보도록 하겠다. 
 
public interface IDiscount
{
    double GetDiscount(double totalSales);
}
 
이제 위의 소스를 아래와 같이 변경해보도록 하자. 
public interface IDiscount
{
    double GetDiscount(double totalSales);
}

public interface ISpecialService
{
    void SetSpecialService(string order);
}

public class Customer
{
}

public class SilverCustomer : Customer, IDiscount, ISpecialService
{
    public double GetDiscount(double totalSales)
    {
        return totalSales - 50;
    }
    public void SetSpecialService(string order)
    {
        //Save to Database
    }
}

public class GoldCustomer : Customer,IDiscount, ISpecialService
{
    public double GetDiscount(double totalSales)
    {
        return totalSales - 100;
    }
    public void SetSpecialService(string order)
    {
        //Save to Database
    }
}
 
이렇게 각자의 기능들을 인터페이스를 통하여 분리하였다. 향후에 원하는 기능을 수행하기 위해서 객체들을 손쉽게 분리할 수 있으며 또한 쓸모없는 기능을 가지고 있는 것을 방지할 수 있다.
 
평점: 없음    

나도한마디
사용자
오백만원            [2014-06-25]
Level 36
 [EXP.29/80]
와우!!! 감사합니다!
사용자
영미니Oo            [2014-11-27]
Level 26
 [EXP.5/50]
interface 는 도대체 왜 있을까 했는데 이러한 마법을 부릴 수 있네요.^^
감사합니다.
사용자
토끼도둑            [2015-05-15]
Level 3
 [EXP.5/16]
"세부저긍로" 오타용 ^^