9번째 개발일지
안녕하세요 오늘은 9번째 개발일지
생성자 부터 변수까지 알아보겠습니다.
1.생성자란?
- 생선자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드' 이다.
따라서 인스턴스변수의 초기화 작업에 주로 사용되며 , 인스턴스 생성 시에
실행되어야 할 작업을 위해서도 사용된다.
-생성자의 이름은 클래스의 이름과 같아야한다
-생성자는 리턴 값이 없다.
연산자 new 가 인스턴스를 생성하는거지 생성자가 인스턴스를생성하는 것이 아니다.
1-1. 기본생성자
생성자를 모르고도 프로그래밍을 해 왔지만 , 사실은 모든 클래스에는 반드시 하나 이상의
생성자가 정의 되어있어야한다.
하지만 클래스에 생성자 정의를 하지않고도 인스턴스를 생성할 수 있었던 이유는
기본생성자 덕분이다.컴파일러가 자동적으로 기본 생성자를 추가해주는 경우는 클래스 내에 생성자가
하나도 없을때 이다. 만약 하나라도 있을시에는 생성 되지 않는다.
1-2. 생성자에서 다른 생성자 호출하기 -this(), this
-같은 클래스의 맴버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도서로 호출이 가능하다.
하지만 밑에 두가지 조건을 충족 시켜야한다.
- 생성자의 이름으로 클래스이름 대신 this 를 사용한다.
- 한 생성자에서 다른생성자를 호출할 대는 반드시 첫 줄에서만 호출이 가능하다.
package 삼월이십이일;
class Car{
String color;
String gearType ;
int door;
Car(){
this("white", "auto", 4);
}
Car(String color) {
this(color,"auto", 4);
}
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
class CarTest2{
public static void main(String args[]){
Car c1 = new Car();
Car c2 = new Car("blue");
System.out.println("c1의 color =" + c1.color +", gear Type=" + c1.gearType +"door="+c1.door);
System.out.println("c2의 color =" + c2.color +", gear Type=" + c2.gearType +"door="+c2.door);
}
}
생성자 Car() 에서 또다른 생성자 Car(String color, String gearType, int door)를 호출하였다.
이처럼 생성자간의 호출에서는 생성자의이름대신 'this ' 를 사용해야만 하므로
'Car' eotls 'this'를 사용했다. 그리고 Car() 의 첫째 줄에서 호출하였다는점을
눈여겨 보세요.
this - 인스턴스 자신을 가르키는 참조변수, 인스턴스의 주소가 저장되어 있다.
모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.
this(), this(매개변수) - 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다
2.변수의 초기화
- 변수를 선언하고 처음으로 값을 저장하는 것을 '변수의 초기화' 라고한다.
변수의 초기화는 경우에 따라서 필수적 이기도 하고 선택적이기도 하지만 ,
가능하면 선언과 동시에 적절히 한값으로 초기화하는것이 바람직하다.
2-1. 명시적 초기화
- 변수를 선언과 동시에 초기화 하는것을 명시적 초기화라고 한다.
- 명시적 초기화가 간단하고 명료하긴 하지만 , 보다 복잡한 초기화 작업이
필요할 때는 '초기화 블럭' 또는 생성자를 사용해야 한다.
2-2. 초기화 블럭
초기화 블럭에는 '클래스 초기화 블럭' 과 '인스턴스 초기화 블럭' 두가지
종류가 있다. 클래스 초기화 블럭은 클래스변수의 초기화에 사용되고 ,
인스턴스 초기화 블럭은 인스턴스 변수의 초기화에 사용된다.클래스 초기화 블럭 = 클래스변수의 복잡한 초기화에 사용된다.
인스턴스 초기화 블럭 = 인스턴스변수의 복잡한 초기화에 사용된다.
- 초기화 블럭을 작성하려면, 인스턴스 초기화 블럭은 단순히 클래스 내에
블럭 {} 을 만들고 그안에 코드를 작성하기만 하면된다.
그리고 클래스 초기화 블럭은 인스턴스 초기화 블럭앞에 단순히 static를
덧붙이기만 하면된다.
class InitBlock {
static { /* 클래스 초기화 블럭입니다. */}
{/* 인스턴스 초기화 블럭입니다 */}
}
클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될때 한번만 수행되며,
인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때마다 수행한다.생성자보다인스턴스 초기화 블럭이 먼저 수행된다.
2-3. 맴버변수의 초기화 시기와 순수
클래스 변수의 초기화 시점
- 클래스가 처음 로딩될 때 단 한번 초기화 된다.
인스턴스변수의 초기화 시점
- 인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다.
클래스 변수의 초기화 순서
- 기본값 >>> 명시적초기화 >>> 클래스 초기화 블럭
인스턴스변수의 초기화 순서
- 기본값 >>> 명시적초기화 >>> 인스턴스 초기화 블럭 >>> 생성자
짱짱맨 호출로 왔습니다!
한주 수고하세요
코인거래소인 고팍스에서 멋진 이벤트중이네요!
https://steemit.com/kr/@gopaxkr/100-1-1
감사합니다^^ 화이팅입니다!