static 키워드 - C언어와 Java 비교

코딩C언어Java
읽는데 10분 소요
처음 쓰여진 날: 2026-03-31
마지막 수정일: 2026-03-31
조회수: 4

요약

C언어와 Java에서 static 키워드의 공통점과 차이점을 비교합니다. 둘 다 데이터 영역에 저장되고 한 번만 초기화되지만, C에서는 변수를 메모리에 고정, Java에서는 멤버를 클래스에 고정합니다.

static 핵심 정리

이 페이지에서 다루는 C언어 static의 핵심 개념을 요약한 표입니다.

개념설명예시
static 선언변수 앞에 static 키워드 추가static int x = 0;
한 번만 초기화프로그램 시작 시 한 번만 초기화됨두 번째 호출에서도 이전 값 유지
값 유지함수 종료 후에도 값이 사라지지 않음호출마다 2 → 4 → 6
저장 위치데이터(Data) 영역에 저장지역 변수(스택)와 다른 위치
접근 범위선언된 함수 안에서만 접근 가능전역 변수와 달리 함수 밖 접근 불가

static 핵심 정리

이 페이지에서 다루는 Java static의 핵심 개념을 요약한 표입니다.

개념설명예시
static 메서드인스턴스 없이 클래스명으로 호출 가능Gamja.check(1)
static 변수모든 인스턴스가 공유하는 변수static int count = 0;
클래스에 고정객체가 아닌 클래스 자체에 귀속됨클래스명.변수, 클래스명.메서드()
main 메서드프로그램 시작점, 항상 staticpublic static void main(...)

static이란? 쌩기초

static은 "정적인", "고정된"이라는 뜻입니다. 프로그래밍에서 static이 붙은 대상은 한 번 만들어지면 프로그램이 끝날 때까지 메모리의 데이터(Data) 영역에 고정된 위치로 유지됩니다.

C언어에서 static은 주로 함수 안의 변수에 사용됩니다. 일반 지역 변수는 함수가 끝나면 사라지지만, static 변수는 함수가 끝나도 값이 유지됩니다.

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

일반 지역 변수와 비교하면 차이가 명확합니다.

c
코드 하이라이팅 중...
구분첫 번째 호출두 번째 호출세 번째 호출
static int x = 0246
int x = 0222

Java에서는 함수를 메서드(method)1라고 부릅니다. Java에서 static"클래스에 고정된" 이라는 의미입니다. static이 붙은 변수나 메서드는 특정 객체가 아닌 클래스 자체에 고정되므로, 객체(인스턴스)를 만들지 않아도 사용할 수 있습니다.

java
코드 하이라이팅 중...
  • static 멤버2: 클래스에 고정 → 객체 없이 클래스명.변수 또는 클래스명.메서드()로 접근 가능 (Gamja.count, Gamja.check(1))
  • 인스턴스 멤버: 객체에 귀속 → 객체를 만들어야 접근 가능 (new Gamja().name, new Gamja().greet())

그래서 static 변수를 "클래스 변수", static 메서드를 "클래스 메서드"라고 부릅니다.


static 변수 기초

값이 유지되는 변수

static 변수는 프로그램 시작 시 한 번만 초기화되고, 이후에는 이전 값이 유지됩니다.

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

static 변수 vs 전역 변수

둘 다 프로그램 실행 동안 값이 유지되지만, 접근 범위가 다릅니다.

c
코드 하이라이팅 중...
구분전역 변수static 변수
값 유지OO
어디서든 접근OX (선언된 함수 내부만)
이름 충돌 위험3있음없음

모든 인스턴스가 공유하는 변수

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

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


C와 Java에서 static의 공통점과 차이점

C와 Java에서 static은 같은 키워드지만 강조하는 의미가 다릅니다.

공통점

공통점C언어Java
데이터 영역에 저장데이터(Data) 영역데이터(메서드) 영역4
한 번만 초기화프로그램 시작 시클래스 로딩 시5
프로그램 종료까지 유지OO
초기값 자동 지정0으로 초기화각 타입마다 정해진 기본값으로 초기화 (int는 0, String은 null)

차이점

