1. 생성자란 ? ?
▶ 생성자
- 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
-인스턴스 초기화란 인스턴스 변수에 적절한 값을 저장하는 것이다.
- 인스턴스 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용
- 몇가지 조건을 제외하고는 메서드와 같다.
- 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
(지금까지 생성자를 따로안해준이유는 기본 생성자 덕분 밑에 나옵니다.)
※ Card c = new Card(); 을 하면 일어나는 일
(1) 연사자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다.
(2) 생성자 Card()가 호출되어 수행된다.
(3) 연산자 new의 결과로, 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장 된다.
▶ 생성자의 조건
- 생성자의 이름은 클래스의 이름과 같아야 한다.
- 생성자는 리턴값이 없다. (하지만 void를 쓰지 않는다.)
ex)
클래스이름(타입 변수명, 타입 변수명, ...) {
// 인스턴스 생성시 수행될 코드
// 주로 인스턴스 변수의 초기화 코드를 적는다.
}
2. 기본 생성자란?
▶ 기본 생성자
- 매개변수가 없는 생성자
- 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.
(생성자가 하나라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.)
클래스이름() {
Card() { } // 컴파일러에 의해 추가된 Card클래스의 기본 생성자. 내용이 없다.
}
"모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다. "
위의 코드를 보면 Data1은 생성자가 하나도 없기 때문에 컴파일러가 기본 생성자를 만들어주지만, Data2는 생성자가 존재하기 때문에 기본 생성자를 만들어주지 않아서 없는 생성자라는 오류가 나온다. 이를 해결하기 위해서는 매개변수를 입력한 new Data2(10);을 해주던지 기본생상자은 Data2() {} 를 따로 만들어 줘야 한다.
3. 매개변수가 있는 생성자
다음과 같이 매개변수를 넣어주면 손쉽게 초기화 할 수 있다.
4. 생성자에서 다른 생성자 호출하기 this()
- 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용
다른 생성자 호출은 생성자의 첫 문장에서만 가능 (덮혀 씌어지는 것을 방지)
Book클래스의 참조변수 b1과 b2를 비교해보면, b1은 기본 초기화 값으로 초기화 된것을 확인 할 수 있고, b2는 생산자 값을 넣어줘서 초기화 된 것을 확인 가능하다.
5. 참조변수 this
- 인스턴스 자신을 가리키는 참조변수이다. 인스턴스 주소가 저장되어있다.
생산자인 this()와는 다른 것을 확인하자.
위의 예제 생성자는 매개변수 이름과 즉, 지역변수이름과 인스턴스 변수의 이름이 달라서 문제될 것이 없지만, 둘이 같아질 경우에는 다음과 같이 해주면
매개변수와 인스턴스변수의 구별을 확실하게 해줄 수 있다.
6. 생성자를 이용한 인스턴스의 복사
위 코드를 보면 인스턴스의 복사를 위한 생성자를 확인 할 수 있다.
복사가 잘 됐는지 확인하기 위하여 b2의 인스턴스변수 중 색을 바꿔 출력해보았다.
독립적으로 메모리공간을 할당이 이루어 졌다.
'Foundation > - Java' 카테고리의 다른 글
추상클래스, 인터페이스, 내부클래스 (0) | 2017.08.15 |
---|---|
제어자(modifier) (0) | 2017.08.04 |
변수와 메서드 (0) | 2017.07.26 |
객체지향언어란(클래스, 객체) (0) | 2017.07.26 |
배열(array), String배열, 다차원배열 (1) | 2017.07.21 |