해결된 질문
작성
·
289
·
수정됨
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
모든 Car instance들이 하나의 engine instance를 참조하게 해보고 싶어
private static Engine engine = new Engine();
이런식으로 Car 클래스 안에 정적 변수를 만들고 engine instance를 참조 하게 만들어 봤는데 'Car.this' cannot be referenced from a static context란 에러가 뜨네요.
생성자에서 안에서는
public Car(String model, int chargeLevel) {
this.model = model;
this.chargeLevel = chargeLevel;
if (engine == null) {
engine = new Engine();
}
}
이런식으로 정적 변수가 engine instance를 참조가 가능한데, 에러가 나는 이유와 생성자안에서는 왜 참조가 가능한지 궁금합니다.
답변 1
2
안녕하세요. Jin Jung 님, 공식 서포터즈 코즈위버입니다.
메서드 내에서의 this와 생성자 안에서의 this 가 조금 다르게 해석되어 그런 차이가 발생합니다.
메서드 내에서의 this는 인스턴스 자신을 의미하나 생성자 안에서는 인스턴스 자신과 클래스 까지 포함하는 의미를 갖습니다. 그래서 static 변수인 engine 에 접근할 수 있습니다. 생성자 안의 this.engine 은 Car.engine 과 동일한 의미를 갖게 됩니다.
그러나 정적 요소에 대해 this 접근은 혼란을 줄 수 있으므로 항상 클래스명으로 접근하여 사용하도록 코드를 작성해주시기 바랍니다.
감사합니다.