본문 바로가기

JAVA

클래스의 구성 멤버(생성자)

반응형

생성자

 

 

생성자(Constructor)는 new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다. 객체 초기화란 필드를 초기화하거나, 메소드를 호출해서 객체를 사용할준비를 하는 것을 말한다. 생성자를 실행시키지 않고는 클래스로부터 객체를 만들수 없다.

new연산자에 의해 생성자가 성공적으로 실행되면 힙(heap) 영역에 객체가 생성되고 객체의 주소가 리턴된다. 리턴된 객체의 주소는 클래스 타입 변수에 저장되어 객체에 접근할 때 이용된다. 만약 생성자가 성공적으로 실행되지 않고 예외(에러)가 발생했다면 객체는 생성되지 않는다.

 

 

 

 

기본 생성자

 

모든 클래스는 생성자가 반드시 존재하며 , 하나 이상을 가질수 있다. 우리가 클래스 내부에 생성자 선언을 생략했다면 컴파일러는 다음과 같이 중괄호 {} 블록 내용이 비어 있는 기본 생성자를 바이트 코드에 자동 추가 시킨다.

 

그렇기 때문에 클래스에 생성자를 선언하지 않아도 다음과 같이 new 연산자 뒤에 기본 생성자를 호출해서 객체를 생성시킬 수 있다.

 

 

 

 

 

생성자는 메소드와 비슷한 모양을 가지고 있으나, 리턴 타입이 없고 클래스 이름과 동일하다. 생성자 블록 내부에는 객체 초기화 코드가 작성되는데, 일반적으로 필드에 초기값을 저장하거나 메소드를 호출하여 객체 사용 전에 필요한 준비를 한다.

 

 

 

 

 

 

매게 변수 선언은 생략할 수도 있고, 여러 개를 선언해도 좋다. 매개 변수는 new연산자로 생성자를 호출할 때 외부의 값을 생성자 블록 내부로 전달하는 역할을 한다. 예를 들어 다음과 같이 Car 생성자를 호출할 때 5개의 의 값을 제공한다고 보자.

 

 

 

3개의 매개값은 String 타입이고 마지막 매게값은 int타입인 것을 볼 수 있다. 

클래스에 생성자가 명시적으로 선언되어 있을 경우에는 반드시 선언된 생성자를 호출해서 객체를 생성해야 한다.

 

다음 예제를 보면 Car클래스에 생성자 선언이 있기 때문에 기본 생성자 Car()를 호출해서 객체를 생성할수 없다

 

Car 생성자의 매개 변수 이름은 각각 company ,model ,color , maxSpeed, speed  이렇게 사용했다 이경우 필드와 매개변수 이름이 동일하기 때문에 생성자 내부에서 해당 필드에 접근할 수 없다.

왜냐 하면 동일한 이름의 매개 변수가 사용 우선순위가 높기 때문이다. 해결 방법은 필드앞에 this 를 붙이면 된다. this 는 객체 자신의 참조인데, 우리가 자신을 "나" 라고 하듯이 객체가 객체 자신을 this 라고 한다.

this.필드 는 this라는 참조 변수로 필드를 사용하는 것과 동일하다.

 

 

객체의 필드는 하나가 아니라 여러 개가 있고, 필드들을 모두 생성자에게 초기화 한다면 생성자의 매개 변수의 수는 객체의 필드 수만큼 선언되어야 한다. 그러나 실제로는 중요한 몇개 필드만 매게 변수를 통해 초기화 되고 나머지 필드들은 필드 선언 시에 초기화 하거나 생성자 내부에서 임의의 값또는 계산된 값으로 초기화 한다. 아니면 객체 생성후에 필드값을 별도로 저장하기도 한다.

 

반응형

'JAVA' 카테고리의 다른 글

클래스의 구성 멤버(return)  (0) 2020.11.11
클래스의 구성 멤버(메소드)  (0) 2020.11.11
클래스의 구성 멤버(필드)  (0) 2020.11.10
객체 생성과 클래스 변수  (0) 2020.11.10
객체와 클래스  (0) 2020.11.10