커맨드는 "명령"이라는 뜻으로 커맨드 패턴은 명령을 클래스화 하는 것을 의미한다. 왜 이런게 필요한가? 결국 확장성을 고려한 것인데 예를들어 로그를 기록하는 기능을 구현한다고 가정하면 일반적으로 Log 클래스를 만들어서 그 안에 fileWrite, DbWrite, ConsoleWrite 메소드를 만들 것이다. 그런데 로그를 엘라스틱 서치에 적재하는 기능이 추가로 필요하게 되었다면 어떨까? Log 클래스에 esWrite 메소드를 만들어도 되지만 이렇게 되면 객체지향 설계원칙 중 개방 폐쇄 원칙 에 위배된다. 확장을 위해 Log 클래스를 변경해야 하기 때문이다. 기존 Log 클래스를 변경하지 않고 확장하려면 어떻게 해야 할까? 여기에서 필요한 것이 단일 책임 원칙 이다. 에초에 단일 책임만 가지도록 클래스를..