지금 일하는 곳에서기존에 만들어진 코드를 보는데static 을 굉장히 많이 사용하는데요.혹시 static 을 많이 사용하는 이유가 있을까요?물어보니 관리가 쉽다고 쓴다는데...글쎄요.이 정도로 많이 쓰는 곳은 처음봐서요.혹시 static 을 많이 사용할때 장단점은 뭐가 있을까요?
구글링해보시면 많은 정보가 나와있습니다만...대표적으로 메모리낭비죠.static은 컴파일타임에서 메모리에 잡히고Application이 끝나기전까지 쭈욱 유지됩니다.그래서 필요하지않는순간에 gc가 수집해가지않아서메모리낭비가 생깁니다.
Frudy 저도 그렇게 알고 있고 그래서 잘 안써왔는데이렇게까지 적극적으로 사용하는 곳을 못봐서요.필요한 정보들을 필요할때 불러오는 방식이 아니라거의 모든 정보를 항상 갖고 있는 방식으로 설계가 되어있네요.문제는 이 방식을 고수한다는 것...물론 public 은 보너스...;
하얀하양그렇죠? 우리 모두 뭐가 잘못됬는지 알고있어요.분명 기술은 잘못된점을 해결하기위해 새로운 기술이 나오고 변하는대..상식이 통하지않는 코드도 꽤 많나봐요...저번에 어떤 직장의 html문서에 인라인스타일속성을 줘서html문서 line이 수천줄이여서 걍 구조가 시궁창인곳도 있다고 들었...습니다.
static은 많이 쓰면 안좋습니다. 그 이유는 static을 썼을때 해당 함수나 변수를 프로그램 시작과 동시에 메모리에 올리게 되어 메모리 사용량을 늘리게 됩니다. 무한정 메모리를 늘릴 수 있는 상황이 아닌 경우가 많기 때문에 무작정 쓰는 건 좋지 않습니다. new 객체 생성 없이 쓸수 있다는 점에서 편하다고 생각 하신거 같네요. 같이 일하시는 분이.. static 선언된 것은 프로그램 종료될때까지 계속 메모리 상에 살아 있게 되기 때문에 불필요한 메모리 소모가 발생할 수 있습니다. 어떤 상황에서 써야 잘 쓴다는 건 명확하게 말씀드리기가 어렵지만 적어도 모든 변수와 모든 함수 혹은 객체를 개발의 편의성으로 인해 static 선언을 하는 것은 좋지 않습니다.
어..수정된 댓글을 지금봤는대요, public을 남발하는것도 있나보군요.그런데 오키 눈팅해보니위에서는 괜히 잘 돌아가는거 구조 갈아엎기 싫어하고그냥 기존꺼 소스 보고 고쳐서 써! 이러는곳이 많은거같았어요.질문자님이 직접 static중 필요없는거 바꾸고modifier access도 더 좁게 바꾸는걸위에서 허락해줄지는...잘모르겠네요.
혹시 static 을 많이 사용하는 이유가 있을까요?물어보니 관리가 쉽다고 쓴다는데...글쎄요.static을 사용해서 관리가 쉬워진다기보다, 관리하기 편한(?) Immutability, Stateless함, Composition-over-Inheritance 패턴을 지향하는 코드를 짜다보면 static이 자연스래 쓰여 집니다.예를 들어 java.lang.Math같은 클래스가 final이 아니여서 확장 및 override를 허용해서 여러 컨택스트에서 생성된 Math 인스터스들의 함수 기능들이 서로 제각각이라면 정말 가관의 코드가 나오겠죠.static이 좋고 나쁘다기 보다, 악랄한 개발자의 손에서는 무엇을 쓰더라도 악랄한 코드가 나와요.