[자바] 주입(바인딩) 받지 않고 변수를 참조하는 방법
주입받지 않은 변수를 참조하는 방법
현재 다니는 회사는 자체 프레임 워크를 사용하고 있다.
해당 프레임 워크는 서비스 별로 비슷하게 동작되고 서비스 별로 다른 로직을 프레임 워크에 태워 각각의 서비스를 하는 모습이다.
즉, 프레임 워크에서 특정 로직을 실행 시킬 때 해당 로직에서 필요한 변수에 대해 binding을 해주게 되는데, 자바의 특성상 주입 받은 객체만 해당 변수(값)들을 사용할 수 있었다.
로직에서는 여러가지 util이 존재하는데 util에서 필요한 값들을 전부 파라미터로 넘겨주는것은 좋지 않은 방법이라고 생각했고, 이를 해결하기 위해 여러 가지 방법을 고민해 봤다.
- map을 static으로 선언한뒤 currentThread의 hashCode를 받아서 해당 값을 key로 하고 주입 받은 변수를 value로 저장해 둔다. 그렇게 되면 어디서든 해당 map을 접근 할 수 있고, currentThread의 hashCode는 어디서든 동일하기 때문에 같은 Thread에서 변수에 접근 가능하다.
이 방식의 단점은 hashCode의 경우 객체마다 고유하게 생성하는 것이지만 hash의 특성상 유니크한 값을 가지고 있다고 볼 수 없어서 사용할 수 없다.
- 최소에 실행되는 logic 클래스를 Thread 상속을 받는다! 이렇게 하게 되면 logic 클래스를 통해 실행 되는 여러가지 util에서도 Thread.currentThread()를 하게되면 logic에 접근가능하고 변수도 사용할 수 있게 된다! 즉, 같은 Thread인 경우에는 어디서든 접근가능한 것이다!
기존에 로직을 javascript를 사용해 짰을 땐 이런 문제가 없었다! 어디서든 프레임 워크에서 binding해준 값이 접근 가능했기 때문이다!
로직을 javascript에서 java로 바꾼 뒤 발생한 문제였다!
결국엔 위의 2번 방식을 통해 잘 해결할 수 있었다 !!
댓글남기기