반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- assertThrows
- db
- 스프링 프레임워크
- Javascript
- 스프링
- DI
- JPA
- SQL
- 스프링 부트
- assertThat
- 스프링 부트 입문
- 스프링부트
- 스프링 부트 기본
- jdbc
- springboot
- 스프링 컨테이너
- 스프링 빈
- mybatis
- 필드 주입
- 싱글톤
- @Configuration
- sqld
- thymeleaf
- spring
- Effective Java
- kafka
- java
- DIP
- 생성자 주입
- resultMap
Archives
- Today
- Total
선 조치 후 분석
[Java] static 키워드 개념과 사용법 본문
728x90
반응형
SMALL
Static (정적)
- Static 키워드를 사용하여 Static 변수와 Static 메서드를 만들 수 있다.
- Static 변수와 Static 메서드는 객체(인스턴스)에 소속된 멤버가 아니라, 클래스에 고정된 멤버이다.
- 클래스 로더가 클래스를 로딩해서 '메서드 메모리' 영역에 적재할 때 클래스별로 관리된다.
- 클래스의 로딩이 끝나는 즉시 바로 사용 가능하다.
Static 멤버 생성
- Static 키워드를 사용해 생성된 Static 멤버(변수, 메서드)는 Heap 영역이 아닌, Static 영역에 할당된다.
- Static 메모리에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조 가능하다.
- 하지만, GC(Gabage Collector)의 관리 영역 밖에 존재하므로 static 영역에 있는 멤버들은 프로그램의
- 종료 시까지 메모리가 할당된 채로 존재한다.
- 그렇기에 static을 너무 남발하면 시스템에 악영향을 줄 수 있다.

Static 필드 사용 예시
number1, number2 2개의 인스턴스 변수를 생상하여서 각각 num, num2를 1씩 증가시켜 보는 테스트를 해봤다.
public class StaticExample {
static int num = 0;
int num2 = 0;
}
public static void main(String[] args) {
StaticExample number1 = new StaticExample();
StaticExample number2 = new StaticExample();
number1.num++;
number1.num2++;
System.out.println(number2.num);
System.out.println(number2.num2);
}
결과는 static으로 선언된 num만 1이 증가하였다.
1
0
이유는 뭘까?
인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 가지지만
Static 변수는 모든 인스턴스가 하나의 저장공간을 공유하기에 항상 같은 값을 가지기에 나타나는 현상이다.
Static 메서드 사용 예시
Static 메서드는 클래스가 메모리에 올라갈 때 Static 메서드가 자동적으로 생성된다.
그렇기 때문에, Static 메서드는 인스턴스를 생성하지 않아도 호출을 할 수 있다.
Static 메서드는 유틸리티 함수를 만드는데 유용하게 사용된다.
public class StaticExample {
static void print() {
System.out.println("정적 메서드");
}
void print2() {
System.out.println("인스턴스 메서드");
}
}
public static void main(String[] args) {
// 정적 메서드 사용 - 인스턴스를 생성하지 않고 사용 가능
StaticExample.print();
// 인스턴스 메서드 사용 - 인스턴스를 생성해야만 사용 가능
StaticExample test = new StaticExample();
test.print2();
}
728x90
반응형
LIST
'Language > Java' 카테고리의 다른 글
[Java] 물리적 동치성(==) vs 논리적 동치성(equals) 개념 (0) | 2023.11.29 |
---|---|
[Java] final 키워드 정리 (fianl 변수, 메서드, 클래스) (0) | 2023.11.28 |
[Java] Java 참조 유형 종류 (1) | 2023.11.27 |
[Java] String Constant Pool (String Pool) 개념 (1) | 2023.11.23 |
[Java] 상속 (Inheritance) vs 합성 (Composition) (0) | 2023.10.24 |