9번째 개발일지

in kr •  7 years ago 

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


클래스 변수의 초기화 시점

  • 클래스가 처음 로딩될 때 단 한번 초기화 된다.

인스턴스변수의 초기화 시점

  • 인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다.

클래스 변수의 초기화 순서

  • 기본값 >>> 명시적초기화 >>> 클래스 초기화 블럭

인스턴스변수의 초기화 순서

  • 기본값 >>> 명시적초기화 >>> 인스턴스 초기화 블럭 >>> 생성자

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

짱짱맨 호출로 왔습니다!
한주 수고하세요
코인거래소인 고팍스에서 멋진 이벤트중이네요!
https://steemit.com/kr/@gopaxkr/100-1-1

감사합니다^^ 화이팅입니다!