본문 바로가기
기록/Java&Spring&Eclipse

[Java] 자바 cannot make a static reference to the non-static field 오류

by 자임 2022. 10. 12.

1. 원인

참조할 수 없는 이유는 컴파일 순서에서 찾을 수 있다. 다른 멤버보다 static 멤버가 먼저 컴파일되기 때문에, static 멤버의 컴파일 시점에서는 static이 아닌 메서드나 필드는 정의되지 않았기 때문이다.

 


2. 해결방법

- 모든 메서드나 필드를 static 멤버로 바꾸기

- 클래스의 객체를 직접 생성해서(Abc abc = new Abc();) 접근

 

출처: https://wookoa.tistory.com/80

 


3. 추가 궁금증

 

@RequestMapping처럼 url과 연결되는 메서드는 어떻게 static이 아니어도 (객체 생성을 하지 않아도) 웹에서 잘 작동할 수 있을까?

 

=> static이 안 붙은 메서드는 인스턴스 메서드이기 때문에 객체 생성이 필요하다. 그러나 객체 생성을 하지 않았는데도 실행을 시켜보면 웹에서 잘 작동하는 것을 알 수 있다. 어떻게 그럴 수 있을까?
톰캣 내부에서 객체 생성을 해주기 때문이다.

 

접근제어자가 상관 없는 원격 프로그램에서의 호출 -> 실행하고자 하는 메서드에 @RequestMapping을 적어주는 순간 URL과 연결이 되어 이 메서드를 외부에서 호출 가능하게 한 것이나 다름 없다.

출처 : https://jee2memory.tistory.com/m/entry/%EC%8A%A4%ED%94%84%EB%A7%81%EC%9D%98-%EC%A0%95%EC%84%9D-1-1-%EC%9B%B9%EC%9B%90%EA%B2%A9or%EC%84%9C%EB%B2%84%EA%B3%BC-%EC%8A%A4%ED%94%84%EB%A7%81-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0