Static이란 ?
- Static이란 ' 정적인' 이라는 뜻을 가짐
- Static 키워드를 통해 생성된 정적 멤버들은 Static 영역에 할당됨
- Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버로 어디서든지 참조 가능
- Gabage collector의 영역 밖에 존재하여 관여하지 않음
- 프로그램 시작될때부터 종료될때까지 메모리 값에 유지된 채로 존재

[ static 변수 ]
static이 붙지 않은 메서드나, 변수의 경우 객체가 생성될 때마다 호출되어 서로 다른 값을 가질 수 있음
각 객체들에서 공통적으로 하나의 값이 유지되어야 할 경우 static 사용
예시로 좋아요 개수를 받을 경우
package study;
public class LikeCount {
int count;
public LikeCount() {
this.count++;
System.out.println("좋아요 개수 : " + count);
}
public static void main(String[] args) {
LikeCount lc1 = new LikeCount();
LikeCount lc2 = new LikeCount();
}
}
static 사용하지 않고 lc1, lc2 객체가 생성될 때 lc1의 count와 lc2의 count가 서로 다른 메모리를 할당받아
메모리를 각각 받았으므로 좋아요 개수는 계속 1이 나오는 결과가 나온다
좋아요 개수 : 1
좋아요 개수 : 1
package study;
public class LikeCount {
static int count;
public LikeCount() {
this.count++;
System.out.println("좋아요 개수 : " + count);
}
public static void main(String[] args) {
LikeCount lc1 = new LikeCount();
LikeCount lc2 = new LikeCount();
}
}
이 경우에는 static 변수를 사용하여 lc1, lc2 객체가 하나의 메모리를 공유하게 되어 좋아요 개수가 증가하게 된다
좋아요 개수 : 1
좋아요 개수 : 2
[ static 메소드 ]
- 객체 생성 없이 사용 가능
- 프로그램이 시작하면 메모리의 static 영역에 적재되고, 프로그램 종료될 때 해제된다
- Static 메서드 내에서 인스턴스 변수 사용 불가능, ststic 변수만 접근 가능
정적 메서드 사용 예시
class Name{
static void print1() { //클래스 메소드
System.out.println("이름 : 홍길동");
}
void print2() { //인스턴스 메소드
System.out.println("이름 : 김상순");
}
}
public class Static_ex {
public static void main(String[] args) {
Name.print1(); //인스턴스를 생성하지 않아도 호출이 가능
Name name = new Name(); //인스턴스 생성
name.print2(); //인스턴스를 생성하여야만 호출이 가능
}
}
참조 : https://dev-coco.tistory.com/23, https://coding-factory.tistory.com/524
'JAVA > 공부' 카테고리의 다른 글
정적 바인딩 VS 동적 바인딩 (0) | 2025.01.15 |
---|---|
[프로그래머] 공배수 (0) | 2024.11.06 |
[JAVA] json 파싱하기 :: JSONArray, JSONObject 넘어오는 형태에 따라 값 추출하는 방법, 예시 (0) | 2024.08.26 |
[JAVA] String, StringBuffer, StringBuilder 차이 (0) | 2024.01.31 |
[JAVA] new String()과 String literal("") 차이 (0) | 2024.01.22 |