java/oop

[oop] 5. 생성자(Constructor)의 개념

jeri 2024. 4. 15. 18:58
반응형

1. 생성자(Constructor) 의 개념

  • 객체를 생성하기 위한 특별한 메소드
  • 즉, 새로운 인스턴스가 생성될때마다 호출되는 인스턴스 초기화 메소드
  • 인스턴스를 만들어주는 것은 new 연산자이다.
  • 생성자는 인스턴스를 초기화 시켜줄 메소드일 뿐이다.

 

2. 생성자(Constructor) 선언법

방법1) 컴파일러가 만들어주는 기본생성자만 사용

  • 기본생성자(Default Constructor)
  • = 매개변수가 없는 생성자
  • 객체 생성 시 매개변수가 없는 기본 생성자를 컴파일러가 소스코드를 바이트코드로 읽으면서 기본생성자 자동추가
  • 필드에는 기본값으로 초기값 저장

형식

접근지정자 클래스명(  ){   }
public Member(   ){   }

 

예시

Member member1 = new Member();
 
//private filed라서 Getter 메소드를 호출하여 필드값을 반환받아 출력
System.out.println("아이디 = " + member1.getId());	  //아이디 = null		
System.out.println("이름 = " + member1.getName());    //이름 = null
System.out.println("이메일 = " + member1.getEmail());	 //이메일 = null
  • 💘이클립스 기능
    • 이클립스를 사용하여 기본 생성자 자동 완성
    • Ctrl + Space >> Constructor 선택
    • 그렇다면 기본생성자가 자동으로 생성되는데, 왜 매개변수가 있는 생성자를 만들어야 할까?

 

 

방법2) 매개변수가 있는 생성자 만들어 사용

  • 매개변수가 있는 생성자를 만드는 이유
    • setter호출없이 객체 생성 시 필드에 원하는 값으로 초기화 가능
    • 즉, 생성자로 객체의 필드값을 원하는 값으로 초기화하여 객체가 생성된다!
  • 매개변수에 전달되어 저장된 값으로 필드값을 초기화함
  • 객체 생성 시 필드에 원하는 값이 저장되도록 생성자 작성

형식

접근지정자 클래스명(자료형 매개변수, ...){초기화명령;}

 

예시

Member member2 = new Member("bob");
Member member3 = new Member("ccc", "임꺽정");
Member member4 = new Member("ddd","전우치","adfaas@gmail.com");

//new연산자로 호출한 생성자가 없는 경우 error발생
Member member5 = new Member(1111);   //error
  • 💘이클립스 기능
    • 이클립스를 사용하여 매개변수가 있는 생성자 자동 완성
    • source >> gereate constructor using fields
    • Alt + Shift + s >> 팝업메뉴 >> O >> 필드선택 >> Generate

 

 

3. 생성자 선언 규칙

  1. 반환형 작성 안함 ( = 리턴값 없음)
  2. 생성자의 이름과 클래스의 이름은 반드시 동일하게 작성 (그래야 생성자로 인식함)

 

 

4. 메소드 오버로드를 이용해서 생성자를 선언할 수 있다

  • 매개변수의 자료형 또는 갯수가 다른 여러개의 생성자 선언 가능
  • 하지만 생성자가 너무 많으면 객체 만드는 데 불편함이 있기 때문에 너무 많이 만들지 않도록 주의

 

5. 생성자 선언 예제

	//매개변수가 있는 생성자
	public Member(String id) {
		this.id = id;
	}
	public Member(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public Member(String id, String name, String email) {
		super();
		this.id = id;
		this.name = name;
		this.email = email;
	}
	//매개변수가 없는 생성자 - 기본 생성자(Default Constructor)
	public Member() {   }

 

 

6. 생성자에서 다른 생성자 호출 선언

//다른 실행보다 먼저 실행되도록 작성해야함
//즉, 생성자에서 다른 생성자를 호출할 때는 첫번째로 명령문을 작성해야함
//자바가 C++을 모델링하여 만들어져서 이건 쓰지 않는 기능이지만, 구현할 수는 있다!
//초기화 작업 대신 해주는 기능이지만 굳이 안씀. 왜 안쓸까?
	public Member() {
		this(값, 값, ...); //생성자에서 다른 생성자를 호출하는 명령 - 생성자에서만 사용 가능함
	}

	public Member() {
	 	System.out.println();
	   	this("NoId","NoNAme","NoEmail");    //error
}

	public Member() {
			this("NoId","NoNAme","NoEmail");
		 	System.out.println();         //ok
	}

//그 이유는 다른 방법으로 필드에 원하는 초기값 직접 집어넣을 수 있기 때문
private String id = "NoId";
private String name = "NoNAme" ;
private String email = "NoEmail";

//객체 생성 시 null 대신 기본값으로 변경 가능하지만,  없다라는 표현을 굳이 다른값으로 초기화하지 않는다. 
//보통은 그냥 기본초기값 null을 사용한다.
반응형