티스토리 뷰

Java/Java 올인원 패키지

3. 생성자 (Java)

GrapeMilk 2020. 3. 14. 00:15

Goal

 - 생성자의 개념과 기본 생성자에 대해 알아본다

 - 생성자를 구현하는 방법과 생성자의 오버로딩에 대해 알아본다

1. 생성자 (constructor)

 - 객체를 생성할 때 new 키워드와 함께 호출 (객체 생성 외에는 호출할 수 없음)

 - 인스턴스를 초기화 하는 코드가 구현 됨 (주로 맴버 변수 초기화)

 - 반환 값이 없음, 상속되지 않음

 - 생성자는 클래스 이름과 동일함.

 

1-1 기본 생성자 (default constructor)

 - 하나의 클래스에는 반드시 하나 이상의 생성자가 존재해야 함

 - 프로그래머가 생성자를 구현하지 않으면 컴파일러가 프리컴파일 단계에서 생성자 코드를 넣어줌 

 *프리컴파일 단계 : 컴파일 전의 단계, 작성한 코드를 바로 컴파일 하는 것이아니라, 컴파일러가 한번 검토하고 컴파일을 실행함. 이때, 생성자의 유무를 확인해서 생성자가 없으면 디폴트 생성자를 만들어준다.

 - 기본 생상자는 매개 변수가 없고, 구현부가 없음

 - 만약 클래스에 다른 생성자가 있는 경우 디폴트 생성자는 제공되지 않음.

 

Student student = new Student(); //Student() : 객체를 생성할 때, 생성자를 호출함


public class Student {
	//Student 클래스에 생성자가 정의되어 있지않으면

	public Student() {} // 이런 형식으로 디폴트 생성자를 컴파일러가 만들어줌
    

}

 

1-2 생성자의 구현

 - 생성자는 원하는 매개변수를 넣어주거나, 선언문을 작성하여 직접 구현할 수 있다.

 - 생성자를 구현했을 때, 매개변수를 정의했다면, 생성자를 호출할 때 매개변수를 반드시 넣어주어야 한다.

 - 만약 매개변수 없이 인스턴스를 생성하고 싶다면, 디폴트 생성자를 직접 구현하면 된다.

 - 즉, 생성자는 여러가지 구현할 수 있다.

 

Student student = new Student();  
Student student = new Student(2014, "James"); 


public class Student {
	
	Int StudentID;
	String StudentName;
	
	public Student() {} 
	//public자리에는 다른 키워드가 올 수 도 있고, 아얘 입력을 안 할 수도 있다.
	public Student(Int ID, String name) { //매개변수
    	
		StudentID = ID;
        StudentName = name;
    	}
    

}

 

1-3 생성자 오버로딩 ( constructor overloading )

 - 오버로딩 : 메서드의 이름이 같지만 매개변수는 다른경우.

 - 생성자 오버로딩 : 생성자를 두 개 이상 구현하는 경우

 - 생성자 오버로딩을 하면 사용하는 코드에서 여러 생성자 중 선택하여 사용할 수 있음

 - private 변수도 생성자를 이용하여 초기화를 할 수 있음.

public class Student {

    private int studentID; // Student클래스 내부에서만 사용할 수 있도록 private 설정 
    
    public Student (int id) {
    	studentID = id;
    }
}

class StudentTest {
	
    Student student = new Student();
    
    // student.studentID; <- private변수인 studentID는 StudentTest에서 참조 불가.
    
    Student student1 = new Student(124);
    // 생성자를 이용해서 private로 선언된 studentID값을 참조하여 변경가능.
}

 

'Java > Java 올인원 패키지' 카테고리의 다른 글

5. 접근 제어자, 정보은닉 (Java)  (0) 2020.03.14
4. 참조 자료형 (reference data type)  (0) 2020.03.14
2. 함수와 메서드  (0) 2020.03.13
1. 클래스와 객체 (Java)  (0) 2020.03.13
15. 다형성, 형변환 (Java)  (0) 2020.03.13
댓글