1. 원인
참조할 수 없는 이유는 컴파일 순서에서 찾을 수 있다. 다른 멤버보다 static 멤버가 먼저 컴파일되기 때문에, static 멤버의 컴파일 시점에서는 static이 아닌 메서드나 필드는 정의되지 않았기 때문이다.
2. 해결방법
- 모든 메서드나 필드를 static 멤버로 바꾸기
- 클래스의 객체를 직접 생성해서(Abc abc = new Abc();) 접근
출처: https://wookoa.tistory.com/80
3. 추가 궁금증
@RequestMapping처럼 url과 연결되는 메서드는 어떻게 static이 아니어도 (객체 생성을 하지 않아도) 웹에서 잘 작동할 수 있을까?
=> static이 안 붙은 메서드는 인스턴스 메서드이기 때문에 객체 생성이 필요하다. 그러나 객체 생성을 하지 않았는데도 실행을 시켜보면 웹에서 잘 작동하는 것을 알 수 있다. 어떻게 그럴 수 있을까?
톰캣 내부에서 객체 생성을 해주기 때문이다.
접근제어자가 상관 없는 원격 프로그램에서의 호출 -> 실행하고자 하는 메서드에 @RequestMapping을 적어주는 순간 URL과 연결이 되어 이 메서드를 외부에서 호출 가능하게 한 것이나 다름 없다.
'기록 > Java&Spring&Eclipse' 카테고리의 다른 글
[Java/Spring] 스프링 어노테이션 @RestController, @Value (0) | 2022.10.27 |
---|---|
[Java] 마지막 쉼표 없이 변수 사이사이에 쉼표 넣어서 String 만들기 (0) | 2022.10.19 |
[Java] 자바 Map 차이점 (0) | 2022.10.11 |
[Java/Spring] 자바 sql 오류 java.sql.SQLSyntaxErrorException: Incorrect number of arguments 해결 방법 (0) | 2022.10.07 |
[Java] 자바 열거 enum 활용 (0) | 2022.09.30 |