JAVA/수업 복습

자바 공부기록 36 - 생성자(Constructor)

본이qq 2022. 4. 26. 14:26

●생성자 ;

   클래스의 객체가 생성될 때, 멤버필드의 초기화를 위해서 사용되는 메소드

   각각의 객체가 생성될 때, 서로 다른 메모리를 가지는 객체를 생성할 수 있게 합니다.

 

●생성자의 특징

  1. 멤버메서드 입니다(특별한 멤버메서드-처음객체생성시만 호출, 중간에 호출되지 않습니다)

  2. 클래스의 이름과 동일한 이름을 갖는 메서드입니다

  3. 리턴값이 없는 메서드 입니다

  4. 따로 정의(생성)하지 않아도 이미 클래스 내부에 존재하는 메서드입니다.

  5. 생성자는 각각의 객체가 생성될 때마다 호출되는 메서드 입니다.

  6. 주로 하는 일은 new 와 함께 객체가 저장될 Heap메모리를 할당하고 그안에 

      멤버변수를 만드는 일을 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class AClass{
    private int age;
    
    // 필요에 따라 숨어있는 생성자를 꺼내놓고, 메모리 확보 하는 동작 외에 다른 일을 
    // 시킬수 있습니다
    AClass() {
        System.out.println("Aclass의 생성자 호출~!");
        age = 100;
    }
    
    public int getAge() {  return age;     }
    public void setAge(int age) {    this.age = age;     }
}
 
cs

- 필요에 따라 숨어있는 생성자를 꺼내놓고, 메모리 확보 하는 동작 외에 다른 일을 시킬수 있습니다

   (위와 같은 경우는 "AClass의 생성자 호출~!" 메세지 출력 후 age 멤버변수에 100 대입하기)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Class09 {
 
    public static void main(String[] args) {
        
        AClass a = new AClass();  //생성자 메서드 호출 동작이 포함되어있습니다
        AClass b = new AClass(); 
        // 객체가 만들어질때만 호출되기 때문에 다른 메서드처럼 호출객체와 함께 
        // 사용되지 않습니다
        // a.AClass();  에러
        System.out.println("나이 : " + a.getAge());
        b.setAge(200);
        System.out.println("나이 : " + b.getAge());
    }
 
}
 
cs

출력값

- 생성자 메서드의 호출은 클래스의 객체가 만들어질때만 이루어지므로, 객체명.클래스명 으로 사용되지 않음

 

 

 

-생성자도 리턴값만 없을뿐, 매서드이므로 매개변수를 사용할 수 있습니다

 생성자의 매개변수를 활용하는 경우 각각의 객체마다 서로 다른 값을 가질 수 있습니다.

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
class BClass{
    private int age;
 
 
    BClass(int a){
        this.age = a;
    }
    
    public int getAge() {
            return age;
        }
    public void setAge(int a) {
            age = a;    
        }
}
 
public class Class10 {
 
    public static void main(String[] args) {
        
        BClass b1 = new BClass(40);
        BClass b2 = new BClass(50);
        System.out.println("b1객체의  age 변수 값 : " + b1.getAge() );
        System.out.println("b2객체의  age 변수 값 : " + b2.getAge() );
 
    }
 
}
cs

출력값