IT 개발노트
생성자란? 본문
1. 생성자
1.1 생성자란?
: 생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다.
생성자 역시 메서드처럼 클래스 내에 선언되며, 구조도 메서드와 유사하지만 리턴값이 없다는 점이 다르다.
* 생성자 앞에 리턴값이 없음을 뜻하는 void를 사용하지는 않고, 아무것도 적지 않는다.
* 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자가 존재할 수 있다.
* 모든 클래스에는 하나이상의 생성자가 있어야한다.
1.2 생성자의 조건
- 생성자의 이름은 클래스의 이름과 같아야 한다.
- 생성자는 리턴 값이 없다.
* 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다.
예시 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package sungju.Java.ConstructorTest; public class ConstructorTest { public static void main(String[] args) { Data1 d1 = new Data1(); Data2 d2 = new Data2(); // compile error발생 } class Data1 { int value; } class Data2 { int value; Data2(int x) { // 매개변수가 있는 생성자 value = x; } } } |
설명
예시 1을 컴파일 하면 Data2에서 Data2()라는 생성자를 찾을 수 없다는 내용의 에러메시지인데, Data2에 생성자 Data2()가 정의되어 있지 않기 때문에 에러가 발생한 것이다. |
1.3 생성자에서 다른 생성자 호출하기
: 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능하다.
1.4 생성자에서 다른 생성자 호출하는 조건
- 생성자의 이름으로 클래스대신 this를 사용한다.
- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
예시 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package sungju.Java.ConstructorTest; public class ConstructorTest { public static void main(String[] args) { Car c1 = new Car(); Car c2 = new Car("blue"); System.out.println("c1의 color = " + c1.color + ", gearTpye = " + c1.gearType + ", door = " + c1.door); System.out.println("c2의 color = " + c2.color + ", gearTpye = " + c2.gearType + ", door = " + c2.door); } static class Car { String color; // 색상 String gearType; // 변속기 종류 int door; // 문의 개수 Car() { this("white", "auto", 4); //Car(String color, String gearType, int door)를 호출 } Car(String color) { this(color, "auto", 4); } Car(String color, String gearType, int door) { this.color = color; this.gearType = gearType; this.door = door; } } } |
* 생성자의 매개변수로 선언된 변수의 이름이 color로 인스턴스변수 color와 같을 경우에는 이름만으로는 두 변수가 서로 구별이 안된다.
이런 경우에는 인스턴스변수 앞에 'this'를 사용하면 된다.
-> this.color는 인스턴스변수이고, color는 생성자의 매개변수로 정의된 지역변수로 서로 구별이 가능하다.
* this :인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다
모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다.
* this(), this(매개변수) : 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용
'기초튼튼 > JAVA' 카테고리의 다른 글
static의 이해 (0) | 2019.01.23 |
---|---|
변수의 초기화 (0) | 2019.01.22 |
오버로딩이란? (0) | 2019.01.19 |
변수의 종류와 특징 (0) | 2019.01.18 |
객체지향의 등장 배경과 이해 (0) | 2019.01.18 |