어제 오늘 내일

[Java] 자바 new 없이 객체 생성 본문

IT/Java

[Java] 자바 new 없이 객체 생성

hi.anna 2025. 12. 15. 07:10

 

Java에서 객체를 만들 때 가장 흔히 사용하는 방법은 new 연산자를 이용하는 것입니다. 하지만 모든 객체 생성이 new를 통해서만 이루어지는 것은 아닙니다. 상황에 따라 new 없이도 객체를 만들 수 있는 다양한 방식이 존재합니다. 이 글에서는 대표적인 객체 생성 방법들을 이해하기 쉽게 정리합니다.

 

1. 생성자 대신 사용하는 정적 메서드 (Factory Method)

많은 라이브러리나 표준 API에서는 객체 생성을 위해 new를 직접 사용하지 않도록 정적 메서드를 제공합니다.

예제:

LocalDate date = LocalDate.now();

설명

  • new LocalDate()를 직접 호출하지 않음
  • now()와 같은 팩토리 메서드가 내부에서 객체를 생성하여 반환

또 다른 예:

String str = String.valueOf(123);

 

2. 리플렉션(Reflection)을 이용한 객체 생성

클래스 이름만 알고 있어도 리플렉션을 통해 객체를 만들 수 있습니다.

Class<?> clazz = Class.forName("com.example.Person");
Object obj = clazz.getDeclaredConstructor().newInstance();

설명

  • 클래스 이름을 문자열로 전달해 Class 객체를 얻음
  • newInstance()로 객체를 동적으로 생성
  • 프레임워크(Spring 등)에서 이런 방식이 많이 활용됨

 

3. 직렬화(Serialization) 후 역직렬화(Deserialization)

파일이나 네트워크에서 읽어 온 데이터를 바탕으로 객체를 생성하는 방식입니다.

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.dat"));
Person p = (Person) ois.readObject();

설명

  • 파일에 저장된 객체 데이터를 읽으면 새로운 객체가 만들어짐
  • 이 과정에서는 생성자가 호출되지 않는 것이 특징

 

4. 객체 복제를 통한 생성 (clone)

객체의 복사본을 만들어 새로운 객체를 생성할 수도 있습니다.

Person copy = original.clone();

설명

  • clone()은 기존 객체의 상태를 그대로 복사한 새로운 객체를 반환
  • Cloneable 인터페이스 구현 필요

 

5. 컬렉션이나 스트림에서 자동 생성되는 경우

컬렉션이나 스트림 API는 내부적으로 객체를 생성해 반환하기도 합니다.

예제:

List<String> list = List.of("A", "B", "C");

설명

  • List.of()는 내부적으로 적절한 List 구현 객체를 생성해 반환
  • 개발자는 직접 new ArrayList() 등을 호출할 필요 없음

 

6. 정리

Java에서는 new 연산자가 객체 생성의 기본이지만, API나 패턴, 시스템 동작 방식에 따라 다양한 방식으로 객체가 만들어질 수 있습니다.
정적 팩토리 메서드, 리플렉션, 직렬화, 복제 등은 모두 new 없이 객체를 생성하는 대표적 방법으로, 상황에 따라 더 유연하고 사용하기 편리한 방식이 될 수 있습니다.

 

 

반응형
Comments