Java 인스턴스 생성
클래스의 인스턴스를 얻다. 또는 클래스의 인스턴스를 생성하다.
■ Java는 객체지향 언어로서 기본적으로 class 단위로 사용된다.
■ 여기서 class는 객체를 생성하기 위한 설계도 라고 이해하면 쉽다.
■ class를 메모리에 할당하면 객체, 즉 인스턴스가 생성된다.
■ 따라서 클래스의인스턴스를 생성하다
또는인스턴스 얻다
라는 말은 class를 메모리에 할당 한다는 의미이다.
■ 인스턴스와 객체를 같은 의미도 해석하는 것이 맞다.
/**
* 객체를 생성하기 위한 설계도
*/
public class ExampleClass {
}
public class Main {
public static void main(String[] args) {
// ExampleClass 클래스를 메모리에 할당하는 방법 : new 연산자를 사용하여 ExampleClass의 기본 생성자를 호출한다.
new ExampleClass();
/**
* 위와 같이 ExampleClass 클래스의 인스턴스(객체)를 생성만 하면 다시 접근할 수 없다.
* 결국 가비지(사용되지 않는 메모리)가 되어 가비지 컬렉터에 의해 소멸된다.
* 그래서 아래와 같이 ExampleClass 타입의 example 변수를 선언하여 ExampleClass 클래스의 인스턴스(객체)를 참조하게 한다.
*/
ExampleClass example = new ExampleClass();
}
}
클래스의 인스턴스를 생성하는 방법
1. new 연산자
Example example = new Example();
2. 리플렉션을 통한 인스턴스 생성
Class<Example> clazz = Example.class;
// Class.newInstance() 사용 : Java 9 버전 이후에는 deprecated 되었다.
Example example = clazz.newInstance();
// constructor.newInstance() 사용 : constructor는 public 접근 수준의 생성자만 가져온다.
Constructor<Example> constructor = clazz.getConstructor();
Example example = constructor.newInstance();
// DeclaredConstructor.newInstance() 사용 : DeclaredConstructor는 모든 접근 수준의 생성자를 가져올 수 있다.
Constructor<ExampleClass> constructor = clazz.getDeclaredConstructor();
ExampleClass instance = constructor.newInstance();
3. Clone을 통한 인스턴스 생성
- Cloneable 인터페이스를 구현한 후 clone() 메서드를 오버라이드 하여 인스턴스를 생성할 수 있다.
public class Example implements Cloneable {
private String name;
private int age;
@Override
public Example clone() {
try {
return (Example) super.clone();;
} catch (CloneNotSupportedException e) {
throw new AssertionError(); // Can never happen
}
}
}
public class Main {
public static void main(String[] args) {
Example oriExample = new Example();
Example clonedExample = oriExample.clone(); // Example 객체 복제
System.out.println(oriExample == clonedExample); // false, 다른 객체임
System.out.println(oriExample.getClass() == clonedExample.getClass()); // true, 같은 클래스 타입임
}
}
댓글남기기