Java static 키워드 - 클래스 메서드와 클래스 변수
요약
Java static 키워드의 개념과 사용법을 알아봅니다. static 메서드와 static 변수의 특징, 인스턴스 없이 클래스명으로 호출하는 방법 등 정보처리기사 실기에 출제되는 핵심 개념을 정리합니다.
static 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| static 메서드 | 인스턴스 없이 클래스명으로 호출 가능 | Gamja.check(1) |
| static 변수 | 모든 인스턴스가 공유하는 변수 | static int count = 0; |
| 인스턴스 메서드 | 객체를 생성해야 호출 가능 | new Gamja().check(1) |
| main 메서드 | 프로그램 시작점, 항상 static | public static void main(...) |
static이란?
static은 "클래스에 소속된"이라는 의미의 키워드입니다. static이 붙은 메서드나 변수는 객체(인스턴스)를 만들지 않아도 사용할 수 있습니다.
일반 메서드 vs static 메서드
일반적으로 메서드를 호출하려면 객체를 먼저 생성해야 합니다.
하지만 static을 붙이면 클래스명으로 바로 호출할 수 있습니다.
| 호출 방식 | static 필요 여부 | 예시 |
|---|---|---|
객체.메서드() | 불필요 | new Gamja().check(1) |
클래스명.메서드() | 필요 | Gamja.check(1) |
static 메서드 (클래스 메서드)
static이 붙은 메서드를 static 메서드 또는 클래스 메서드라고 합니다.
static 메서드의 제약
static 메서드 안에서는 인스턴스 변수와 인스턴스 메서드에 직접 접근할 수 없습니다. static 메서드는 객체 없이도 호출되므로, 객체에 소속된 멤버를 사용할 수 없기 때문입니다.
| static 메서드에서 | 접근 가능 여부 |
|---|---|
| static 변수 | 가능 |
| static 메서드 | 가능 |
| 인스턴스 변수 | 불가능 |
| 인스턴스 메서드 | 불가능 |
static 변수 (클래스 변수)
static이 붙은 변수를 static 변수 또는 클래스 변수라고 합니다. 모든 인스턴스가 하나의 값을 공유합니다.
| 구분 | 인스턴스 변수 | static 변수 |
|---|---|---|
| 키워드 | static 없음 | static 있음 |
| 소속 | 각 객체마다 별도 | 클래스에 하나만 존재 |
| 공유 여부 | 객체마다 독립적 | 모든 객체가 공유 |
| 접근 방법 | 객체.변수 | 클래스명.변수 또는 객체.변수 |
main 메서드가 static인 이유
Java 프로그램의 시작점인 main 메서드는 항상 static으로 선언됩니다.
프로그램이 시작될 때 아직 아무 객체도 생성되지 않은 상태이기 때문입니다. 객체 없이도 호출할 수 있어야 하므로 main은 반드시 static이어야 합니다.
이것이 main 메서드 안에서 같은 클래스의 일반 메서드를 호출할 때 객체를 생성하거나 해당 메서드를 static으로 선언해야 하는 이유입니다.
문제 풀이: 21년 2회 기출
이 문제는 빈칸에 들어갈 키워드를 찾는 문제입니다.
풀이 과정
1단계: 호출 방식 확인
Gamja.check(1) - 클래스명(Gamja) 으로 직접 메서드를 호출하고 있습니다.
2단계: 키워드 판단
클래스명으로 직접 호출하려면 해당 메서드가 static이어야 합니다.
3단계: check 메서드 동작 확인
num에 1이 전달됨1 >= 0은 참 ->"positive"반환- 출력: positive
static 메서드와 오버라이딩
static 메서드는 클래스에 소속되어 있기 때문에 오버라이딩이 적용되지 않습니다. 자식 클래스에서 같은 이름의 static 메서드를 정의해도 별개의 메서드입니다.
| 메서드 타입 | 호출 기준 | 오버라이딩 |
|---|---|---|
| 인스턴스 메서드 | 실제 객체 타입 | 가능 |
| static 메서드 | 참조 변수 타입 | 불가능 |
이 개념은 25년 2회 기출에서 출제되었습니다. 자세한 내용은 메서드 오버라이딩과 static 메서드 페이지를 참고하세요.