Java static 키워드 - 클래스 메서드와 클래스 변수

코딩Java
읽는데 9분 소요
처음 쓰여진 날: 2026-02-17
마지막 수정일: 2026-05-19
조회수:

요약

Java static 키워드의 개념과 사용법을 알아봅니다. static 메서드와 static 변수의 특징, 인스턴스 없이 클래스명으로 호출하는 방법 등 정보처리기사 실기에 출제되는 핵심 개념을 정리합니다.

static 핵심 정리

개념설명예시
static 메서드인스턴스 없이 클래스명으로 호출 가능Gamja.check(1)
static 변수모든 인스턴스가 공유하는 변수static int count = 0;
인스턴스 메서드객체를 생성해야 호출 가능new Gamja().check(1)
main 메서드프로그램 시작점, 항상 staticpublic static void main(...)

static이란? 쌩기초

static은 "클래스에 소속된"이라는 의미의 키워드입니다. static이 붙은 메서드나 변수는 객체(인스턴스)를 만들지 않아도 사용할 수 있습니다.

클래스는 원래 객체를 만들기 위한 **설계도(틀)**입니다. 일반 변수와 메서드는 설계도로 객체를 찍어내야 비로소 생기지만, static이 붙으면 설계도 자체에 바로 존재합니다.

  • static 멤버: 설계도(클래스)에 소속 → 객체 없이 접근 가능
  • 인스턴스 멤버: 객체에 소속 → 객체를 만들어야 접근 가능
java
코드 하이라이팅 중...
static 멤버 vs 인스턴스 멤버

그래서 static 변수를 "클래스 변수", static 메서드를 "클래스 메서드"라고 부릅니다 — 객체가 아니라 클래스에 소속되니까요.

일반 메서드 vs static 메서드

일반적으로 메서드를 호출하려면 객체를 먼저 생성해야 합니다.

java
코드 하이라이팅 중...

하지만 static을 붙이면 클래스명으로 바로 호출할 수 있습니다.

java
코드 하이라이팅 중...
호출 방식static 필요 여부예시
객체.메서드()불필요new Gamja().check(1)
클래스명.메서드()필요Gamja.check(1)

static 메서드 (클래스 메서드) 기초

static이 붙은 메서드를 static 메서드 또는 클래스 메서드라고 합니다.

java
코드 하이라이팅 중...
java
코드 하이라이팅 중...

static 메서드의 제약

static 메서드 안에서는 인스턴스 변수와 인스턴스 메서드에 직접 접근할 수 없습니다. static 메서드는 객체 없이도 호출되므로, 객체에 소속된 멤버를 사용할 수 없기 때문입니다.

java
코드 하이라이팅 중...
static 메서드에서접근 가능 여부
static 변수가능
static 메서드가능
인스턴스 변수불가능
인스턴스 메서드불가능

static 메서드와 오버라이딩

static 메서드는 클래스에 소속되어 있기 때문에 오버라이딩이 적용되지 않습니다. Parent ref = new Child()에서 ref.id()를 호출하면, 실제 객체(Child)가 아니라 선언 타입(Parent)의 id()가 호출됩니다.

왜 이렇게 동작하는지, 인스턴스 메서드와의 차이는 메서드 오버라이딩 - static 메서드와 인스턴스 메서드 페이지에서 자세히 설명합니다.


static 변수 (클래스 변수) 기초

static이 붙은 변수를 static 변수 또는 클래스 변수라고 합니다. 모든 인스턴스가 하나의 값을 공유합니다.

java
코드 하이라이팅 중...
java
코드 하이라이팅 중...
구분인스턴스 변수static 변수
키워드static 없음static 있음
소속각 객체마다 별도클래스에 하나만 존재
공유 여부객체마다 독립적모든 객체가 공유
접근 방법객체.변수클래스명.변수 또는 객체.변수

static 초기화 블록 심화

static 초기화 블록(static initialization block)은 클래스가 처음 JVM에 로드될 때 딱 한 번 실행되는 코드 블록입니다. 메서드가 아니라 블록이므로 이름·매개변수·반환값이 없고, 클래스 본문에 static { ... } 형태로 작성합니다.

java
코드 하이라이팅 중...

복잡한 초기화 로직(파일 읽기, 조건 분기 등)이 필요한 static 변수를 선언과 동시에 세팅하기 어려울 때 사용합니다. 일반 대입만으로 끝나면 static int count = 100;처럼 선언 옆에 적어도 같은 효과가 나기 때문에, 실전에서는 계산이 복잡할 때에만 별도 블록으로 뺍니다.

초기화 블록 vs 생성자

구분static 초기화 블록생성자
실행 시점클래스가 JVM에 로드될 때객체가 생성될 때
실행 횟수1회객체를 만들 때마다
접근 가능 멤버static 멤버만static + 인스턴스 멤버
호출 방법자동 실행 (직접 호출 불가)new 클래스()

상속과 초기화 순서

상속 관계에서 자식 객체가 생성될 때는 부모 → 자식 순서로 static 블록과 인스턴스 블록이 차례로 실행됩니다. 같은 부모·자식 안에서는 static이 인스턴스보다 먼저 끝납니다.

java
코드 하이라이팅 중...

실행 순서 추적

순서시점실행되는 것출력
1Child 클래스 첫 로드부모 Parent 먼저 로드 → Parent의 static 블록1
2Child 클래스 로드 계속Child의 static 블록4
3new Child() 1회차Parent 인스턴스 초기화 블록2
4(계속)Parent 생성자3
5(계속)Child 인스턴스 초기화 블록5
6(계속)Child 생성자6
7new Child() 2회차 — static은 이미 실행되었으므로 건너뜀Parent 인스턴스 블록2
8(계속)Parent 생성자 → Child 인스턴스 블록 → Child 생성자3 5 6

세 가지 핵심 규칙

  1. static이 먼저, 인스턴스가 나중: 클래스가 로드될 때 static 블록이 모두 실행된 뒤 객체 생성이 시작됩니다.
  2. 부모가 먼저, 자식이 나중: 같은 종류(static 또는 인스턴스)끼리는 부모부터 실행됩니다.
  3. static은 한 번만, 인스턴스는 매번: static 블록은 클래스 로드 시점에 단 한 번, 인스턴스 블록과 생성자는 new 할 때마다 실행됩니다.

main 메서드가 static인 이유 기초

Java 프로그램의 시작점인 main 메서드는 항상 static으로 선언됩니다.

java
코드 하이라이팅 중...

프로그램이 시작될 때 아직 아무 객체도 생성되지 않은 상태이기 때문입니다. 객체 없이도 호출할 수 있어야 하므로 main은 반드시 static이어야 합니다.

String[] args는 뭔가요?

String[] args는 프로그램 실행 시 외부에서 전달하는 문자열 배열입니다. Java가 정한 main 메서드의 고정된 형식이라서, 사용하지 않더라도 반드시 써야 합니다. 빼면 Java가 main 메서드를 인식하지 못해서 프로그램이 실행되지 않습니다. 시험에서는 args를 실제로 사용하는 경우가 거의 없으므로, main 메서드의 고정 형식 정도로 알고 넘어가면 됩니다.

이것이 main 메서드 안에서 같은 클래스의 일반 메서드를 호출할 때 객체를 생성하거나 해당 메서드를 static으로 선언해야 하는 이유입니다.

java
코드 하이라이팅 중...

정보처리기사 실기 대비 문제

Java static 키워드 - 클래스 메서드와 클래스 변수 | 정처기 감자