인프런 커뮤니티 질문&답변

kate님의 프로필 이미지
kate

작성한 질문수

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

내부 클래스

내부클래스는 중첩클래스에 속하는것 아닌가요?

작성

·

223

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]


[섹션 7-4 내부클래스] 에서 마지막 정리 부분에서 설명해 주신 "중첩이라는 단어와 내부라는 단어의 의미의 차이" 에서 중첩 을 어떤 다른 것이 내부에 위치하거나 포함되는 구조적 관계, 나의 안에 있지만 내것이 아닌 것을 말한다.

중첩(Nested)은 나의 안에 있지만 내것이 아닌것을 말한다. 단순히 위치만 안에 있는 것이다. 반면에 여기서 의미하는 내부(Inner)는 나의 내부에서 나를 구성하는 요소를 말한다.

라고 말씀하셨는데 이부분이 좀 햇갈려서요!

 

앞서 [섹션 7-1 중첩 클래스, 내부 클래스란?] 강의 파트 에서 가장 처음 설명해 주셨을 때 중첩클래스는 4가지 종류가 있으며 그 안에는 내부 클래스도 포함되어있다 라고 말씀하셨는데

해당 파트의 강의 중간에 중첩과 내부라는 단어에 차이가 있다고 하셔서요.

그렇다면 사실 "내것이 아닌것" 이라는 의미는 단순한 중첩인 순수 nested가 아니라 정적 중첩 즉, static nested에 해당하는것 아닌가요!?

제가 잘못 이해하고 있다면... 처음에 중첩 안에 4가지 종류중 내부 클래스는 제외되어야 하는거 아닌가? 생각이 들었습니다.

 

중첩 클래스는 클래스를 정의하는 위치에 따라  여러가지 분류가 있다.

총 4가지가 있으며, 크게 2가지로 분류된다.

- 중첩 클래스 분류

	1. Static 정적 중첩 클래스

	2. Non-Static 내부 클래스

		1. inner  내부 클래스

		2. local 지역 클래스

		3. annonymous 익명 클래스

중첩 클래스를 정의하는 위치는 변수의 선언 위치와 같다.

이렇게 교안으로도 함께 설명해주셨던 정의가 틀린것이 아닌가 해서요..

죄송하지만 계속 햇갈려서 정확히 해 둬야 할거 같아요! 명쾌한 답변부탁드립니다 ^^

(바쁘시더라도 강의를 직접 찍으신 영한형님께서 직접 답변 부탁드려요.. AI는 가끔제 질문의 요지를 잘 못알아먹고 오해를 불러일으키니..)

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. kate님

중첩이라는 단어의 뉘양스가 참 어려운데요.

앞에서 설명드린 문맥은 인스턴스 관점이라기 보다는 단순히 클래스 안에 다른 클래스가 포함되어(중첩되어)있다 정도로 이해하시면 됩니다 :)

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

kate님의 질문에 대해 답변드립니다.

말씀하신대로, Java에서 ‘중첩 클래스(Nested class)‘는 그 클래스가 다른 클래스 안에 선언되어 있는 경우를 의미합니다. 이러한 중첩 클래스는 위치에 따라 크게 ‘정적 중첩 클래스(Static Nested Class)‘와 ‘내부 클래스(Inner Class)‘로 나뉩니다.

  • 정적 중첩 클래스(Static Nested Class): 클래스 내부에 static 키워드와 함께 선언된 클래스를 말합니다. 이 클래스는 외부 클래스의 인스턴스 변수에 접근할 수 없으며, 사용 방법도 외부 클래스의 인스턴스를 생성하지 않고 직접 접근이 가능합니다. 이로 인해 독립적인 기능을 하며 외부 클래스와 관련된 작업을 수행할 때 사용됩니다.

  • 내부 클래스(Inner Class): 외부 클래스의 멤버처럼 사용되며, 외부 클래스의 멤버 변수에 직접 접근할 수 있는 클래스로, static 키워드 없이 선언됩니다. 내부 클래스는 다시 세 가지로 나눌 수 있습니다:

    1. 일반 내부 클래스(Inner class): 외부 클래스의 멤버 변수처럼 사용되며, 외부 클래스 인스턴스와 연관됩니다.
    2. 지역 클래스(Local class): 메서드 내에서 선언되며, 선언된 영역에서만 사용할 수 있습니다.
    3. 익명 클래스(Anonymous class): 이름 없이 선언과 객체 생성이 동시에 이루어지며, 주로 리스너 구현 등에 사용됩니다.

따라서, ‘중첩 클래스’는 위치에 따라 ‘정적 중첩 클래스’와 ‘내부 클래스’로 구분되며, ‘내부 클래스’는 ‘정적 중첩 클래스’와 다르게 외부 클래스의 인스턴스와 밀접한 관련을 가집니다. 이는 ‘내부 클래스’가 외부 클래스의 멤버 변수와 메서드에 직접 접근할 수 있는 것에서도 나타납니다.

정리하자면, ‘내부 클래스’는 ‘중첩 클래스’의 한 종류임이 분명하며 중첩 클래스 내부에 포함되지만, 그 성격과 사용 방법에 있어 ‘정적 중첩 클래스’와는 차이가 있습니다. 즉, ‘내부 클래스’ 역시 ‘중첩 클래스’에 포함되는 것이 맞으며, 이에 대한 교안 정의에 오류가 있지 않습니다.

혼돈을 느낄 수 있는 부분이 있으나, 이러한 분류와 정의는 Java 프로그래밍 언어에서 클래스를 조직화하고, 코드의 가독성과 유지보수를 높이기 위한 목적으로 사용됩니다.

질문의 핵심을 명확히 이해하기 위해 다시 한번 설명을 추가하자면, ‘내부 클래스(Inner Class)‘는 ‘중첩 클래스(Nested Class)‘의 개념 안에 포함되어 있으멇, 만약 ‘내것이 아닌 것’과 같은 표현에 혼란을 느끼셨다면, 이는 특히 ‘정적 중첩 클래스(Static Nested Class)‘와 다른 ‘내부 클래스’의 특성을 비교 설명하는 과정에서 발생한 것일 수 있습니다.

모든 질문과 답변은 각자의 학습 경험과 배경 지식에 따라 다르게 해석될 수 있으니, 이 점을 고려하여 추가 학습 자료와 함께 이해를 돕는 것이 좋습니다.

감사합니다.

kate님의 프로필 이미지
kate

작성한 질문수

질문하기