JAVA

자바의 객체지향개념 1-3

달콤한부자 2015. 10. 5. 14:17

* 생성자(constructor) 란?

 - 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'

 - 인스턴스 변수 초기화 또는 인스턴스 생성시 수행잘 작업에 사용

 - 몇가지 조건을 제외하고 메서드와 같다.

 - 모든 클래스에는 반드시 하나 이상의 생성자가 존재 하여야 한다.

 - 생성자는 주로 객체의 멤버변수를 초기화 하는데 사용(멤버변수는 일반적으로 생성자에서 초기화)

 

 # 인스턴스 초기화 - 인스턴스 변수에 적절한 값을  저장하는 것

 Card c = new Card();

1. 생성자 new에 의해서  메모리(heap)에 Card클래스의 인스턴스가 생성

2. 생성자 Card()가 호출되어 수행된다.

3. 연산자 new의 결과를 , 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장

 

 

-> 생성자의 조건

 - 생성자의 이름은 클래스의 이름과 같아야 한다

 - 생성자는 항상 리턴값이 없습니다. 그렇다고 리턴값이 없음을 의미하는 void를 붙이지는 않는다.

래스이름(타입 변수명, 타입 변수명, ... ) {

  // 인스턴스 생성시 수행될 코드

     // 주로 인스턴스 변수의 초기화 코드를 적는다.

}

 

-> 기본 생성자(default constructor)

 -  매개변수가 없는 생성자

 -  클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.

     (생성자가 하나라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.)

 

 클래스이름() { }

 Card() { } // 컴파일러에 의해 추가된 Card클래스의 기본 생성자. 내용이 없다.

 

-> 생성자에서 다른 생성자 호출하기 _this()

 ▶ this() - 자기 자신을 가르키며 , 생성자, 같은 클래스의 다른 생성자를 호출 할 때 사용

                   다른 생성자 호출은 생성자의 첫줄 에서만 가능

class Car {

String color;

String gearType;

int door;

 

Car() { this("white","auto","4" } // 매개변수가 없는 생성자(기본 생성자)

 

Car(String c, String g, int d) {  //매개변수가 있는 생성자 (생성자를 통한 멤버변수 초기화)

color = c ;

gearType = "auto"

door = 4 ;

 

       Car() {

door = 5;

this("white","auto",4);

}

-> 참조변수 this

 ▶ this 인스턴스 자신을 가리키는 참조변수.인스턴스의 주소가 저장되어 있음

     모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재

 

clss Car {

String color;

String gearType;

int door;

 

Car() {

 this("white","auto","4");

}

 

car(String c, String g, int d){

color = c;

gearType = g;

door = d;

} 

}

// 위 car 생성자를 this를 이용하여 변경

car(String c, String g, int d){

this.color = color;

this.gearType = gearType;

this.door = door;

}

 

* 변수의 초기화

 - 변수를 선언하고 처음으로 값을 저장하는 것

 - 맴버변수(인스턴스변수, 클래스변수) 와 배역을 각 타입의 기본값으로  자동 초기화되무로 초기화 생략 가능

 - 지역변수는 사용전에 꼭!! 초기화를 해주어야 한다.

 

 자료형

기본값 

 boolean

false 

 char

'\u0000' 

 byte

 short

 0

 int

 0

 long

0L 

 float

0.0f 

 double

0.0d 또는 0.0 

 참조형 변수

null 

 

 class InitTest{

     int x;            // 인스턴스 변수

     int y = x ;     //  인스턴스 변수

 

     void method1() {

int i ;        // 지역변수

      int j = i;     // 컴파일에러 !!!! 지역변수를 초기화하지 않고 사용함

 

 

-> 변수의 초기화 예시

 선언예

설명 

 int i = 10 ;

 int j = 10 ;

 int형 변수 i를 선언하고 10으로 초기화 한다.

 int형 변수 j를 선언하고 10으로 초기화 한다.

 int i = 10, int j = 10 ;

 같은 타입의 변수는 콤마(,)를 사용해서 함께 선언하거나 초기화 할 수 있다. 

 int i = 10 , j = 10 ;

 타입이 다른 변수는 함께 선언하거나 초기화할 수 없다. 

 int i =10 ;

 int j = i ;

 변수 i에 저장된 값으로 변수 j를 초기화 한다.

 변수 j는 i의 값인 10으로 초기화 한다. 

 int j= i ;

 int i= 10;

 변수 i가 선언되기 전에 i를 사용 할 수 없다. 

 

-> 멤버변수의 초기화

▶ 멥버변수의 초기화  3가지 방법

 1. 명시적 초기화

class Car {

int door = 4;                           // 기본형 변수의 초기화

Engine e = new Engine() ;     //  참조형 변수의 초기화

//....

}

 2. 생성자(constructor)

 - this를 이용한 맴버변수의 초기화

 car(String color, String gearType, int door){

this.color = color ;

this.gearType = gearType;

this.door = door ;

     }

 

 3. 초기화 블럭

  - 인스턴스 초기화 블럭 : { }

  - 클래스 초기화 블럭 : static { }