본문 바로가기
정보처리기사

[ 정보처리기사 ] 자바 static 관련 예시

by YBin's 2025. 7. 1.
Java Static 완벽 가이드

☕ Java Static 이해

정보처리기사 Java Static 낚시 문제를 피해보자

ERRORstatic 메소드에서 인스턴스 변수 접근 시도

static 메소드는 클래스 레벨에서 동작하기 때문에 인스턴스 변수에 직접 접근할 수 없습니다. 이는 컴파일 타임에 에러를 발생시킵니다.

import java.util.*; import java.lang.*; import java.io.*; class Person { private String name; public Person(String val){ name = val; } public static String get() { return name; // ❌ 컴파일 에러! } public void print(){ System.out.println(name); } } class Main { public static void main(String[] args) { Person obj = new Person("Yun"); obj.print(); // 이 부분은 정상 동작 } }
Cannot make a static reference to the non-static field name
static 메소드는 객체 생성 없이도 호출될 수 있기 때문에, 특정 인스턴스에 속한 변수에 접근할 수 없습니다.

SUCCESS일반 메소드에서 static 변수 접근

static 변수는 클래스에 속하므로 일반 메소드에서도 자유롭게 접근할 수 있습니다. 모든 인스턴스가 같은 static 변수를 공유합니다.

import java.util.*; import java.lang.*; import java.io.*; class Person { private static String name; // static 변수 public Person(String val){ name = val; // static 변수 초기화 } public static String get() { return name; // ✅ 정상 동작! } public void print(){ System.out.println(name); } } class Main { public static void main(String[] args) { Person obj = new Person("Yun"); obj.print(); } }
Yun
static 변수는 클래스가 로드될 때 메모리에 할당되며, 모든 인스턴스가 공유하는 변수입니다.

INFO인스턴스로 static 메소드 호출

인스턴스를 통해서도 static 메소드를 호출할 수 있습니다. 하지만 권장되지 않는 방식입니다.

import java.util.*; import java.lang.*; import java.io.*; class Person { private static String name; public Person(String val){ name = val; } public static String get() { System.out.println(name); return name; } } class Main { public static void main(String[] args) { Person obj = new Person("Yun"); obj.get(); // 인스턴스로 static 메소드 호출 } }
Yun

BEST클래스명으로 static 메소드 호출

static 메소드는 클래스명을 통해 호출하는 것이 가장 명확하고 권장되는 방식입니다. 인스턴스에서 초기화한 값도 static 변수이므로 접근 가능합니다.

import java.util.*; import java.lang.*; import java.io.*; class Person { private static String name; public Person(String val){ name = val; } public static String get() { System.out.println(name); return name; } } class Main { public static void main(String[] args) { Person obj = new Person("Yun"); Person.get(); // 클래스명으로 static 메소드 호출 } }
Yun
객체 obj에서 name을 초기화해도, name은 static이므로 Person.get()으로 호출해도 "Yun"이 출력됩니다.

WARNING인스턴스 없이 static 메소드 호출

인스턴스를 생성하지 않고 static 메소드를 호출하면 static 변수가 초기화되지 않았을 수 있습니다.

import java.util.*; import java.lang.*; import java.io.*; class Person { private static String name; // 초기화되지 않음 public Person(String val){ name = val; } public static String get() { System.out.println(name); return name; } } class Main { public static void main(String[] args) { Person.get(); // 인스턴스 생성 없이 호출 } }
null
인스턴스를 생성하지 않았으므로 생성자가 호출되지 않아 name 변수가 초기화되지 않습니다. 따라서 null이 출력됩니다.

🎯 Static 핵심 정리

  • static 변수: 클래스에 속하며 모든 인스턴스가 공유
  • static 메소드: 인스턴스 생성 없이 호출 가능
  • 접근 규칙: static → static (O), static → instance (X)
  • 호출 방식: 클래스명.메소드명() 권장
  • 초기화: 생성자를 통한 static 변수 초기화 가능