자바에서 new 키워드란? 객체 생성의 시작점!
자바에서 객체를 생성할 때 꼭 등장하는 new 키워드, 객체 지향 언어인 자바에서 new는 매우 중요한 역할을 합니다.
- new 키워드란?
new 키워드는 자바에서 새로운 객체를 생성할 때 사용하는 연산자 입니다. new를 사용하면 프로그램이 메모리에 새로운 공간을 할당하여 객체를 만들고, 해당 객체의 참조(주소)를 반환합니다. 이를 통해 객체가 초기화되고 프로그램에서 사용될 수 있게 됩니다.
String str = new String("Hello, World!");
Person person = new Person(); // Person 클래스의 객체 생성
위 코드에서 new String("Hello, World!")와 new Person()은 각각 String 객체와 Person 객체를 생성합니다. new 키워드가 없었다면 객체를 생성할 방법이 없기 때문에, 클래스의 인스턴스를 만들려면 new가 필수적입니다.
* 인스턴스: 특정 클래스를 사용해 생성된 객체
- new 키워드의 주요 역할
- 객체 생성: new는 지정한 클래스의 객체를 힙 메모리에 생성합니다. 이는 프로그램에서 사용 가능한 객체를 만들어주는 첫 단계입니다.
- 생성자 호출: 객체가 생성되면 생성자(Constructor)가 호출되어 초기화 작업을 수행합니다. 클래스마다 하나 이상의 생성자를 정의할 수 있는데, new 키워드는 해당 클래스의 생성자를 찾아 호출합니다.
- 참조 반환: 생성된 객체의 메모리 주소를 반환하여, 변수에 할당할 수 있게 합니다. 이렇게 참조 주소를 통해 우리가 만든 객체에 접근하고 사용할 수 있게 됩니다.
- 객체 생성 기본 예시
public class Person {
String name;
public Person(String name) { // 생성자 정의
this.name = name;
}
public void sayHello() {
System.out.println("Hello, " + name);
}
}
// Main 클래스에서 Person 객체 생성
public class Main {
public static void main(String[] args) {
Person person = new Person("Alice"); // new로 Person 객체 생성
person.sayHello(); // "Hello, Alice" 출력
}
}
위 예제에서 new Person("Alice")는 다음을 수행합니다:
- 새로운 Person 객체를 힙 메모리에 생성하고,
- 생성자 Person(String name)을 호출하여 name 속성을 "Alice"로 초기화합니다.
- 생성된 객체의 참조 주소를 person 변수에 저장하여 나중에 sayHello()와 같은 메서드를 호출할 수 있게 합니다.
- new 없이 객체를 생성할 수는 없을까?
일반적으로 자바에서 객체를 생성할 때 new는 필수적이지만, 예외적으로 리터럴(literal)을 사용하는 경우 new 없이도 객체 생성이 가능합니다. 예를 들어 String 객체는 문자열(String Pool)을 사용하여 new 없이도 간단히 생성할 수 있습니다.
String str1 = "Hello, World!";
String str2 = "Hello, World!";
위 코드에서 str1과 str2는 동일한 "Hello, World!"라는 문자열을 참조합니다. 이는 자바가 **문자열 풀(String Pool)**이라는 메모리 영역에 동일한 문자열을 한 번만 저장하고, 이후 같은 문자열이 등장할 경우 해당 주소를 재사용하기 때문입니다.
반면, new String("Hello, World!")와 같이 new로 문자열 객체를 생성하면 문자열 풀과 별도로 새로운 객체가 생성됩니다.
- new와 문자열 리터럴의 차이
String str1 = "Hello, World!";
String str2 = "Hello, World!";
String str3 = new String("Hello, World!");
System.out.println(str1 == str2); // true, 같은 문자열 풀을 참조
System.out.println(str1 == str3); // false, 새로운 객체 참조
이 예제에서 str1과 str2는 같은 문자열 풀의 "Hello, World!" 객체를 참조하므로 == 비교 시 true가 출력됩니다. 그러나 str3는 new 키워드를 사용해 생성된 별도의 객체를 참조하므로 == 비교 결과가 false가 됩니다.
- new의 필요성
자바는 객체 지향 언어이기 때문에 대부분의 데이터와 기능이 객체 형태로 관리됩니다. 기본 데이터 타입(int, double 등)을 제외한 모든 데이터는 객체로 표현되며, 클래스의 인스턴스를 생성하려면 new 키워드를 사용해야 합니다.- 독립적인 객체 생성: new로 생성된 객체는 각각 독립된 메모리 공간을 가지므로, 여러 개의 객체를 동시에 사용하거나 다르게 초기화할 수 있습니다.
- 다양한 객체 생성: 하나의 클래스를 기반으로 여러 객체를 생성하고, 각 객체가 독립적인 역할을 수행할 수 있습니다.
Person person1 = new Person("Alice");
Person person2 = new Person("Bob");
person1.sayHello(); // "Hello, Alice" 출력
person2.sayHello(); // "Hello, Bob" 출력
- 생성자(Constructor)와 new의 관계
new 키워드는 객체 생성 시 생성자를 호출하여 객체의 초기화 작업을 수행합니다. 생성자는 객체가 생성될 때 실행되는 특별한 메서드로, 객체의 초기 상태를 설정하는 역할을 합니다. 클래스에 생성자를 정의하지 않으면 컴파일러가 기본 생성자를 자동으로 추가하지만, 특정 파라미터를 받는 생성자를 정의할 수도 있습니다.
public class Car {
String model;
int year;
public Car(String model, int year) {
this.model = model;
this.year = year;
}
}
이제 Car 객체를 생성할 때 new Car("Tesla", 2023);처럼 생성자에 매개변수를 전달하여 초기화할 수 있습니다.
- 정리
자바에서 new 키워드는 객체를 생성하고 초기화하는 데 중요한 역할을 합니다.- 객체 생성: new는 메모리에 새로운 객체를 생성하고, 생성자를 호출하여 초기화합니다.
- 참조 반환: 생성된 객체의 주소를 반환하여, 변수를 통해 객체에 접근하고 사용할 수 있게 합니다.
- 문자열 리터럴 예외: new 없이도 문자열 리터럴을 통해 문자열 객체를 생성할 수 있지만, new를 사용하면 항상 새로운 객체가 생성됩니다.
객체 지향 프로그래밍에서 객체 생성은 매우 중요한 작업이며, 자바의 new 키워드는 이를 가능하게 해주는 핵심적인 요소입니다.
'IT개발및프로그래밍 > 자바' 카테고리의 다른 글
[자바 기초 #4] 객체지향 프로그래밍(OOP) 기초 - 클래스와 객체 (1) | 2024.11.17 |
---|---|
리터럴(Literal)이란? 프로그래밍에서 리터럴의 역할과 종류, 그리고 값과의 차이점까지! (0) | 2024.11.11 |
[자바 기초 #3] 배열과 문자열 - 데이터 관리의 기본 (0) | 2024.11.11 |
[자바 기초 #2] 제어문과 반복문 - 프로그램의 흐름 제어하기 (1) | 2024.11.08 |
[자바 기초 #1] 자바로 시작하는 프로그래밍 기초 (1) | 2024.11.08 |