자바에서는 자기 자신 클래스 안에서 자기 클래스 이름으로 객체를 생성하는 것이 완전히 가능. :
public class Example {
public static void main(String[] args) {
Example obj = new Example(); // 자기 자신 클래스의 객체 생성
obj.sayHi();
}
public void sayHi() {
System.out.println("Hi!");
}
}
이는 매우 일반적인 패턴
💡 왜 자기 자신의 클래스를 생성할 수 있을까?
자바에서 클래스는 틀(blueprint)이다. 이 틀을 이용해 객체(실체)를 만들어서 사용. 그 틀을 사용하는 위치가 그 틀 내부든 외부든 상관없다.
Example obj = new Example();
는 "Example이라는 틀을 이용해서 obj라는 인스턴스를 하나 만든다"는 의미예요.- 이건 클래스 내부든 외부든 어디서든 가능합니다.
⚠️ 다만 재귀적으로 계속 생성하면?
public class RecursiveExample {
public RecursiveExample() {
RecursiveExample obj = new RecursiveExample(); // 생성자 안에서 자기자신 또 생성!
}
public static void main(String[] args) {
RecursiveExample obj = new RecursiveExample(); // 여기서 시작
}
}
이건 StackOverflowError가 발생.
왜냐면 생성자가 자기 자신을 계속 호출하니까 무한 루프에 빠지게됨.
✅ 그래서 정리하자면
상황 | 가능 여부 | 이유 |
---|---|---|
클래스 안에서 new 클래스명() 으로 자기 객체 생성 |
✅ 가능 | 일반적인 사용 |
생성자 안에서 자기 자신을 계속 생성 (new 클래스명() 반복) |
❌ 불가 | StackOverflowError 발생 |
'Java' 카테고리의 다른 글
[Java] Java 키워드 정리 (0) | 2025.04.08 |
---|---|
[Java] static 키워드의 메모리 구조, 사용 시기, 고전적 관점 vs 현대적 관점 (0) | 2025.04.08 |
[Java] 자바에서 main() 메서드 안에서 다른 메서드 호출 (0) | 2025.04.06 |
[Java] Composition vs Inheritance — 언제 써야 하나? (0) | 2025.04.02 |
[Java] Java에서 배열 생성과 객체 생성의 차이 정리 (0) | 2025.04.02 |
댓글