아 이게 뭐임!

Globals Are Evil이 뭐임!!

마로가마따 2021. 7. 16. 08:44

Globals Are Evil이 뭘까..

"Don't use global variables", or "Singletons are evil because they are global"

 

 

뭘까... 전역 변수를 쓰지말라고... 싱글톤은 글로벌하기때문에 악하다고... 싱글톤이 뭐야... 어려워..

그래서 좀 찾아봤다.

 

 

Globals Are Evil인 이유!

 

  1. 전역 및 정적 개체는 암시적 종속성/커플링을 일으키므로 캡슐화를 깨뜨립니다.
  2. 코드의 동작에 대해 추론하기 힘듭니다. 이러한 개체의 동작을 이해하기 위한 논리적 범위가 전체 프로그램으로 확장됩니다.
  3. 모의 개체를 만들거나(mock) 다른 코드를 임시로 대치(stub)하기가 어렵습니다. (=테스팅이 힘듦니다.)
  4. 전역 개체는 범위를 오염시킵니다.

 

객체지향적인 프로그래밍을 저해하고 코드를 복잡하게 만들며 수정하거나 테스팅하기 힘들어집니다. 또한 멀티쓰레드 환경에서 불가능한것은 아니지만 개발하기 까다롭다는 이유로 많은 수의 개발자들이 전역 변수의 사용을 지양하는 것 같습니다.

 

 

 

일부 다른 의견이 있었습니다.

 

The important thing is to remember the overall goal: clarity
The "no global variables" rule is there because most of the time, global variables make the meaning of code less clear.
However, like many rules, people remember the rule, and not what the rule was intended to do.
I've seen programs that seem to double the size of the code by passing an enormous number of parameters around simply to avoid the evil of global variables. In the end, using globals would have made the program clearer to those reading it. By mindlessly adhering to the word of the rule, the original programmer had failed the intent of the rule.
So, yes, globals are often bad. But if you feel that in the end, the intent of the programmer is made clearer by the use of global variables, then go ahead. However, remember the drop in clarity that automatically ensues when you force someone to access a second piece of code (the globals) to understand how the first piece works.

 

 

요약하자면,

전역변수는 많은 경우에서 나쁘지만 특정한 경우에 전역변수를 쓰는게 프로그래머의 의도에 부합할 수 있다고 합니다. 

 

 

 

 

생각해봤을때,

티 쓰레드 환경이나 단위 테스트에서 전역변수를 사용하는 것은 안전하지 않고 복잡성을 높입니다. 요즘의 많은 경우에서는 전역변수의 사용을 기피해야하는 게 맞습니다. 하지만 전역변수가 나쁘다고 생각하고 생각없이 모든 경우에서 전역변수의 사용을 강박적으로 피한다면 오히려 전역변수의 사용이 더 유용한 상황에서 오히려 부작용을 초래할 수 있을것입니다. 결국 전역변수를 올바르게 사용할 수 있는 방법을  알고 상황에 맞추어 사용할지 않할지 한단하는게 최선의 방법인 것 같습니다. 실제로는 전역변수를 올바르게 사용가능한지를 따지기 보다 그냥 사용하지 않는게 차선인 것 같습니다.

 

 

 

 

 

 

 

 

 

반응형

'아 이게 뭐임!' 카테고리의 다른 글

쿠키가 뭐임!!  (0) 2021.07.22
[객체지향] 의존성이 뭐임!!  (0) 2021.07.21
Gradle이 뭐임!  (0) 2021.07.15
CI/CD가 뭐임!  (0) 2021.07.14
Lombok이 뭐임!  (0) 2021.07.13