안녕하세요 오늘은 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. 맴버변수의 초기화 시기와 순수 


클래스 변수의 초기화 시점  
-  클래스가 처음 로딩될 때 단 한번 초기화 된다. 

인스턴스변수의 초기화 시점  
-  인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다. 

클래스 변수의 초기화 순서 
-  기본값 >>> 명시적초기화 >>> 클래스 초기화 블럭 

인스턴스변수의 초기화 순서  
-  기본값 >>> 명시적초기화 >>> 인스턴스 초기화 블럭 >>> 생성자 



'Java' 카테고리의 다른 글

Java 실행 구조  (0) 2018.09.10
10. 열번째 개발 공부  (0) 2018.03.28
8. 여덞번째 개발공부  (0) 2018.03.28
7. 일곱번째 개발 공부  (0) 2018.03.28
6.여섯번째 개발 공부  (0) 2018.03.28

+ Recent posts