객체지향개념I-3

윤재열·2022년 1월 8일
0

Java

목록 보기
11/71

생성자

생성자란?

-인스턴스가 생성될 떄마다 호출되는 '인스턴스 초기화 메서드'
-인스턴스 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용
-몇가지 조건을 제외하고는 메서드와 같다.
-모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.

  • 인스턴스 초기화: 인스턴스 변수에 적절한 값을 저장하는것.
Card c = new Card();
1.연산자 new에 의해서 메모리(heap)Card클래스의 인스턴스가 생성된다.
2.생성자 Card()가 호출되어 수행된다.
3.연산자 new의 결과로, 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장된다.

생성자의 조건

생성자의 이름은 클래스의 이름과 같아야 한다.
생성자는 리턴값이 없다.(하지만 void를 쓰지 않는다.)


기본 생성자(default constructor)

매개변수가 없는 생성자
클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.
(단, 생성자가 하나라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.)


"모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다."

class Data1{
    int value;  //Data1(){} 디폴트 생성자
}
class Data3{
    int value;
    
    Data3(int x){       //매개변수가 있는 생성자.
        this.value=x;
    }
}
public class ConstructorTest {
    public static void main(String[] args) {
        Data1 d1 =new Data1();
        Data3 d3 =new Data3();  //compile error발생
    }
}

매개변수가 있는 생성자

class Car {
    public String color;   //색상
    public String gearType; //변속기 종류 - auto(자동), manual(수동)
    public int door;    //문의 개수

    Car() {
    } //생성자

    public Car(String color, String gearType, int door) {
        this.color = color;
        this.gearType = gearType;
        this.door = door;
    }
}
public class CarTest {
    public static void main(String[] args) {
        Car c= new Car();
        c.color ="while";
        c.gearType="auto";
        c.door=4;
        아래와 같이 나타낼수 있다.
        // Car c1 =new Car("white","auto",4);
    }
    }

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

this()-생성자,같은 클래스의 다른 생성자를 호출할 때 사용
다른 생성자 호출은 생성자의 첫 문장에서만 가능

참조변수this-인스턴스 자신을 가리키는 참조변수.인스턴스의 주소가 저장되어 있다.
모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재
(인스턴스변수와 지역변수를 구별하기 위해 참조변수this를 사용)

public Car(String color, String gearType, int door) {
        this.color = color;
        this.gearType = gearType;
        this.door = door;
    }

생성자를 이용한 인스턴스의 복사-인스턴스간의 차이는 인스턴스변수의 값 뿐 나머지도 동일
생성자에서 참조변수를 매개변수로 받아서 인스턴스변수들의 값을 복사한다.
똑같은 속성값을 갖는 독립적인 인스턴스가 하나더 만들어진다.

Car(Car c){//인스턴스를 위한 생성자.
        this.color=c.color;
        this.gearType=c.gearType;
        this.door=c.door;
       
    }

변수의 초기화

변수를 선언하고,처음으로 값을 저장하는 것
버변수(인스턴스변수,클래스변수)와 배열은 각 타입의 기본값으로 자동초기화되므로 초기화를 생략가능
지역변수는 사용전에 반드시!초기화를 해주어야한다.

public class InitTest {
    public int x;   //인스턴스변수 2개
    public int y=x;
    
    public void method(){
        int i;  //지역변수
        int j=i;    //컴파일에러! 지역변수를 초기화 하지 않고 사용했다.
    }
}

반드시 외우고 넘어가자!


멤버변수의 초기화

멤버변수의 초기화 방법

1.명시적 초기화(explicit initialization)

public class BenzCar {
    public int door =4; //기본형변수의 초기화
    Engine e = new Engine();    //참조형변수의 초기화
}

2.생성자(constructor)

public Car(String color, String gearType, int door) {
        this.color = color;
        this.gearType = gearType;
        this.door = door;

3.초기화블럭(initialization block)

  • 인스턴스 초기화 블럭 : {}
  • 클래스 초기화 블럭 : static{}
profile
블로그 이전합니다! https://jyyoun1022.tistory.com/

0개의 댓글