하얀하양
763
2019-06-26 17:15:58
7
958

static 을 많이 사용하면 안좋은 점이있나요?


지금 일하는 곳에서

기존에 만들어진 코드를 보는데

static 을 굉장히 많이 사용하는데요.


혹시 static 을 많이 사용하는 이유가 있을까요?

물어보니 관리가 쉽다고 쓴다는데...글쎄요.


이 정도로 많이 쓰는 곳은 처음봐서요.

혹시 static 을 많이 사용할때 장단점은 뭐가 있을까요?

0
  • 답변 7

  • Frudy
    7k
    2019-06-26 17:22:42

    구글링해보시면 많은 정보가 나와있습니다만...

    대표적으로 메모리낭비죠.


    static은 컴파일타임에서 메모리에 잡히고

    Application이 끝나기전까지 쭈욱 유지됩니다.

    그래서 필요하지않는순간에 gc가 수집해가지않아서

    메모리낭비가 생깁니다.

  • 하얀하양
    763
    2019-06-26 17:26:28 작성 2019-06-26 17:28:30 수정됨

    Frudy

    저도 그렇게 알고 있고 그래서 잘 안써왔는데

    이렇게까지 적극적으로 사용하는 곳을 못봐서요.


    필요한 정보들을 필요할때 불러오는 방식이 아니라

    거의 모든 정보를 항상 갖고 있는 방식으로 설계가 되어있네요.


    문제는 이 방식을 고수한다는 것...물론 public 은 보너스...;

  • Frudy
    7k
    2019-06-26 17:30:27

    하얀하양

    그렇죠? 우리 모두 뭐가 잘못됬는지 알고있어요.

    분명 기술은 잘못된점을 해결하기위해 새로운 기술이 나오고 변하는대..

    상식이 통하지않는 코드도 꽤 많나봐요...


    저번에 어떤 직장의 html문서에 인라인스타일속성을 줘서

    html문서 line이 수천줄이여서 걍 구조가 시궁창인곳도 있다고 들었...습니다.


  • 룰루랑랑
    57
    2019-06-26 17:32:03

    static은 많이 쓰면 안좋습니다. 

    그 이유는 static을 썼을때 해당 함수나 변수를 프로그램 시작과 동시에 메모리에 올리게 되어 메모리 사용량을 늘리게 됩니다. 무한정 메모리를 늘릴 수 있는 상황이 아닌 경우가 많기 때문에 무작정 쓰는 건 좋지 않습니다. 


    new 객체 생성 없이 쓸수 있다는 점에서 편하다고 생각 하신거 같네요. 같이 일하시는 분이.. 

    static 선언된 것은 프로그램 종료될때까지 계속 메모리 상에 살아 있게 되기 때문에 불필요한 메모리 소모가 발생할 수 있습니다. 

    어떤 상황에서 써야 잘 쓴다는 건 명확하게 말씀드리기가 어렵지만 적어도 모든 변수와 모든 함수 혹은 객체를 개발의 편의성으로 인해 static 선언을 하는 것은 좋지 않습니다. 

  • Frudy
    7k
    2019-06-26 17:32:51

    어..수정된 댓글을 지금봤는대요, public을 남발하는것도 있나보군요.


    그런데 오키 눈팅해보니

    위에서는 괜히 잘 돌아가는거 구조 갈아엎기 싫어하고

    그냥 기존꺼 소스 보고 고쳐서 써! 이러는곳이 많은거같았어요.


    질문자님이 직접 static중 필요없는거 바꾸고

    modifier access도 더 좁게 바꾸는걸

    위에서 허락해줄지는...잘모르겠네요.


  • 자라선
    1k
    2019-06-26 18:25:36

    누가봐도 비효율적이지만

    프로젝트 규모가 매우? 작다면 업무스타일에 따라 남발하는.. 것  아닐까요?

    원래 이론과 실무는 서로 다른영역이니깐요

  • BK
    1k
    2019-06-27 03:59:40
    혹시 static 을 많이 사용하는 이유가 있을까요?
    물어보니 관리가 쉽다고 쓴다는데...글쎄요.

    static을 사용해서 관리가 쉬워진다기보다, 관리하기 편한(?) Immutability, Stateless함, Composition-over-Inheritance 패턴을 지향하는 코드를 짜다보면 static이 자연스래 쓰여 집니다.


    예를 들어 java.lang.Math같은 클래스가 final이 아니여서 확장 및 override를 허용해서 여러 컨택스트에서 생성된 Math 인스터스들의 함수 기능들이 서로 제각각이라면 정말 가관의 코드가 나오겠죠.


    static이 좋고 나쁘다기 보다, 악랄한 개발자의 손에서는 무엇을 쓰더라도 악랄한 코드가 나와요.

  • 로그인을 하시면 답변을 등록할 수 있습니다.