알아야 하는 점

Unity에서는 ‘상태’라는 것을 나타내기 위해 주로 enum을 사용한다. enum은 서로 연관된 상수들의 집합으로 상태를 나타내기에 편리한 방식이다. 하지만 단점이 존재한다.

  1. 상태가 많아지면 분기도 많아진다.

    상태를 관리하는 메소드에서 각 상태로 전환을 할 필요가 있기 때문에 상태별로 전환에 필요한 분기가 많이 생기게 된다.

  2. 상태의 추가로 기능의 수정이 발생할 수 있다.

    enum의 값을 기준으로 분기문을 사용할 때, 상태가 계속해서 추가되거나 기능의 수정이 발생하는 경우에는 SOLID 원칙 중 OCP에 위배된다.

  3. 복잡한 코드의 중복이 발생한다.

    상태가 많아질수록 복잡해지는 분기가 여러 코드에서 중복해서 출현하게 되면서 그만큼 코드 변경을 어렵게 만든다.

상태 패턴의 장점

상태 패턴은 상태를 별도의 클래스로 캡슐화한 다음 현재 상태를 나타내는 객체에게 행동을 위임한다. 따라서 내부 상태가 바뀜에 따라서 행동이 달라지게 된다.

  1. 새로운 상태가 추가되더라도 Context가 받는 영향이 적다.

    Context는 인터페이스만을 사용하기 때문에 인터페이스를 상속받는 새로운 상태가 추가되더라도 Context가 변하는 일은 없다.

  2. 동작의 추가, 삭제, 수정이 간단하다.

    여러 동작을 구현해야할 때 객체의 스크립트를 건들일 필요 없이, 상태 스크립트만 수정하므로 추가, 삭제, 수정이 간단해진다.

  3. 분기가 줄어든다.

    객체의 상태에 따른 분기문이 줄어들어 코드가 간결해지고 가독성이 올라간다.