코딩 기록들
객체지향 프로그래밍_2. 생성자 본문
생성자
- 객체를 생성할때 : 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());
}
}