구분C언어Java
무엇을 고정?변수의 값을 메모리에 고정 (함수 종료 후에도 유지)멤버를 클래스에 고정 (인스턴스 없이 접근)
적용 대상변수변수 + 메서드
접근 범위선언된 함수 내부로 제한어디서든 클래스명.멤버로 접근
공유 개념해당 없음 (함수 내 값 고정)모든 인스턴스가 같은 값을 공유

static 메서드 기초

static이 붙은 메서드는 클래스 메서드로, 객체를 생성하지 않고 클래스명으로 바로 호출할 수 있습니다.

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

static 메서드의 제약

static 메서드 안에서는 인스턴스 변수와 인스턴스 메서드에 접근할 수 없습니다. 인스턴스 변수는 객체를 생성할 때 만들어지므로, 객체 없이도 호출되는 static 메서드 입장에서는 그 변수가 아직 존재하지 않을 수 있기 때문입니다.

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

main 메서드가 static인 이유

Java 프로그램의 시작점인 main 메서드는 항상 static으로 선언됩니다. 클래스를 정의한다고 해서 객체가 자동으로 만들어지지는 않습니다. 프로그램이 처음 실행될 때 아직 아무 객체도 생성되지 않은 상태이므로, 객체 없이 호출 가능한 static 메서드로 선언해야 JVM이 진입점을 찾아 실행할 수 있습니다.

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

메모리 관점에서 본 static 기초

변수 종류저장 위치특징
지역 변수스택(Stack)함수 호출/종료 시 생성/소멸
static 변수데이터(Data) 영역프로그램 실행 동안 유지
전역 변수데이터(Data) 영역프로그램 실행 동안 유지

static 변수는 전역 변수처럼 데이터 영역에 저장되지만, 접근 범위는 함수 내부로 제한됩니다. static int count = 0; 코드는 컴파일 시점에 처리되어 초기화 대상에서 제외됩니다. 따라서 함수가 두 번째, 세 번째 호출되더라도 이 초기화 줄은 건너뛰고 이전 값이 그대로 유지됩니다.

변수 종류저장 위치특징
지역 변수스택(Stack)메서드 호출/종료 시 생성/소멸
static 변수데이터(메서드) 영역클래스 로딩 시 생성, 프로그램 종료까지 유지
인스턴스 변수힙(Heap)객체 생성 시 힙에 저장

static 변수는 JVM6이 클래스를 로딩할 때 데이터(메서드) 영역에 한 번 생성됩니다. 이후 만들어지는 모든 인스턴스는 별도의 복사본 없이 같은 메모리 공간(하나의 값)을 공유합니다.


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


Footnotes

  1. Java에서 메서드(method)는 C언어의 함수와 같은 개념입니다. 클래스 안에 정의된 함수를 메서드라고 부릅니다.

  2. 멤버(member)는 클래스를 구성하는 변수와 메서드를 통틀어 부르는 말입니다. 클래스에 고정된 변수는 "클래스 변수", 메서드는 "클래스 메서드"라고도 합니다.

  3. 전역 변수는 파일 전체에서 접근 가능하므로, 다른 파일이나 함수에서 같은 이름의 변수를 선언하면 충돌이 발생할 수 있습니다. static 변수는 선언된 함수 안에서만 유효하므로 이 위험이 없습니다.

  4. Java의 데이터(메서드) 영역은 JVM 명세에서 "Method Area"라고 부르며, C의 데이터(Data) 영역과 같은 역할을 합니다. 둘 다 프로그램 실행 동안 고정된 메모리 위치에 정적 데이터를 저장합니다.

  5. 클래스 로딩이란 JVM(Java Virtual Machine)이 해당 클래스를 처음 사용하는 순간, 클래스 파일을 읽어 메모리에 올리는 과정입니다. 이 시점에 static 변수가 초기화됩니다.

  6. JVM(Java Virtual Machine): Java 프로그램을 실행하는 가상 머신입니다. Java 코드를 어느 운영체제에서나 실행할 수 있도록 해주며, 클래스 로딩, 메모리 관리, 코드 실행을 담당합니다.


학습 경로
범위: 1단계