무엇을 쪼개느냐가 아니라 누가 누구를 아는가
셋 다 데이터와 화면을 나누는 이야기입니다. 다른 것은 나누는 방법이 아니라 나눈 뒤에 남는 참조의 방향입니다.
new 를 부르는 자리를 한 곳으로 모은다
인터페이스로 갈아 끼울 수 있게 만들어 놔도 new 가 코드 곳곳에 흩어져 있으면 구체 타입 이름은 그대로 남습니다.
호출을 객체로 만들면 저장할 수 있게 된다
메서드는 부르고 나면 아무것도 남지 않습니다. 부르라는 지시를 객체로 만들어 두면 되돌리기, 기록, 리플레이, 전송이 한꺼번에 딸려 옵니다.
구조는 같고 누가 바꾸느냐가 다르다
전략과 상태는 코드만 보면 거의 구분이 안 됩니다. 갈리는 지점은 하나입니다. 다음에 무엇을 쓸지 밖에서 꽂아 주느냐, 자기가 정하느냐.
상태가 하나 늘면 조건은 하나만 늘지 않는다
bool 플래그는 있을 수 없는 조합까지 만들어 냅니다. enum 으로 한 번 정리되지만 switch 가 여러 곳에 흩어지면서 다시 무너집니다.