[개발 일기] 2025.01.22 - static

2025. 1. 22. 22:54·개발 일기

개요

 

자바를 사용할 때 정말 밥 먹듯이 사용하던 static 키워드..

 

 

오늘은 static 키워드에 대해 정리해 보자.

 

 

 

static

 

static의 사전적 의미는 ‘고정된’이다.

 

 

자바에선 이 static 키워드를 사용해 고정된 필드, 고정된 메서드를 만들 수 있다.

 

 

이렇게 고정된 필드, 고정된 메서드를 합쳐서 정적 멤버라고 표현한다.

 

 

만약 정적 멤버는 클래스가 클래스 로더에 의해 메모리에 저장될 때 함께 저장되는데, 이러한 정적 멤버는 한번 생성되면 자바 애플리케이션이 종료될 때까지 메모리에 남아있는다.

 

 

다음은 static이 적용된 클래스 예시이다.

 

class Member {
    static int age; // 정적 멤버 (클래스에 속함)
    String name; // 인스턴스 필드 (객체에 속함)
    
    public static void method1() {...} // 정적 메서드 (클래스에 속함)
    public void method2() {...} // 인스턴스 메서드 (객체에 속함)
}

 

주석을 보다시피 static이 달린 멤버들은 모두 클래스에 속한다.

 

 

위의 String name이나 void method2()와 같은 인스턴스 멤버들은 객체가 생성될 때 메모리의 힙 영역에 저장된다.

 

 

하지만 static int age와 static void method1()은 객체가 생성되기 이전, 클래스가 메모리에 로드될 때 클래스 영역에 저장된다.

 

 

즉, 생성되는 타이밍이 다른 것이다.

 

class Member {
    static int staticCount = 0; // 정적 멤버
    int instanceCount = 0; // 인스턴스 필드

    public static void incrementStaticCount() {
        staticCount++;
    }

    public void incrementInstanceCount() {
        instanceCount++;
    }
}
public class StaticTest {

    public static void main(String[] args) {
        Member.incrementStaticCount(); // 정적 메서드이기 때문에 객체를 생성하지 않고도 메서드 호출이 가능

        Member member = new Member(); // Member 객체 생성

        System.out.println(member.instanceCount);
        System.out.println(member.staticCount);
    }
}

-----------------------------

[결과]
0
1

 

만약 아래의 StaticTest를 실행시키면 Member 객체가 생성될 때 함께 생성된 instanceCount는 0을 유지한다.

 

 

하지만 Member 객체가 생성되기 전, 정적 메서드인 incrementStaticCount()을 호출해 staticCount을 1 증가시켰다.

 

 

이 과정이 가능한 이유는 이미 static int staticCount와 static void incrementStaticCount()가 클래스 영역에 저장되었기 때문이다.

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.01.24 - 낙관적 락 vs 비관적 락  (0) 2025.01.24
[개발 일기] 2025.01.23 - 직렬화  (0) 2025.01.23
[개발 일기] 2025.01.21 - TCP/IP  (0) 2025.01.21
[개발 일기] 2025.01.20 - 함수형 인터페이스  (0) 2025.01.20
[개발 일기] 2025.01.19 - JWT(JWS, JWE)  (0) 2025.01.19
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.01.24 - 낙관적 락 vs 비관적 락
  • [개발 일기] 2025.01.23 - 직렬화
  • [개발 일기] 2025.01.21 - TCP/IP
  • [개발 일기] 2025.01.20 - 함수형 인터페이스
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.01.22 - static
상단으로

티스토리툴바