티스토리 뷰
Java에서 static
Java에서 'static' 키워드는 클래스 레벨에서 사용되며, 해당 클래스의 모든 인스턴스가 공유하는 필드 또는 메서드를 정의하는 데 사용된다. 'static' 필드(정적변수)는 클래스가 로드될 때 한 번 할당되며, 프로그램이 종료될 때까지 메모리에서 해제되지 않는다.
그럼 static은 어디서 어떻게 사용될까?
Static 필드(클래스 변수, 정적 변수)
Static 필드는 클래스의 모든 인스턴스에 공유되는 변수이다. 클래스 당 하나를 가지고 있다.
변하지 않는 상수를 지정할 때 위와 같이 static final로 지정해서 사용한다.
그러면 여러 인스턴스가 하나의 클래스변수를 가지며 메모리 사용측면에서 이점을 가질 수 있다.
주의!!
위의 코드처럼 String을 static final로 사용할 때는 public으로 사용해도 된다고 생각한다.
왜나하면 String은 애초에 불변클래스이고 final을 붙임으로서 외부에서 수정을 할 수 없기 때문이다.
하지만 다른 클래스의 경우 완전한 불변이 아닌 경우가 있다.(가령 Data 클래스)
그렇기 때문에 private 접근제어자로 등록하고 해당 필드에 대해
필요한 작업만을 메서드로 만들어 접근할 수 있도록 하는 것이 좋다.
Static 메서드(정적 메서드)
Static 메서드는 인스턴스를 생성하지 않고도 호출할 수 있는 메서드이다. 주로 유틸리티 메서드 또는 팩토리 메서드로 사용된다. Java에서 지원되는 다양한 클래스에서 찾아볼 수 있다.(Integer, Math 등등..)
여기서 중요한 점은 static 메서드는 클래스의 일반적인 내부 필드에는 접근할 수 없다. 왜냐하면 일반 필드는 클래스의 인스턴스가 생성될 때 할당되기 때문이다. 그렇기에 static으로 설정된 필드(클래스 변수) 또는 전달된 파라미터에 대한 접근만 허용된다.
주의사항
JVM의 메서드 영역에 할당되기 때문에 GC(Garbage Collector)의 관리 대상이 아니다. 그래서 무분별한 사용을 하거나 클래스변수가 크기가 큰 객체를 참조한다면 메모리 누수의 원인이 될 수도 있다.
또한, 멀티쓰레드 환경에서 동기화 문제가 발생할 수도 있다. 여러 쓰레드가 동시에 접근하고 수정하기 때문에 문제가 발생할 수 있다. 'static' 필드르 수정하는 메서드를 작성할 때는 쓰레드 안정성에 주의해야 한다. 'synchronized' 키워드를 사용하여 수정작업 한 번에 하나의 쓰레드만 접근할 수 있도록 막거나 'java.util.concurrent' 패키지의 동기화 클래스 및 메서드를 사용하여 공유 자원에 대한 동시 접근을 제어해야 한다.
'자바' 카테고리의 다른 글
[Java] Java 버전별 업데이트 사항(Java7~Java9) (0) | 2023.10.12 |
---|---|
[Java]Java에서 객체를 생성하는 5가지 방법 (0) | 2023.10.08 |
[Java] Map 인터페이스와 그 구현체들에 대해 알아보자. (0) | 2023.05.13 |
[Java] instanceof 와 getClass().equals()의 차이 (1) | 2023.04.25 |
[Java] 'this'와 'this()'의 차이 (0) | 2023.04.13 |
- Total
- Today
- Yesterday
- 파이썬
- 백준#서강근육맨#20300
- 오류
- 7568
- 대충 만든 자판
- 백엔드#게시판
- 백준
- 게시판#자바#JPA#Entity
- list
- 사탕 게임#백준#3085
- java
- springboot
- 프로그래머스
- querydsl
- 1978
- 11659
- 회고
- 서블릿#Servlet
- 4673번
- HTTP#HTTP특징
- 덧칠하기
- 자바
- controller
- Spring
- arraylist
- this()
- 백준#잃어버린 괄호#1541
- 1316번
- MVC
- 스프링
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |