안녕하세요, 코딩하는곰입니다! 오늘은 자바 프로그래밍의 핵심 개념 중 하나인 ‘static 필드와 메서드’에 대해 깊이 있게 알아보겠습니다. 20년 넘게 자바를 다루어 오면서 static의 올바른 사용법과 오남용 사례를 수도 없이 보았는데요, 이번 포스팅을 통해 여러분이 static을 완벽히 이해하고 실무에 효과적으로 적용할 수 있도록 도와드리겠습니다. 특히 메모리 관리 측면과 디자인 패턴에서의 활용법 등 실무 노하우를 집중적으로 공유할 예정이니 끝까지 집중해주세요!
static은 자바에서 ‘클래스 수준’의 멤버를 정의할 때 사용하는 키워드입니다. 일반적인 인스턴스 변수/메서드와 달리 객체 생성 없이 바로 사용할 수 있는 특징이 있습니다.
public class Car {// static 필드 (클래스 변수)public static int totalCars = 0;// static 메서드public static void printTotalCars() {System.out.println("생산된 총 차량 수: " + totalCars);}// 인스턴스 필드private String model;public Car(String model) {this.model = model;totalCars++; // 생성될 때마다 static 변수 증가}}
위 예제에서 totalCars는 static 필드로, 모든 Car 인스턴스가 공유하는 변수입니다. printTotalCars() 메서드는 객체 생성 없이 Car.printTotalCars()로 바로 호출 가능합니다.
static의 핵심 특징 3가지:
static 메서드는 Math.sqrt(), Collections.sort()처럼 유틸리티 함수 구현에 적합합니다.
public class StringUtils {private StringUtils() {} // 인스턴스화 방지public static boolean isBlank(String str) {return str == null || str.trim().isEmpty();}public static String reverse(String str) {if (str == null) return null;return new StringBuilder(str).reverse().toString();}}
복잡한 static 변수 초기화 시 사용합니다.
public class DatabaseConfig {private static final Properties config;static {config = new Properties();try (InputStream is = DatabaseConfig.class.getResourceAsStream("/db.properties")) {config.load(is);} catch (IOException e) {throw new RuntimeException("DB 설정 로드 실패", e);}}public static String getDbUrl() {return config.getProperty("db.url");}}
기억력과 집중력을 향상시키고 싶다면, 다양한 모드로 구성된 스도쿠 저니를 활용해보세요.
static 변수는 Heap 영역의 Class 객체에 저장됩니다. 클래스 로더가 클래스를 로드할 때 Method Area에 생성되며, 프로그램 종료 시까지 메모리에 상주합니다.
// 성능 테스트 예제public class PerformanceTest {private static int staticVar;private int instanceVar;public static void staticAccess() {for (int i = 0; i < 1_000_000_000; i++) {staticVar = i;}}public void instanceAccess() {for (int i = 0; i < 1_000_000_000; i++) {instanceVar = i;}}}
최신 당첨번호와 AI 추천 번호를 모두 확인하고 싶다면, QR코드 번호 확인 기능이 있는 지니로또AI 앱이 완벽한 선택입니다.
지금까지 자바의 static 필드와 메서드에 대해 깊이 있게 알아보았습니다. static은 강력한 도구이지만, 남용하면 오히려 시스템의 유연성을 해칠 수 있습니다. 실무에서는 ‘정말 공유해야 하는가?’, ‘상태를 유지해야 하는가?‘를 고민한 후 사용하시길 바랍니다. 코딩하는곰의 다음 포스팅에서는 ‘static과 메모리 누수의 관계’에 대해 더 자세히 다룰 예정입니다. 궁금한 점이 있으면 댓글로 남겨주세요! 여러분의 성장을 응원합니다. 감사합니다!
📌 영양제 선택이 어려울 때 참고하면 좋은, 코큐텐골드를 참고해보세요.
