[Java] "Non-static variable cannot be referenced from a static context" 에러 해결 방법

[Java] "Non-static variable cannot be referenced from a static context" 에러 해결 방법

Java
민호이 민호이 2025. 1. 16. 17:30
목차
  1. 1. 에러 원인: "Non-static variable cannot be referenced from a static context"
  2. 2. 해결 방법
  3. 2.1 인스턴스를 생성하여 변수에 접근하기
  4. 2.2 변수를 static으로 선언하기
  5. 2.3 메서드를 non-static으로 선언하기
  6. 3. static과 non-static의 차이점
  7. 4. 결론

1. 에러 원인: "Non-static variable cannot be referenced from a static context"

Java에서 non-static 변수는 클래스의 인스턴스와 관련이 있습니다. 반면, static 메서드는 클래스 자체와 관련되므로, 특정 인스턴스에 속한 변수를 직접 참조할 수 없습니다. 아래 코드를 예로 들어보겠습니다.

class MyProgram {
int count = 0;
public static void main(String[] args) {
System.out.println(count); // 에러 발생
}
}

위 코드에서는 count가 non-static 변수이기 때문에 static 메서드인 main에서 직접 참조할 수 없어 에러가 발생합니다.


2. 해결 방법

2.1 인스턴스를 생성하여 변수에 접근하기

non-static 변수는 클래스의 인스턴스를 통해 접근해야 합니다.

class MyProgram {
int count = 0;
public static void main(String[] args) {
MyProgram program = new MyProgram();
System.out.println(program.count); // 정상 출력
}
}

2.2 변수를 static으로 선언하기

static 변수는 클래스 레벨에서 공유되므로, static 메서드에서 직접 접근할 수 있습니다.

class MyProgram {
static int count = 0;
public static void main(String[] args) {
System.out.println(count); // 정상 출력
}
}

2.3 메서드를 non-static으로 선언하기

main 메서드를 제외한 다른 메서드가 static일 필요가 없는 경우, 메서드를 non-static으로 선언하여 non-static 변수에 접근할 수 있습니다.

class MyProgram {
int count = 0;
public static void main(String[] args) {
MyProgram program = new MyProgram();
program.printCount();
}
public void printCount() {
System.out.println(count); // 정상 출력
}
}

3. static과 non-static의 차이점

  • static 변수/메서드: 클래스 로드 시 메모리에 올라가며 모든 인스턴스에서 공유됩니다.
  • non-static 변수/메서드: 클래스의 인스턴스 생성 시 메모리에 할당되며 각 인스턴스마다 독립적으로 존재합니다.

4. 결론

"Non-static variable cannot be referenced from a static context" 에러는 static 메서드와 non-static 변수의 차이를 이해하면 쉽게 해결할 수 있습니다. 위에서 소개한 방법 중 상황에 맞는 방법을 선택하여 문제를 해결하세요.

 

저작자표시 비영리 변경금지 (새창열림)
  1. 1. 에러 원인: "Non-static variable cannot be referenced from a static context"
  2. 2. 해결 방법
  3. 2.1 인스턴스를 생성하여 변수에 접근하기
  4. 2.2 변수를 static으로 선언하기
  5. 2.3 메서드를 non-static으로 선언하기
  6. 3. static과 non-static의 차이점
  7. 4. 결론
'Java' 카테고리의 다른 글
  • [Java] Java에서 equals와 hashCode 메서드를 왜 재정의해야 하는가?
  • [Java] i++, ++i 간의 차이 (전위 연산자와 후위 연산자)
  • [Java] JUnit으로 Java 클래스의 private 메서드와 필드를 테스트하는 방법
  • [Java] "java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException" 해결 방법: Java 9/10/11 지
민호이
민호이
민호이
ChungCODE
민호이
전체
오늘
어제
  • Categories (128)
    • 스포츠 (6)
    • 인공지능 (5)
    • 주식 (6)
      • 경제 주식 전망 (5)
      • ETF (9)
    • CSAPP (4)
      • Lab Session (4)
      • Concepts (0)
    • C (19)
    • Java (24)
    • Rust (44)
      • Concepts (27)
      • Libraries (17)
    • PS (2)
    • 국내 소식 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 최대공약수
  • c++
  • 알고리즘
  • 유클리드 호제법
  • 수학
  • C
  • 코드업
  • 최소공배수

최근 댓글

최근 글

반응형
hELLO · Designed By 정상우.v4.2.1
민호이
[Java] "Non-static variable cannot be referenced from a static context" 에러 해결 방법
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.