class A {
class B { }
}
A a = new A();
A.B b1 = a.new B();
A.B b2 = a.new B();
클래스 A에 대한 정보가 static에 올라갈 때
클래스 B에 대한 정보도 그 안에 올라가나?
a가 가리키고 있는 객체는 힙에 저장되어 있을 텐데
그 객체 안에 b1, b2가 가리키는 객체가 있는 거임?
class A {
class B { }
}
A a = new A();
A.B b1 = a.new B();
A.B b2 = a.new B();
클래스 A에 대한 정보가 static에 올라갈 때
클래스 B에 대한 정보도 그 안에 올라가나?
a가 가리키고 있는 객체는 힙에 저장되어 있을 텐데
그 객체 안에 b1, b2가 가리키는 객체가 있는 거임?
C에서는 그냥 밖에다 class선언 하는 거랑 다른게 없던데 - dc App
struct 이야기하는거 ㅇㅇ C++에서도 클래스 정보는 메타데이터에 저장될 거 같은데 - dc App
그냥 A.B라는 객체인 거임
c#기준
저게 도대체 어느나라 코드냐? A.B, a.B라고? 말도 안 되는 코드를 가지고 이게 뭐냐 하면 무슨 답변을 해야함?
자바라우씨샵에서ㅜ저거 됨
저게 왜 말이 안됨
nested class는 싫어하는 사람도 많지만 어쨎든 여러 언어에서 쓰이는 방식임
미안 자바랑 씨샵을 해본적이 없어서 몰랐네 C++에서는 저거 틀린거고 A::B가 맞는 표현이라 그걸 생각했어
Nested class는 그냥 클래스 안에 정의(선언)된 클래스임. 내부에 멤버변수가 없는 이상, RTTI 정보를 제외하고는 딱히 메모리 상에서 아우터 클래스의 메모리안에 이너 클래스가 별도로 점유하진 않을 것 같음. 그래서 위 소스코드는 b1, b2는 그냥 클래스 A안에 정의된 클래스 B의 객체일뿐. 그게 클래스 A의 메모리 공간을 점유하는 개념은아님
가장 가까운 개념으로는 namespace
자바에선 B가 A를 알아야하는 경우 그냥 class B가 A를 몰라도되는경우 static class로 선언