본문 바로가기

[Project] 프로젝트 삽질기32 (feat Static)

어가며

사이드 프로젝트에서 푸시 알림을 활용한 서비스를 개발하고 있습니다. 개발하는 과정에서, Static 메서드는 언제 사용하는 것이 좋은지에 대해 이야기 나온 적이 있습니다. 그럼 Static은 정확히 무엇이고, 왜 사용해야 하는지에 대해 알아야겠다고 생각했습니다. 이 글은 Static에 대한 생각을 정리하기 위해 작성됐습니다.

 

 

 

 
 
 
 

 

 

 

 

Static 

Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미합니다. 이를 정확히 이해하기 위해서는 메모리 영역에 대한 이해가 필요합니다.

 

 

 

출처: https://mangkyu.tistory.com/47

 

 

일반적으로 우리가 만든 Class는 Static 영역에 생성되고, new 연산을 통해 생성한 객체는 Heap 영역에 생성됩니다. 객체의 생성 시에 할당된 Heap 영역의 메모리는 Garbage Collector를 통해 수시로 관리를 받습니다. 하지만 Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만, Garbage Collector의 관리 영역 밖에 존재하므로 Static을 자주 사용하는 프로그램의 종료 시까지 메모리가 할당된 채로 존재하므로 자주 사용하게 되면 시스템의 퍼포먼스에 악영향을 주게 됩니다. 

 

 

Static 변수와 메서드는 Static 메모리 영역에 존재하므로 객체가 생성되기 이전에 이미 할당이 되어 있습니다. 그렇기 때문에 객체의 생성 없이 바로 접근할 수 있습니다. 그럼 Static 변수와 메서드에 대해 조금 더 자세히 알아보겠습니다.

 

 

1. Static 변수

Static 변수는 메모리에 고정적으로 할당되어 프로그램이 종료될 때 해제되는 변수를 뜻합니다. 메모리에 한번 할당되므로 여러 객체가 해당 메모리를 공유하게 됩니다. 예를 들어 클래스에 정적 변수가 아닌, 멤버 변수를 활용하는 경우 객체의 인스턴스가 생성될 때마다 멤버 변수 또한 메모리를 할당받게 됩니다. 만약 인스턴스를 100개 생성한다면, 멤버 변수 또한 100개나 중복해서 생성됩니다. 이때 static을 활용하면 여러 객체가 하나의 메모리를 참조하기에 메모리 효율이 높아질 것입니다. 

 

 

 

2. Static 메서드

Static 메서드는 객체의 생성 없이 호출이 가능합니다. 인스턴스 멤버와 관련 없는 작업을 하는 메서드입니다. 메서드 내에서 인스턴스 변수를 사용할 수 없습니다. 일반적으로 유틸리티 관련 함수들은 여러 번 사용되므로 Static 메서드로 구현하는 것이 적합할 수 있습니다.  

 

 

 

3. Static 장점

Static를 사용하면 메모리를 효율적으로 사용이 가능합니다. 생성할 때마다 인스턴스가 힙에 올라가는 것이 아닌, 메모리의 Data 영역에서 고정 메모리를 사용하므로 메모리를 효율적으로 사용할 수 있습니다. 두 번째는 객체를 생성하지 않고 사용하기 때문에 빠르다는 이점이 있습니다. 

 

 

 

4. Static 단점

하지만 무분별한 static 사용은 메모리 유수의 원인이 됩니다. 프로그램 종료 시점에 메모리를 반환하므로 GC 대상이 아닙니다. 또한 단점이라고 부를 순 없겠지만, Static 메서드는 인스턴스 변수 혹은 메서드를 사용하고 호출할 수 없습니다. 인스턴스 변수와 메서드는 객체를 생성해야 사용할 수 있기에, 이 부분을 잘 알아두고 개발해야 합니다.

 

 

 

 

 

 


 

 

 

 

마치며

앞으로도 팀의 발전을 돕는 개발자가 되기 위해 노력하려 합니다. 팀에 필요한 부분이 무엇일지 고민하면서, 팀에 도움이 된다면, 열심히 공부해서 실무에 적용할 수 있는 개발자가 되기 위해 노력하고 싶습니다. 팀의 성장에 기여할 수 있는 개발자가 되겠습니다. 

 

 

 

 

 


 

 

 

 

 

 

참고 및 출처

 

[Java] static변수와 static 메소드

1. Static 정리 Java에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미합니다. 이를 정확히 이해하기 위해서는 메모리 영역에 대한 이해가 필

mangkyu.tistory.com

 

[Java] 정적(Static) 변수와 메서드란? (개념 / 사용 장 단점 / 사용 시기 / 예제)

서론 객체언어에서 사용되는 static과 인스턴스의 변수 및 메서드의 내용을 정리해보려한다. 해당 내용은 기초적인 내용이지만 자세히 인지하지 못하고 넘어갈 수 있는 부분이기에 초기에 잘 잡

jeongkyun-it.tistory.com