본문 바로가기
학습/Java

Java에서 static 사용하면 안되는 이유

코동이 2021. 1. 25.

PHP, Java와 같은 언어들은 static class를 가지고 있지 않습니다. 하지만, 그 컨셉은 여전히 존재합니다. static methods로만 완벽하게 이루어진 클래스는 static class과 완전히 똑같은 효과를 가지게 됩니다.

static class들은 절차지향적으며, 테스트가 불가능합니다.

1. Classes Tend to Go From Big to Huge

static methods를 가지고 있는 class들은 객체를 통해서 할 일이 없습니다. 자신들의 정체성도 없으며, 무엇을 해야 하는지, 무엇을 하면 안되는지 정의되어 있는 부분이 없습니다. 경계선이 흐릿하기 때문에 우리는 단지 명령어를 써내려갈 뿐입니다. 우리가 일을 다 마치기 전까지 중간에 정지할 수 없습니다. 불가피하고 객체지향적이지 못한 과정입니다.

2. Dependencies Are Hidden
가독성 또한 떨어집니다. calss 안에 무엇이 있을까요? DB 쿼리, 계산, 이메일 전송? 하나의 class 안에 얼마나 많은 것들이 있는지 제어하기 힘듭니다. 여기에는 하나의 static method가 존재하고, 하나는 다른 쪽에 존재합니다. 그 존재들을 확인할 때, 이미 시간절약과 좋은 코드를 작성하기에 늦었습니다.

3. Low Cohesion
그리하여, class는 더욱더 응집력이 낮아집니다. 너무 많은 의존성이 있으며 자신에게 주어진 역할보다 더 많은 것을 해야합니다. 많은 의존성을 가지는 가능한 이유는 저수준의 추상화 단계일 때입니다. 높은 수준의 추상화에서 의존성을 합치는 것이 필요합니다.

4. Tight Couping
static method는 어디에서나 호출될 수 있다는 것을 의미합니다. 즉, 많은 문맥의 상황에서 호출될 수 있습니다. 많은 고객들이 있기 때문에 한 class가 static method에서 implement 되어야 하는 작은 특별한 행동이 필요하다면, 어떠한 다른 고객들이 피해가 가지 않도록 해야 합니다. 그래서 재사용은 정상적으로 작동하지 못합니다. 이것은 제가 조립하기 위해 노력하고 마이크로서비스를 재사용하려는 것과 비교할 수 있습니다. 결과로 나온 class들은 너무 일반적이고 완벽한 유지가 불가능합니다. 이것은 전체 시스템의 결합도의 상승으로 이어집니다.  

 

dzone.com/articles/static-classes-are-evil-or-make-your-dependencies

 

반응형

'학습 > Java' 카테고리의 다른 글

orElse() vs orElseGet()  (0) 2021.02.18
Optional의 배경지식  (0) 2021.02.18
Front-End와 Back-End 연계하기  (0) 2020.12.22
Map에서 Key, Value 다루기  (0) 2020.11.02
자바 시간 Millisecond 다루기  (0) 2020.10.23