[패턴을 활용한 리팩터링] 58p 패턴 중독

130 views
Skip to first unread message

책읽는잉여

unread,
May 30, 2013, 5:31:46 AM5/30/13
to gamecodi-s...@googlegroups.com
Jason Tiscioni 라는 프로그래머가 패턴 중독을 풍자하기 위해 만든 HelloWorld 코드를 C# 으로 적어봤습니다.

Console.WriteLine("Hello World"); 가 다음 처럼 장황해져 버리네요.


using System;
namespace HelloWorld
{
    public class MessageStrategy
    {
        public Action act { get; private set; }
        public MessageStrategy(Action act)
        {
            this.act = act;            
        }
        public void sendMessage()
        {
            act();
        }
    }
    public abstract class AbstractStrategyFactory
    {
        public abstract MessageStrategy createStrategy(MessageBody mb);
    }
    public class MessageBody
    {
        public Object payload { get; set; }
        public void send(MessageStrategy ms)
        {
            ms.sendMessage();
        }
    }
    public class DefaultFactory : AbstractStrategyFactory
    {
        private DefaultFactory() { }
        static DefaultFactory instance = new DefaultFactory();
        public static AbstractStrategyFactory getInstance()
        {
            return instance;
        }
        public override MessageStrategy createStrategy(MessageBody mb)
        {
            return new MessageStrategy(() => { Console.WriteLine(mb.payload.ToString()); });
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MessageBody mb = new MessageBody();
            mb.payload = "Hello World";
            AbstractStrategyFactory asf = DefaultFactory.getInstance();
            MessageStrategy strategy = asf.createStrategy(mb);
            mb.send(strategy);
        }
    }
}

책읽는잉여

unread,
May 30, 2013, 5:40:52 AM5/30/13
to gamecodi-s...@googlegroups.com
C# 의 람다 역시 C++11 의 것과 동일하게 기본적으로 value capture 될거라 생각하고 작성하였는데
맞겠죠??

노코드

unread,
May 30, 2013, 9:59:22 PM5/30/13
to gamecodi-s...@googlegroups.com
히히
 

포인트

unread,
May 30, 2013, 10:16:12 PM5/30/13
to gamecodi-s...@googlegroups.com
헐..

전략패턴과 추상 팩토리 메소드

패턴 중독이라... 패턴을 맹신 하고 있었네요...

책읽는잉여

unread,
May 30, 2013, 10:43:51 PM5/30/13
to gamecodi-s...@googlegroups.com
전 최근에 C# 으로 supersocket 라이브러리 이용해서 간단한 서버 (테스트 수준) 를 만들 때 비슷한 경우가 있었습니다.
서버에서 exception 을 핸들링 할 때 다양한 로그 기록 방식을 위의 풍자 코드에서 처럼 전략 패턴과 팩토리 메서드 패턴과 같이
지원하고 싶었죠... 하지만 당장에는 콘솔 출력이면 충분했습니다. 결국 아직 찾아 오지 않은 미래에 대한 예견 때문에
시간을 허비했었고 코드는 대거 삭제 했었습니다.

소소한인생

unread,
May 30, 2013, 10:51:33 PM5/30/13
to gamecodi-s...@googlegroups.com
저는 실무에서 디자인 패턴이라곤 싱글톤 밖에 사용을 안한 것 같은데...
다른 분들은 디자인패턴 실무에서 어떤부분에서 어떻게 사용하시나요?

책읽는잉여

unread,
May 31, 2013, 12:50:49 AM5/31/13
to gamecodi-s...@googlegroups.com
저도 의도적으로 패턴 써야지 하고 쓰게되는 것은 거의 싱글톤인 것 같습니다.
다른 것들은 이렇게 저렇게 궁리하고 코드를 고쳐 보다 보면
팩토리나 위임자, 전략, 어뎁터 등과 비슷한 형태로 나오게 되는 거 같구요.

Stiner

unread,
May 31, 2013, 10:38:43 AM5/31/13
to gamecodi-s...@googlegroups.com
싱글톤이나 상태, 전략 패턴은 실무에서 좀 적용을 해본 경험이 있네요.
하지만 그리 적극적으로 적용을 하지 않았는데, 이유는 주변 분들이 패턴에 익숙치 않았었고 보기 힘들다고 하더군요.

그리고 어느 책에서 본 기억으로는
'패턴은 사용하는 것이 아닌, 하다보면 패턴 형태가 되어 있는 것.'
이라고 본 기억이 있네요.
요즘은 패턴 적용 보다는 클래스 자체의 설계에 집중 할려고 노력 하고 있습니다.
'잘 만든 클래스 하나 열 패턴 안부럽다.' 이런 느낌? ㅎㅎ;

노코드

unread,
Jun 1, 2013, 12:49:09 PM6/1/13
to gamecodi-s...@googlegroups.com
저는 패턴 무용론을 주장하는 하는데..  싱글톤 조차 쓸데리 없다고 말하면
 
저 또 혼나나여? ㅋㅋ
 

책읽는잉여

unread,
Jun 1, 2013, 10:40:26 PM6/1/13
to gamecodi-s...@googlegroups.com
노코드님 개인적인 취향에 뭐라할 생각 없습니다.
패턴 자체가 무용하다고 생각하신다는 점에 대해서는 노코드님의 개인적 취향이 그렇다는 정도로 이해했습니다.
반복적으로 주장하실 필요는 없을거 같습니다.

ps. 설정에서 E-Mail 을 통한 개시 허용이 안되있어서 그런가 메일에 답을 달면 웹 토론에는 반영이 안되어서
E-Mail 을 통한 개시 허용으로 변경해 두었습니다.

2013년 6월 2일 일요일 오전 1시 49분 9초 UTC+9, 노코드 님의 말:
Reply all
Reply to author
Forward
0 new messages