inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코딩으로 학습하는 GoF의 디자인 패턴

상태 패턴 3부 - 장점과 단점

상태패턴의 순환참조(Circular Reference) 는 사용해도 좋은 것인가요?

1077

김영우

작성한 질문수 4

1

안녕하세요 !

좋은 강의 만들어 주셔서 너무 재밌게 공부하고 있습니다 !

상태 (State) 패턴 순환구조 (Circular Reference) 로 구성된 것으로 이해 하였습니다.

순환구조를 Code smell 로 표현하는 글들을 몇번 본적이 있습니다.

제가 기억하는 이유는 다음과 같습니다.

* 메모리 누수 요인 (순환을 끊지 않는한)

* 컴파일(빌드) 시, 순환구조 import 에러 (Java 에서는 정상 동작되는 것이 이상하게 생각 되었습니다)

 

개인적으로 Parent-Child 를 순환구조로 사용하면, 사용성이 너무 좋게 느껴졌습니다. (특히 탐색을 적게 하니까 더 좋았습니다.)

선생님께서는 순환구조를 어떻게 생각하시는지, 사용해도 되는지 궁금합니다 🙇‍♂️

(혹은 제가 상태 패턴을 순환구조로 잘 못 이해하고 있는걸까요? 🤔)

 

감사합니다.

java 디자인-패턴

답변 2

2

김영우

시원한 답변 감사합니다 !!

 

말씀해 주신것 처럼 interface State 의 각 메서드에 Context 를 인자로 넘기니, 순환구조가 해소되었습니다 👍

public interface State {

    public void addStudent(Student student, OnlineCourse onlineCourse);

    public void addReview(Student student, String review, OnlineCourse onlineCourse);

}

 

그리고 Parent-Child 처럼 긴밀한 관계에서, 이제는 순환구조를 좀 더 당당하게 쓸 수 있을 것 같습니다.

 

순환구조 import 에러는 Javascript 의 모듈 번틀러 빌드시 발생했던 상황이었습니다. (빌드결과가 undefined 인 상황)

(저의 주 개발언어가 Javascript 거든요 ㅎㅎ;)

 

FE 주니어도 이해할 수 있는 좋은 강의 만들어주셔서 감사합니다 !!

1

백기선

안녕하세요. 좋은 질문이네요.

말씀하신대로 순환 참조는 가급적이면 피하는게 좋은데요. 이 패턴의 경우에는 제가 만든 예제 코드처럼 State쪽에서 Context를 필드로 가져도 되지만 State에 있는 메소드를 호출할 때 Context를 매개변수로 넘겨줄 수도 있습니다. 매개변수로 넘기더라도 State와 Context는 상호간에 참조를 하긴하지만 필드로 가지고 생성자로 넘겨줘야 할 때 보다는 객체 생성이나 순환 참조로 인한 이슈가 줄어들긴 할 겁니다.

순환 참조는 저도 가급적이면 피하려고 하지만, 그 둘이 긴밀하게 관련이 있는 상황이라면 굳이 피할 필요도 없다고 생각해요. 그리고 말씀하신 순환 참조 문제 중에 "컴파일(빌드) 시, 순환구조 import 에러가 발생한다" 이 부분은 사실인지 조금 더 확인해 보시는게 좋을 것 같습니다.

감사합니다.

많이 사용되는 패턴의 순서를 정한다면 어떤 순서일까요?

0

116

1

@Builder에 대해 사소한 질문

0

56

1

default 기능이 있는 interface와 추상클래스의 차이

0

50

1

실무 코드에 디자인 패턴 적용 시의 '기준'에 대해 조언을 얻고 싶습니다.

0

46

1

데코레이터 패턴, before 가 O(2^n) 인 이유

0

47

0

혹시 다음강의는 언제쯤..

0

349

1

volatile 사용 이유에 대해서 여쭤보고 싶습니다!

0

624

3

Spring Security 의 ProviderManager (AuthenticationManager) 도 옵저버 패턴을 사용하고 있다고 볼 수 있을까요?

0

392

2

싱글톤 패턴을 깨트리는 방법

0

551

1

코드에 약간 오타가 있는거 같습니다.

0

434

1

싱글톤 (Singleton) 패턴 구현 방법 3 - 2번 퀴즈에 대해 질문이 있습니다.

0

569

2

안녕하세요, 강의 순서 질문드립니다.

0

686

1

스프링 시큐리티 WebSecurityConfigurerAdapter deprecated 대체 코드

0

2431

1

팩토리메소드 = 추상팩토리?

2

922

1

중재자 패턴에 관하여~

0

511

1

undo 메소드 작업중에서

1

367

1

익명클래스로 객체 생성시 의문점

0

591

1

mediator패턴에서 객체끼리 순환참조는 어떻게 해결해야할까요

0

480

1

객체간에 this를 넘기는 부분에 관련해 질문이 있습니다..

1

366

1

전략 패턴과 상태 패턴에 관련해서 질문이 있습니다.

0

283

1

플라이웨이트 패턴 3부에서 HashMap 동시성 질문입니다.

0

261

1

enum 이 이른 초기화 방법이 아니라는 것은,

0

507

1

해당 코드가 C# 에선 접근 관련 컴파일 에러가 뜹니다.

0

436

1

설계관련 궁금증이 있습니다.

0

329

0