케네스로그

[Java] 객체의 생성, 인스턴스화, 생성자, this 키워드 본문

Dev/Java

[Java] 객체의 생성, 인스턴스화, 생성자, this 키워드

kenasdev 2022. 2. 9. 06:30
반응형

객체의 생성

new 키워드의 이해

new 키워드는 클래스의 인스턴스를 생성하기위해 사용된다.

String s = new String();
String name = "kenneth";
Person p = new Person();

인스턴스화(instantiate)는 새로운 객체를 위해 힙 영역의 메모리를 할당하고, 변수에 할당된 메모리주소(reference)를 반환한다.

  • 런타임에 새로운 객체를 위해 힙 영역의 메모리를 할당한다
  • 객체의 생성자가 실행된다
  • 새로운 객체를 위해 힙 영역에 할당된 메모리 주소는 스택 영역의 변수에 저장된다.

 

new키워드를 사용하여 클래스의 객체를 생성한다.

String s = new String();
  1. 메모리가 할당되며, 할당된 메모리의 주소(reference)가 반환된다.
  2. 필드가 기본값으로 초기화된다.
  3. super 또는 this를 포함한 생성자가 호출된다.

 

 

생성자의 정의

public class Car{
	String owner;

	public Car() {} // default constructor

	public Car(String name) {
		this.owner = name;
	}
}

생성자(constructor)는 아래와 같은 특징을 지닌다.

  • class의 이름과 동일한 메소드 형식이지만, 리턴값이 없다.
  • 객체가 선언되어 초기화되고 메모리에 할당될때 실행된다
  • 오버로드(overload)는 가능하지만, 오버라이드(override)는 불가
  • 생성자를 정의하지 않으면, 컴파일러가 자동으로 default constructor를 생성
  • 메소드처럼 생겼지만, 메소드는 아니다.

 

 

this 키워드

this는 인스턴스(객체) 자신을 참조한다. this 키워드를 통해 자신의 변수와 메소드에 접근할 수 있다. 또한, this를 통해 클래스 멤버변수와 메소드 내의 파라미터를 구분할 수 있게 된다.

this()는 해당 클래스 생성자를 호출하여, 생성자를 재사용하는데에 사용될 수 있다.(생성자 체이닝)

public class Test {
	private int number;
	private String name;

	public Test() {
		this.name = "default";
	}

	public Test() {
		this(); // name="default"
		this.number = 3;
		//this(); 이것은 컴파일에러
	}
}
반응형

'Dev > Java' 카테고리의 다른 글

[Java] 메소드 디스패치  (0) 2022.02.16
[Java] 상속, super()  (1) 2022.02.15
[Java] 메소드, 접근제어자  (0) 2022.02.08
[Java] 클래스  (0) 2022.02.08
[Java] 관계 연산자, 균등 연산자  (0) 2022.02.05