생성자

khs·2022년 9월 27일
0

자바

목록 보기
3/3

생성자

생성자는 new 연산자를 통해서 인스턴스를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메서드(하지만 메소드와는 다르다.)이다.

인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'로 메소드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는다.


생성자 특징

  • 인스턴스 변수를 초기화 메소드하는 메소드이다.
  • 리턴 값이 없다 (void 안붙임)
  • 생성자를 생략하면 컴파일러가 자동적으로 기본 생성자(Default Constructor)를 생성한다.
  • 생성자에 접근 제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다. -> 이것이 바로 싱글톤!(static글 하단 참조)

기본 생성자

매개변수가 없는 생성자

자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야한다. 하지만 특별히 생성자를 정의하지 않고도 인스턴스를 생성할 수 있습다. 이것은 자바 컴파일러가 기본 생성자(default constructor)라는 것을 기본적으로 제공해 주기 때문이다. 기본 생성자는 매개변수를 하나도 가지지 않으며, 아무런 명령어도 포함하고 있지 않는다.

자바 컴파일러는 컴파일 시 클래스에 생성자가 하나도 정의되어 있지 않으면, 자동으로 다음과 같은 기본 생성자를 추가한다.


class Car {
    private String modelName;
    private String color;
    private int maxSpeed;
	
    Car(){} //기본 생성자
    
    Car(String modelName,String color, int maxSpeed) { //  생성자
        this.modelName = modelName;
		this.color = color;
        this.maxSpeed = maxSpeed;
    }

    public String getModel() {
        return "모델: " + this.modelName + 
               " 색: " + this.color + 
               " 최고속도: " + this.color;
    }
}

public class Main{
    public static void main(String[] args) {
        Car myCar = new Car("아반떼","흰색", 200); // 생성자의 호출
        System.out.println(myCar.getModel()); // 생성자에 의해 초기화되었는지를 확인함.
        Car emptyCar = new Car(); //물론 기본생성자로도 객체 생성 가능
    }
}

오버로딩
메소드 오버로딩(method overloading)
메소드 오버로딩(overloading)이란 같은 이름의 메소드를 중복하여 정의하는 것을 의미한다. 자바에서는 원래 한 클래스 내에 같은 이름의 메소드를 둘 이상 가질 수 없다. 하지만 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메소드를 작성할 수 있다.

즉, 메소드 오버로딩은 서로 다른 매개변수의 리스트를 갖는 여러 메소드를 같은 이름으로 정의하는 것이라고 할 수 있다. 이러한 메소드 오버로딩을 사용함으로써 메소드에 사용되는 이름을 절약할 수 있다. 또한, 메소드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 크게 신경을 쓰지 않고 호출할 수 있게 된다.


생성자 this()

생성자에서 다른 생성자 호출할 때 사용하며 다른 생성자 호출시 첫 줄에서만 사용가능

class Car {
	String color;
    String gearType;
    int door;
    
    car() {
    	this("white", "auto",4);
    	// 코드의 중복을 제거해준다.
    	// color = "white";
        //geartype = "auto";
        //door = 4;
    }
    
    car(String c, String g, int d){
    	color = c;
        gearType = g;
        door = d;
    }
}

참조변수 this

인스턴스 자신을 가리키는 참조변수로 인스턴스 메서드(생성자 포함)에서 사용가능하다.

지역변수 (lv)와 인스턴스 변수(iv)를 구별할 때 사용

생성자 this와 전혀 다름. 연관 없음.

class Car {
	String color;
    String gearType;
    int door;
    
    car(String color, String gearType, int door){
    	this.color = color;
        this.gearType = gearType;
        this.door = door;
    }
}
profile
권혁상입니다. 행복코딩^_^

0개의 댓글