C++ 클래스가 있고
bool is_initialized가 있어서 일단 이게 true여야지만
모든 메소드를 사용할 수 있게 하고 싶은데
제가 생각한 방법으로는 그냥 모든 메소드에다가 if(is_initialized) 넣는 방법밖에 없는데 좀더 예쁘게 구현 가능할까요?
요약: 깔끔하게 겍체 상태에 따라 사용 가능한 메소드가 바뀌는걸 구현하고 싶음
C++ 클래스가 있고
bool is_initialized가 있어서 일단 이게 true여야지만
모든 메소드를 사용할 수 있게 하고 싶은데
제가 생각한 방법으로는 그냥 모든 메소드에다가 if(is_initialized) 넣는 방법밖에 없는데 좀더 예쁘게 구현 가능할까요?
요약: 깔끔하게 겍체 상태에 따라 사용 가능한 메소드가 바뀌는걸 구현하고 싶음
전부 스트럭으로 불넣어서 한번 둘러싸면?
어.. 이해가 안되는데 자세하게 설명해주시면 감사하겠습니다
내가 무식해서 별로 도움이 안될것 같다
초기화까지 문제 없는 객체만 존재할 수 있도록 팩토리 함수를 만들던지 별로 좋은 방법은 아니지만 생성자에서 초기화 작업을 하고 exception catch를 하던지 일일이 초기화 여부 검사 안하는 다른 방법은 대표적으로 이 두가지임
팩토리 함수를 만들라는게 어떤식으로 만들라는 것인가요. 함수 내에서 초기화까지 다 하는 식?
초기화가 되어야 모든 메서드를 쓰게 하고 싶으신 건가요? 객체 초기화 시점에서 필요한 자원 할당이 다 안되는 경운가오 - dc App
2번 때문에 1번을 구현하고 싶은것 입니다.
클래스를 분리하는게 어떨까요 - dc App
해당 댓글은 삭제되었습니다.
할당같은건 다 생성자에서 하는데 값설정은 나중에 해야될때도 있어서..
위의 말이 맞음 정 그렇게 하고 싶으면 초기화 되기 전 상태랑 초기 화 한 후 상태를 두 개의 타입으로 분리하셈
저도 위 의견에 동의합니다. 가장 간단한 해결방법은 이 클래스의 유즈케이스를 인터페이스로 정의한다음 초기화 전후 상태에 따라 행동하는 별도 클래스를 정의하는 방법이 있을 것 같습니다.
그리고 잘 고민해보시면 그 상태의 이름은 '초기화'라고 부르기엔 부적합할겁니다. 생성을 해둔다음 값 설정을 차후에 한다는 것은 엄연히 2가지 이상의 상태가 존재한다고 봐야하거든요. 대표적으로 메모리 풀에서 'Activate' 상태와 'Inactivate' 상태가 있겠죠. 물론 논쟁의 여지가 있고 마이너한 문제지만 'Initialized' 는 굉장히 포괄적인 네이밍이고 다른 협업자가 봤을 때 바로 의도를 파악하기 어려울 수 있습니다. 명확하게 구간별 상태명을 정의해주는 것이 좋습니다.
의견과 별개로 특정 필드를 포함한 객체를 생성하고 싶다면 타입파라미터가 정의된 Wrapper 클래스를 정의하시면 됩니다. 위 사례에 사용하기엔 적합한 방법이 아니지만, dirty flag 같은 common state value를 정의할때는 유용합니다.