[Java] 클래스와 객체 - 생성자, 생성자 오버로딩

나영원·2020년 8월 25일
0

Java_basic

목록 보기
25/60

생성자와 생성자 오버로딩에 대하여 알아보도록 하겠습니다.

생성자(constructor)

  • 객체를 생성할 때(인스턴스를 만들 때) new 키워드와 함께 호출합니다. 다른 메서드들이 언제든 불러서 사용할 수 있는 것과는 다르게 객체를 생성할 때 만 사용할 수 있습니다.
  • 생성자는 인스턴스를 생성할 때 멤버 변수를 초기화 하는 코드가 주를 이루어 구현되어 있습니다.
  • 일반 메서드와 다르게 반환 값이 없고 상속이 되지 않습니다.(상속은 뒤에 더 자세히 배워보겠습니다.)
  • 생성자는 클래의 이름과 항상 동일해야 합니다. ex) Studnt clas의 생성자명은 Student

기본 생성자(default constructor)

public class Student {

	public int studentID;
	public String studentName;
	public String address;
	
//  public Student() {}
	
	public void showStudentInfo(){
		System.out.println(studentName +","+ address);
		
	}
	
	public String getStudentName() {
		
		return studentName;
	}
	
	}
  • 하나의 클래스에는 반드시 하나 이상의 생성자가 존재해야 하는데 위 코드와 같이 프로그래머가 생성자를 구현하지 않을 경우 컴파일러가 'public 클래스명() {}' 과 같은 기본 생성자를 자동으로 생성하게 됩니다.
  • 기본 생성자를 더 자세히 살펴보면 public Student() {} 에서 생성자명은 반드시 클래스명과 같고 ()안에 들어가는 매개변수와 {}안에 들어가는 구현부(body)가 없습니다. 그래서 클래스에 생성자를 작성하지 않고 인스턴스를 생성 할시 'class명 참조변수 = new class명()'으로 참조변수를 비운채 생성하는 것 입니다.
  • 만약 클래스안에 다른 생성자가 있을 경우 기본 생성자는 제공되지 않습니다. 만약 기본생성자를 사용하고 싶다면 다른 생성자와 함께 기본생성자도 작성해주면 사용할 수 있습니다.
public class Student {

	public int studentID;
	public String studentName;
	public String address;
	
	//생성자1 구현
	public Student(String name) {
		
		studentName = name;
	}
	
	//생성자2 구현
    public Student(int id, String name) {

    	studentID = id;
    	studentName = name;
    	address = "주소 없음"; // 안쓸시 기본값은 null
    }
	
	public void showStudentInfo(){
		System.out.println(studentName +","+ address);
		
	}
	
	public String getStudentName() {
		
		return studentName;
	}
	}

초기화할 멤버변수가 있다면 기본변수를 생성하지 않고 생성자1과 2 처럼 매개변수와 구현부를 작성하여 생성자를 작성하면 됩니다.

public class StudentTest {

	public static void main(String[] args) {

		Student studentLee = new Student("이순신"); //생성자1 사용
		//studentLee.studentName ="이순신";
		studentLee.address = "서울";
		
		studentLee.showStudentInfo();//결과값  이순신,서울
		
		Student studentKim = new Student(1234,"김유신"); //생성자2 사용
		//studentKim.studentName ="김유신";
		//studentKim.address = "경주";
		
		studentKim.showStudentInfo();//결과값 김유신,주소 없음
	
	}
}
  • 생성자를 클래스에서 만든다면 인스턴스를 생성할 때는 사용하고자 하는 생성자의 매개변수를 입력하여 사용하면 됩니다.
  • studentLee의 경우 생성자1을 사용하기위해 name만 입력하고 studentKim의 경우는 생성자2를 사용하기 위해 id와 naem 두개 입력해 줍니다.
  • 생성자2에서 주소를 "주소 없음"으로 초기화 해두었기 때문에 studetKim에 주소를 입력하지 않아도 초기화 값이 출력되는 것을 확인할 수 있습니다.

생성자 오버로딩(constuctor overloading)]

  • 생성자 오버로딩은 위에 Student 클래스처럼 클래스안에서 다른 매개변수를 가지는 두개 이상의 생성자를 구현하는 경우를 뜻합니다.
  • public int studentID라는 멤버변수를 private int studentID으로 바꾸면 현재 클래스 내에서만 사용한다는 뜻으로 다른 클래스에서 참조변수를 통해 호출하려고해도 참조목록에 안뜨게 됩니다. 이런 경우에도 생성자에서는 멤버변수를 구현하여 초기화 할 수 있기때문에 private변수를 초기화하는 용도로 생성자가 활용되게 됩니다.
  • 구현된 생성자 중에 사용자가 선택해서 사용할 수 있기 때문에 여러개를 구현해두면 사용자 입장에서 상황에 맞게 활용할 수 있어 편의성이 증가합니다.
profile
배우는 개발 일기

0개의 댓글