JAVA new 연산자

박성호·2024년 3월 11일

new 연산자 알아보기

자바에서 new 연산자는 클래스의 인스턴스를 생성하기 위해 사용됩니다. 이번 글에서는 평소 자주 쓰지만 자세히 모를 수 있는 new 연산자의 작동 방식을 간단한 예제와 함께 살펴보겠습니다.

1. new 연산자의 역할

객체 생성: new 연산자를 통해 클래스의 인스턴스가 힙(Heap) 메모리 영역에 생성됩니다.
메모리 주소 반환: 생성된 객체의 참조(메모리 주소)가 반환되어, 참조 변수가 이 주소를 가리키게 됩니다.
생성자 호출: 마지막으로 생성자를 실행하여, 객체의 초기화 작업을 수행합니다.

2. 리터럴과의 차이

리터럴(literal): 자바에서 문자열, 정수, 실수 등을 직접 표기하는 방식 (예: "Hello", 10, 3.14)
new를 통한 객체 생성: 동일한 값이라도 new로 생성된 객체는 각각 메모리 주소가 달라, 서로 다른 객체로 취급됩니다.
예를 들어, 문자열 "Hello"를 리터럴로 선언하면 메모리 상의 String Pool에서 관리되어 중복을 최소화하지만, new String("Hello")를 통해 생성한 객체는 Pool과 별개로 힙에 새로 할당됩니다.

3. 예제 코드

// 클래스 정의
class Car {
    String brand;
    String model;

    // 생성자 정의
    public Car(String brand, String model) {
        this.brand = brand;
        this.model = model;
    }

    // 메서드 정의
    public void displayInfo() {
        System.out.println("Brand: " + brand);
        System.out.println("Model: " + model);
    }
}

// "new" 키워드를 사용하여 객체 생성
Car myCar = new Car("Toyota", "Corolla");

// 객체 메서드 호출
myCar.displayInfo();  
// 출력:
// Brand: Toyota
// Model: Corolla

위 예제에서 Car 클래스는 brand와 model 필드를 가지고, 생성자를 통해 초기화하도록 설계되었습니다.

new Car("Toyota", "Corolla") 구문을 만나면, 힙 메모리에 Car 객체가 생성되고, 그 메모리 주소를 myCar 변수가 참조하게 됩니다.
이후 myCar.displayInfo()를 호출하면, Car 클래스 내부에 정의된 displayInfo() 메서드가 실행되어 차량 정보를 출력합니다.

4. 요약

new 연산자는 자바에서 객체 생성을 담당하는 핵심 키워드입니다.
힙 메모리에 새로운 객체 공간을 확보하고, 참조 주소를 반환한 뒤, 생성자를 통해 객체를 초기화합니다.
리터럴과 달리, new로 생성된 객체는 같은 값이라도 서로 다른 메모리 공간을 차지하므로, 별개의 객체로 간주됩니다.

결론:

자바에서 new 연산자는 객체지향 프로그래밍의 핵심 개념인 “인스턴스 생성” 과정을 담당하며, 인스턴스가 만들어진 뒤에는 생성자를 이용해 객체의 초기 상태를 설정할 수 있습니다. 이러한 과정을 이해하면, 메모리 구조와 객체 지향 프로그래밍 방식을 좀 더 깊이 있게 접근할 수 있습니다.

profile
꾸준히 성장하는 개발자

0개의 댓글