-
[JAVA] Static 키워드자바 2023. 4. 27. 11:03
코드를 짜면서 static이라는 키워드에 대해 생각을 하지 않았다
면접 준비할 때 static이 뭔지에 대해서 암기만 했을 뿐...
이번에 왜 메서드와 클래스에 static을 넣었냐는 질문을 받으니 그냥...이라는 말 밖에 할 수 없었다
정리해 보니 지금은 작은 프로그램이라 상관이 없지만, 큰 프로그램을 다룰 때는 반드시 고려해야 하는 것이구나 느꼈다
static 키워드 (static : 정적, 고정된)
static 변수, static 메서드 > 정적필드와 정적메서드
> 정적멤버
> 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버
> 공용으로 사용하느냐 아니냐에 따라 static 키워드 사용할지말지
> main 메서드보다 먼저 실행
1. 메모리에 고정적으로 할당된다.
- static이 붙지 않는 메서드/변수는 객체가 생성될 때마다 호출되어 서로 다른 값을 가질 수 있다.
- 각 객체들에서 공통적으로 하나의 값이 유지되어야 할 경우 static을 유용하게 사용할 수 있다.
2. 객체 생성 없이 사용할 수 있다.
- 어떤 객체에 소속되어 있다는 뜻은 new 키워드를 이용하여 객체를 생성해야만 해당 변수나 메서드를 사용할 수 있다는 뜻
- 이런 경우 "callApi"라는 객체가 생성되어야 실행될 수 있다.
- static이 있는 경우 바로 호출 가능, static 키워드를 붙이면 객체 생성 없이도 메서드나 변수를 사용할 수 있다
3. 프로그램이 시작되면 메모리의 static 영역에 적재되고 프로그램이 종료될 때 해제된다.
- 일반적인 메서드 : 일반적인 메서드는 객체를 생성하면 메모리의 Heap 영역에 올라간다. 메모리의 heap 영역은 GC에 의해 자동으로 관리된다. GC는 사용하지 않는 객체의 경우 알아서 삭제시킴으로써 메모리를 관리한다.
- static 메서드 : static 영역이 존재하기 때문에 GC의 관리를 받지 않는다. 따라서 프로그램이 종료될 때 해제하게 되는데, 이 때문에 과도하게 많은 ststic을 선언할 경우 과부하가 올 수 있다. 또한 프로그램 시작 시 static 영역의 메모리 크기를 넘어서는 양의 static 메서드들이 존재하면 시작과 동시에 에러가 발생한다. 사용하기 쉽다고 해서 static을 남발하는 것은 조심해야 한다.
> 인스턴스 변수는 인스턴스가 생성될 대마다 생성되므로 인스턴스마다 각기 다른 값을 가지지만 정적 변수는 모든 인스턴스가 하나의 저장공간을 공유하기에 항상 같은 값을 가진다.
4. static 메서드 내에서는 인스턴스 변수를 사용할 수 없다.
static 메서드는 프로그램 실행과 동시에 메모리에 올라가기 때문에 인스턴스 변수는 사용할 수 없다. 메서드에 static 키워드를 사용하고 싶다면, 해당 메서드 내부에 인스턴스 변수나 인스턴스 메서드를 사용하는지 확인해야 한다.
(참고)
https://kingofbackend.tistory.com/131
728x90'자바' 카테고리의 다른 글
[JAVA] 파일 읽고쓰기, BufferedWriter 파라미터로 넘기기 (0) 2023.04.29 [JAVA] try-catch-finally 구문 (0) 2023.04.28 [JAVA] openAI API 이용한 chatGPT, 자바로 채팅 기능 구현하기 - V2 (0) 2023.04.24 [JAVA] stream (0) 2023.04.23 [자바] URLConnection, HTTPURLConnection (0) 2023.04.22