static 키워드

2024. 7. 12. 01:28· CS/그외
목차
  1. static → 정적
  2. static 변수
  3. 멤버 변수(필드)의 종류
  4. 변수와 생명 주기
  5. static 메소드
  6. 메소드의 종류
  7. static 변수/메소드의 단점
728x90

static → 정적

  • 클래스의 인스턴스가 아니라 클래스에 속하며 클래스의 변수, 메소드 등을 공유하는데 사용된다.
  • 이를 통해 해당 클래스에서 만들어지는 객체 사이에서 중복되는 메소드, 속성을 효율적으로 정의할 때 쓰인다.
  • static으로 선언해서 명시적으로 이 클래스의 객체들 사이에서 사용되는 메소드, 속성이라는 것을 알려줄 수 있다는 장점이 있다.

static 변수

  • static 변수 = 정적 변수 = 클래스 변수
  • 한 클래스에서 사용하는 공용 변수 느낌
  • static 변수는 메소드 영역에서 관리된다.

멤버 변수(필드)의 종류

public class Data3 {
     public String name; // 인스턴스 변수
     public static int count; //static 변수
}
  • static 변수 → 인스턴스와 무관하게 클래스에 바로 접근해서 사용 가능
  • 인스턴스 변수 → 인스턴스를 생성해야 사용 가능
  • static 변수는 하나만 존재하지만, 인스턴스 변수는 인스턴스 개수만큼 존재한다.

변수와 생명 주기

지역 변수(매개 변수 포함) 인스턴스 변수 클래스 변수

위치 스택 영역의 스택 프레임 안에 보관 인스턴스에 있는 멤버 변수, 힙 영역 사용 메소드 영역의 static 영역에 보관
제거 시점 메소드 종료 시 제거 GC 발생 시 제거 해당 클래스가 JVM에 로딩되는 순간 생성, JVM이 종료될 때 제거
생명 주기 생명 주기 짧음 생명 주기 보통 생명 주기 김

static 메소드

  • 정적 메소드는 정적 변수처럼 인스턴스 생성 없이, 호출할 수 있는 메소드다.
    • 클래스명 + . 을 통해 메소드를 호출할 수 있다.
    • 불필요한 객체 생성 필요 없이 메소드를 호출할 수 있다.
  • 정적 메소드는 static만 사용할 수 있다.
    • 클래스 내부 기능을 사용할 때, static이 붙은 멤버 변수나 메소드만 사용할 수 있다.
    • 클래스 내부 기능을 사용할 때, 인스턴스 변수나 인스턴스 메소드는 사용할 수 없다.
  • 접근 제어자만 허락한다면 모든 곳에서 정적 메소드를 호출할 수 있다. → 정적 메소드는 공용이니까

메소드의 종류

  • 정적 메소드
  • 인스턴스 메소드
  • 멤버 변수(필드)와 마찬가지다.

static 변수/메소드의 단점

  • static 키워드로 선언되지 않은 변수는 heap에 할당된다.
  • heap에서는 GC가 메모리를 관리하고, 더 이상 필요하지 않는 메모리는 회수한다.
  • static 키워드로 선언된 변수, 메소드는 선언과 동시에 heap 영역이 아니라 메소드 영역의 static 영역에 보관된다.
  • 프로그램이 종료될 때까지 GC에 의해 메모리가 회수되지 않기 때문에 만약 클래스가 객체로 쓰이지 않는다면 메모리 낭비가 발생한다.
  • 그리고 JVM이 종료될 때까지 제거되지 않으므로 메모리 낭비가 발생할 수 있다.
728x90

'CS > 그외' 카테고리의 다른 글

라이브러리 vs 프레임워크  (1) 2024.07.16
오버로딩과 오버라이딩  (0) 2024.07.12
클래스, 객체, 인스턴스의 차이가 뭔가요?  (0) 2024.07.10
동기, 비동기  (0) 2024.04.29
  1. static → 정적
  2. static 변수
  3. 멤버 변수(필드)의 종류
  4. 변수와 생명 주기
  5. static 메소드
  6. 메소드의 종류
  7. static 변수/메소드의 단점
'CS/그외' 카테고리의 다른 글
  • 라이브러리 vs 프레임워크
  • 오버로딩과 오버라이딩
  • 클래스, 객체, 인스턴스의 차이가 뭔가요?
  • 동기, 비동기
happenundo
happenundo
happenundo
2023~ 개발블로그
happenundo
전체
오늘
어제
  • 분류 전체보기 (207)
    • TIL (3)
    • 알고리즘 (188)
      • 프로그래머스 (47)
      • 백준 (69)
      • 파이썬 문법 (11)
      • 이것이 코딩테스트다 (46)
      • 알고리즘 노트 (6)
      • SQL (8)
    • Spring (4)
      • Spring 입문 (2)
      • 개인 프로젝트 (1)
      • 인텔리제이 (1)
    • CS (8)
      • DB (2)
      • 네트워크 (1)
      • 그외 (5)
    • ~2022 (1)
    • etc (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 이코테
  • 백준
  • BinarySearch
  • 프로그래머스
  • 백트래킹
  • 다익스트라
  • 이진탐색
  • 파이썬
  • 재귀
  • 우선순위큐
  • 플로이드워셜
  • 완전탐색
  • 큐
  • 다이나믹프로그래밍
  • dfs
  • 최단거리
  • DP
  • 알고리즘
  • CS
  • 이것이코딩테스트다
  • BFS
  • distinct
  • 구현
  • 괄호변환
  • 스택
  • sql
  • 그리디
  • 정렬
  • deepcopy
  • 동적프로그래밍

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
happenundo
static 키워드
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.