본문 바로가기
Java 강의

자바 생성자

by 자유코딩 2017. 10. 11.

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

 

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

 

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

 

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

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 으로 보내주시거나 댓글을 달아주시면 빠른 답변을 받으실 수 있습니다

댓글