https://coding-factory.tistory.com/524
[Java] 자바 static의 의미와 사용법
정적(Static)이란? 정적(static)은 고정된이란 의미를 가지고 있습니다. Static이라는 키워드를 사용하여 Static변수와 Static메소드를 만들 수 있는데 다른말로 정적필드와 정적 메소드라고도 하며 이
coding-factory.tistory.com
static 키워드를 통해 생성된 정적 멤버들은
1.Heap 영역이 아닌 Static영역에 생성
2. 모든 객체가 같은 값을 공유한다. (어디서든 참조해서 사용할 수 있다.)
3. Garbage Collector의 관리 영역 밖에 존재하기에 한 번 할당되면 프로그램이 종료될때까지 유지됨
선언시 static으로 사용할지는 공용해서 사용하느냐 / 안하느냐로 구분하는게 키워드의 쓰임에 맞는것같다. (유틸성)
일반적으로, 유틸성 멤버를 static으로 사용하기 때문에 변하지 않아야 하는 값이므로 final을 붙이고, 어디서든 사용가능하게 public 선언 해준다.
그래서 이런 코드가 된다.
public static final String REGION = "Asia, Seoul";
작업할때 ip, AWS 주소 같은 변하지 않는 공통의 값을 static으로 선언해서 사용했었다.
(하지만 이것은 yml 파일에서 개발환경에 따라 설정해서 코드에서 사용 가능 했기 때문에 잘 안쓰게 되긴했다. 아무튼..)
static의 성질에 대해서 알아보자면,
* static 필드, 메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버입니다. 그렇기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할때 클래스별로 관리됩니다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있습니다. |
* 인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 가지지만, Static 변수는 모든 인스턴스가 하나의 저장공간을 공유하기에 같은 값을 가집니다. |
* Static 키워드를 통해 생성된 정적멤버들은 Heap영역이 아닌 Static영역에 할당 Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만 Garbage Collector의 관리 영역 밖에 존재하기에 Static영역에 있는 멤버들은 프로그램의 종료시까지 메모리가 할당된 채로 존재하게 됩니다. 그렇기에 Static을 너무 남발하게 되면 만들고자 하는 시스템 성능에 악영향을 줄 수 있습니다. |
정적 메소드는 인스턴스를 생성하지 않아도 호출 할 수 있다.
정적 메소드는 유틸리티 함수를 만드는데 유용하게 사용된다.
하지만 유틸리티성이 아닌경우 남용해서는 안되는데 Static영역에 생성되어 프로그램 종료시까지 유지되기 때문.
public class Name {
static void print1() {
system.out.println("공통 함수입니다.");
}
void print2() {
system.out.println("ㅁㅁㅁ입니다.");
}
}
public class static_example {
public static void main() {
Name.print1(); // 공유되는 static메서드기 때문에 바로 사용 가능한 메서드.
Name name = new name(); // 인스턴스화 해야 사용가능한 print2 메서드.
name.print2();
}
}
'BackEnd > JAVA' 카테고리의 다른 글
[JAVA 기초] Static (0) | 2023.01.11 |
---|---|
[JAVA] JAVA 메모리구조, 변수 타입 기본형(Primitive)과 참조형(Reference) (0) | 2023.01.08 |
[JAVA] model.addAttribute JSON 형태로 넘기기 / JSON으로 받기 (0) | 2021.11.25 |
메이븐(Maven)이란? (0) | 2021.10.12 |
JDBC와 Mybatis의 차이 / API (0) | 2021.10.05 |