inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 중급 1편

내부 클래스의 활용

내부 클래스의 활용 예제 질문

해결된 질문

385

Jin Jung

작성한 질문수 2

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를 참조가 가능한데, 에러가 나는 이유와 생성자안에서는 왜 참조가 가능한지 궁금합니다.

java 객체지향

답변 1

2

나무늘보

안녕하세요. Jin Jung 님, 공식 서포터즈 코즈위버입니다.

메서드 내에서의 this와 생성자 안에서의 this 가 조금 다르게 해석되어 그런 차이가 발생합니다.

메서드 내에서의 this는 인스턴스 자신을 의미하나 생성자 안에서는 인스턴스 자신과 클래스 까지 포함하는 의미를 갖습니다. 그래서 static 변수인 engine 에 접근할 수 있습니다. 생성자 안의 this.engine 은 Car.engine 과 동일한 의미를 갖게 됩니다.

그러나 정적 요소에 대해 this 접근은 혼란을 줄 수 있으므로 항상 클래스명으로 접근하여 사용하도록 코드를 작성해주시기 바랍니다.

감사합니다.

문제와 풀이

0

22

1

섹션 2 퀴즈 9번

0

30

2

강의노트 내용이 이해가 되지 않아서 문의드립니다.

0

46

1

중급1편, 래퍼클래스 문제와풀이2 로또제너레이터 질문

0

66

1

setVlaue질문

0

89

3

안녕하세요 코딩테스트와 병행하고 싶어서 질문드립니다.

0

91

1

findValue의 파라메터까지 래퍼클래스 배열인 이유가 있을까요?

0

72

1

아래 글처럼 toString() 강의부터 화면이 안보여요

0

96

2

TemporalAdjusters의 lastDayOfNextMonth(), lastDayOfNextYear() 메서드 지원 안함

0

83

2

오타 제보도 되나요?

0

88

2

지역 클래스 예제3 지역변수 질문

0

66

2

래퍼클래스 박싱 출력

0

59

1

자바 equals() 메소드에 대한 물리적 동일성, 논리적 동등성 질문

0

104

3

강의록 오타 제보

0

66

2

자바의 기본 클래스들에 관하여

0

69

1

실무에서 중첩(내부) 클래스 사용하나요?

0

79

1

지역 클래스 - 지역 변수 캡처3

0

52

1

12:30 의 newClassGrade 질문이 있습니다.

0

56

1

날짜와 시간 문제풀이가 막히는데

0

97

2

내부 클래스의 바깥 클래스 참조

0

67

1

스트링 풀, new String()

0

105

3

정적 중첩 클래스 사용 이유

0

97

1

status.getCode() 대신 status.code 사용

1

79

1

메서드의 지역변수명과 내부클래스의 멤버메서드에서의 지역변수명의 중복관련

0

74

1