● 자바 객체 생성
앞에서 정리했듯이 class는 객체를 만들기 위한 설계도이다.
즉 클래스에서 정의한 변수와 메서들 사용하기 위해선 객체를 생성해줘야 한다.
우선 배열에서와 비슷한 느낌으로 객체를 가리킬 레퍼런스 변수를 먼저 선언해준다. 레퍼런스 변수는 해당 클래스를 타입으로 만들어 준다.
앞에서 만든 Circle 클래스를 그대로 사용한다 하면 아래와 같이 레퍼런스 변수를 선언한다.

이 선언으로 객체에대한 주소를 가지는 변수가 만들어졌고 null로 초기화된다.
그다음 new 연사자를 이용해 객체를 생성해 준다. 코드는 아래와 같다.

new Circle() 코드로 Circle에 대한 객체가 하나 생성되고 그 주소가 pizza에 저장된다.
class를 선언할 때 생성자에 아무 코드도 적지 않았기 때문에 필드들이 초기화되지 않은 상태로 객체가 만들어진다.
Circle클래스에서 멤버변수와 메서드를 모두 public으로 선언했기 때문에 객체에서 모두 접근하여 아래와 같이 사용할 수 있다.

하지만 보통 class의 멤버 변수는 private으로 선언하며 get(), set() 메서드를 통해 접근한다. 뒤에 this레퍼런스 설명에서 자세히 정리하겠다.
● 자바 생성자
앞에서 간단히 설명했듯이 생성자는 객체가 생성될 때 객체의 초기화를 위해 생성되는 클래스와 이름이 같은 메소드이다.
생성자는 객체가 생성되는 순간 자동으로 호출된다.
생성자 특징 :
생성자 이름은 클래스 이름과 같다.
생성자는 여러 개 작성할 수 있다.(오버로딩)
생성자는 new를 통해 객체를 생성할 때 한 번만 호출된다.
생성자에 리턴타입을 지정할 수 없다.
기본생성자 : 매개변수와 실행코드 없는 생성자
클래스에 생성자가 하나도 없는 경우 기본생성자가 자동으로 생성된다.
주의할 점 = 생성자가 있는 경우 기본 생성자가 생성되지 않는다. 클래스에 매개변수가 있는 생성자만 있는경우 기본 생성자를 자동으로 생성해주지 않기 때문에 매개변수가 없는 객체를 만들 경우 기본생성자를 직접 선언해줘야 한다.
● this 레퍼런스
this키워드는 객체 자기 자신을 가리키는 레퍼런스이다.
간단히 멤버변수와 레퍼런스 변수의 이름이 같을 때 멤버 변수에 붙여줘 둘을 구별할 때 사용된다.
이 외에도 메소드가 객체 자신의 레퍼런스를 리턴 할 때 this를 리턴한다.
this() : 생성자 내에서 다른 생성자 호출 할때 사용한다.
생성자 코드 내에서만 호출 가능, 같은 클래스 내 다른 생성자만 호출가능, 생성자 첫 문장에 와야 함



Book 클래스 코드를 보면 기본 생성자가 호출될 경우 매개변수가 empty값을 매개변수로 매개변수가 2개인 생성자를 한번 더 호출한다.
매개변수가 2개인 생성자는 받아온 두 개의 매개변수를 멤버변수에 저장한다.
main함수를 보면 littleprince 객체를 생성해 매개변수가 2개인 생성자를 호출하였고
empty 객체를 생성해 매개변수가 없는 생성자를 호출하였다. 그리곤 this()를 통해 "empty"값을 매개변수로 매개변수 2개인 생성자가 다시 호출되어 멤버 변수에 empty를 저장하였다. 그 후 "생성자 호출" 을 출력하였다.
littleprince와 empty는 클래스만 같은 서로 다른 객체이다. 클래스는 설계도 즉 틀일 뿐이기 때문에 두 객체는 전혀 다른 공간을 사용한다.
'java' 카테고리의 다른 글
| [java] 필요 개념 정리 hash map (0) | 2023.09.19 |
|---|---|
| [자바] 메소드의 활용 (0) | 2023.04.04 |
| [자바] 객체배열 (0) | 2023.03.27 |
| [java] 배열 (0) | 2023.03.13 |
| [java] 자바 클래스와 객체 (0) | 2022.08.31 |