반응형
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. 생성자 선언 규칙
- 반환형 작성 안함 ( = 리턴값 없음)
- 생성자의 이름과 클래스의 이름은 반드시 동일하게 작성 (그래야 생성자로 인식함)
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을 사용한다.
반응형
'java > oop' 카테고리의 다른 글
[oop] 7. VO(Value Object)클래스 (0) | 2024.04.16 |
---|---|
[oop] 6. this 키워드의 개념 (0) | 2024.04.16 |
[oop] 4. 메소드 오버로드(Method Overload) (0) | 2024.04.15 |
[oop] 3. 자동차 클래스로 만든 자동차 출력 프로그램 (0) | 2024.04.14 |
[oop] 2. 클래스와 객체 (feat.접근지정자(Access Modifier) 설정) (0) | 2024.04.14 |