Java 강의

자바 생성자

iIxmont 2017. 10. 11. 17:56

안녕하세요 이번 글에서는 자바 생성자에 대해서 알아보도록 하겠습니다.

 

생성자의 구조는 다음과 같습니다.

 

사용자 정의 생성자의 사용 예시는 다음과 같습니다.

 

코드로 생성자를 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/* 생성자
 객체가 생성될때 필드에게 초기값을 제공하고 필요한 초기절차를
 실행하는 메소드
 
 형식
 접근제한자 클래스명(매개변수타입 매개변수이름){
     초기설정 코드들;
 }
 */
class Car{
    private String color;
    private int speed;
    private int mileage;
 
    public Car() {//생성자 1 : 매개변수가 없음
        //기본 생성자
        //만약 클래스 생성시에 생성자를 하나도 안 만든 경우
        //자동적으로 몸체가 비어있는 이런 생성자가 만들어짐
    }
    //사용자 정의 생성자
    public Car(String c, int s, int m) {
        //그러나 이렇게 사용자 정의 생성자가 하나라도 정의되어있으면 기본 생성자는 만들어지지 않음
        //클래스에 생성자가 명시적으로 선언되어있으면 반드시 선언된 생성자를 호출해서 객체를 생성
        color = c;
        speed = s;
        mileage = m;
    }
    public Car(String c, int s) {
        color = c;
        speed = s;
        mileage = 0;
    }
    public Car(String c) {
        color =c;
        speed = 100;
        mileage = 0;
    }
}
cs

 

코드에 주석으로 설명을 적었습니다.

 

다음은 이 클래스의 메인 함수가 있는 클래스입니다.

1
2
3
4
5
public class CarTest {
    public static void main(String[] args) {
        Car c1 = new Car("벤츠",200);//Car클래스의 인스턴스 c1을 생성하고 생성자로 초기화 
    }
}
cs

 

이렇게 Car c1 = new Car("벤츠",200);으로 코드를 작성하면 Car클래스의 Car(String c , int s)생성자를 호출해서 사용합니다.

 

매개변수의 개수와 종류가 같은 것을 자바가 찾아서 실행하는 것입니다.

 

위의 코드처럼 생성자는 클래스의 인스턴스를 생성함과 동시에 초기화를 할 수 있게 해줍니다.

 

이제 c1.color에는 "벤츠" , c1.speed에는 200이 들어있습니다.

 

코드를 조금 바꿔서 출력해보겠습니다.

 

Car클래스 입니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Car{
    private String color;
    private int speed;
    
    public Car(String c, int s) {
        color = c;
        speed = s;
    }
    public void print() {//출력을 위해 함수를 정의했습니다
        System.out.println(this.color+" "+this.speed);
        //여기 this는 main 함수에서 c1.print로 함수를 호출해서 사용할때
        //c1을 가리키는 키워드입니다
        //this.color는 마치 c1.color처럼 동작합니다
        //그래서 main에서 벤츠와 200을 
    }
}
cs

 

CarTest클래스 입니다

1
2
3
4
5
6
public class CarTest {
    public static void main(String[] args) {
        Car c1 = new Car("벤츠",200);//생성자를 사용하고 "벤츠"와 200으로 값을 초기화 합니다
        c1.print();//Car클래스 안에 있는 print함수를 호출합니다
    }
}
cs

 

출력화면입니다

 

사용자가 사용자 정의 생성자를 정의하지 않으면 기본 생성자가 생성이 되고 사용됩니다.

1
2
3
4
5
6
7
8
9
10
11
class Car{
    private String color;
    private int speed;
    private int mileage;
    //생성자의 선언을 생략하면
    //이렇게 텅빈 곳에
    /*public Car(){
        
    }이런 기본 생성자가 생성됩니다
    */    
}
cs

 

위 코드와 같이 기본 생성자가 생성이 되고 사용됩니다

 

그러나 아래 코드처럼 사용자 정의 생성자를 정의하면 사용자 정의 생성자를 사용합니다.

1
2
3
4
5
6
7
8
9
10
11
12
class Car{
    private String color;
    private int speed;
    private int mileage;
    public Car(String c, int s, int m) {//사용자 정의 생성자
    //이렇게 사용자 정의 생성자를 생성하면
    //기본 생성자가 생성이 안됩니다
        color = c;
        speed = s;
        mileage = m;
    }
}
cs

 

이렇게 사용자 정의 생성자를 정의하면 기본 생성자를 생성하지 않습니다.

 

생성자는 setter처럼 값을 설정한다는 것에서는 같습니다.

그런데 생성자는 객체를 생성하면서 값을 초기화 해줄 수 있습니다.

 

이번 글에서는 생성자에 대해서 알아보았습니다.

설명이 부족하시진 않으셨나요? 질문을 jswoo030@gmail.com 으로 보내주시거나 댓글을 달아주시면 빠른 답변을 받으실 수 있습니다