본문 바로가기
Java

[Java] 자바 클래스 자기참조 개념 정리

by clolee 2025. 4. 6.

자바에서는 자기 자신 클래스 안에서 자기 클래스 이름으로 객체를 생성하는 것이 완전히 가능. :


      
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 발생

댓글