코딩 기록들

객체지향 프로그래밍_2. 생성자 본문

카테고리 없음

객체지향 프로그래밍_2. 생성자

코딩펭귄 2023. 12. 6. 20:35
생성자

- 객체를 생성할때 : new키워드와 함께 사용 ex_ new Student();

- 생성자 : 반환값이 없음

- 생성자 : 클래스의 이름과 동일함

- 대부분의 생성자 : public, 필요에의해 가끔 private

 

기본생성자

- 클래스에는 반드시 1개이상의 생성자가 존재함. 만약 하나도 없을경우 : 컴파일러가 생성자 코드를 넣어줌 

public Car(){}

- 따라서, 클래스에 생성자를 선언하지 않아도 new연산자뒤에 기본생성자를 호출하여 객체생성할수있음

Car myCar = new Car();

 

생성자 선언
클래스(매개변수 선언, ..){
//객체의 초기화 코드
}

 

- 매개변수 선언 : 생략할 수 있고, 여러개 선택해도 됨. 

- 매개변수 : new연산자로 생성자 호출할때 외부의 값을 생성자 내부로 전달하는 역할을 함

 

필드 초기화

- 객체 생성 시점에 외부에서 제공되는 다양한 값들로 초기화되어야 한다면 생성자에서 초기화 해야함

- this : 객체 자신의 참조

- this.필드 = this라는 참조변수로 필드를 사용하는것

 

생성자 오버로딩

- 다양한 방법으로 객체를 생성할 수 있도록, 매개변수를 달리하는 생성자를 여러개 선언하는것

- 주의할점 : 매개변수의 타입과 개수, 선언된 순서가 똑같을 경우 매개변수 이름만 바꾸는것은 생성자 오버로딩이 아님. 반드시 '매개변수를 달리하는' 생성자여야 함

 

this() : 다른 생성자 호출

- 생성자 오버로딩이 많아질경우 중복된 코드가 발생할수있음 -> 필드초기화내용은 한 생성자에만 집중적으로 하고, 나머지 생성자는 '초기화내용을 가지고있는 생성자를 호출'하는 방법으로 개선

- 생성자에서 다른 생성자를 호출할때 this() 사용함

- 반드시 생성자의 첫 줄 에서만 허용됨

- this의 매개값은 호출되는 생성자의 매개변수에 맞게 제공해야함

 

 

예제

package chapter06;

public class Student {

//    아래 3개의 멤버변수는 null값, 0으로 초기화됨 -> 객체가 만들어 질 때 초기화됨
    public int studentNumber;
    public String studentName;
    public int grade;

    public Student(){} //default 생성자 = 클래스에 생성자가 하나도 없을때만 만들어지므로 필요하면 직접 넣어야함

    public Student(int studentNumber,String studentName, int grade){
        this.studentNumber = studentNumber;
        this.studentName = studentName;
        this.grade = grade;

    }

    public String showStudentInfo(){

        return studentName + "학생의 학번은" + studentNumber + "이고," + grade + "학년 입니다.";
    }
}
package chapter06;

public class StudentTest {

    public static void main(String[] args) {

        Student studentLee = new Student();

        System.out.println(studentLee.showStudentInfo());

        Student studentKim = new Student(123456, "Kim", 3);
        System.out.println(studentKim.showStudentInfo());

    }

}