고래씌
[JAVA] 7-2. 생성자 본문
1. 생성자
1) 생성자부
생성자
[표현법]
접근제한자 클래스명([매개변수]) { => ※ 매개변수 생략가능
해당 생성자를 통해서 객체 생성시 실행하고자 하는 코드;
}
2) 생성자를 작성하는 목적
▶ 객체를 생성하기 위해
▶ 객체생성뿐 아니라 매개변수로 전달된 값을 통해 필드에 초기화시킬 목적
=> setter 메소드가 없더라도 생성자로만 객체를 초기화 할 수 있다!
3) 생성자 작성시 주의사항
▶ 생성자명은 반드시 클래스 명과 동일해야함(대/소문자 구분)
▶ 반환형이 존재하지 않는다.(반환형 존재시 메소드로 해석)
▶ 여러개의 생성자를 만들수 있지만, 매개변수가 중복되어서는 안된다.(오버로딩)
▶ ★매개변수 생성자를 명시적으로 만들게 되면, 기본생성자를 JVM이 자동으로 만들어주지 않는다.
지금까지 우리는 JVM이 기본생성자를 만들어주고 있었음
ex) public class A_varialbe {} => pulic A_Variable() {} 생성자를 JVM이 자동으로 만들어줬었음
★ 따라서!!!!!! 무조건 기본 생성자는 항상 작성하는 습관들이기
■ 기본 생성자?
→ 매개변수가 없는 생성자
→ 단지 객체 생성만을 위한 목적으로 할때 사용함.
→ 기본생성자를 생략하는 경우 => 오류가 발생하지 않음.
→ JVM이 클래스를 컴파일할 때 기본생성자를 작성하지 않은 경우 항상 자동으로 만들어주기 때문
→ 단, 매개변수가 있는 생성자가 이미 클래스안에 작성되어 있는 경우 반드시 기본생성자도 함께 작성해줘야한다.
ex)
① public User() {} => 기본 생성자
② public User(int age) {} => 매개변수가 있는 생성자
public User() {} => 기본생성자도 반드시 작성해야함! 안그러면 컴파일 오류가 남!
package com.kh.chap05_constructor.mdoel.vo;
public class User {
// 필드부
private String userId;
private String userPwd;
private String userName;
private int age;
private char gender;
// 생성자부
// 기본 생성자
public User() {
System.out.println("이거 출력되나?");
}
// 매개변수 있는 생성자
public User(String userId, String userPwd, String userName) {
this.userId = userId;
this.userPwd = userPwd;
this.userName = userName;
}
// 매개변수 있는 생성자
public User(String userId, String userPwd, String userName, int age, char gender) {
// public User(String userId, String userPwd, String userName)은
// 똑같은 개수는 똑같다고 판단하여 개수를 줄이거나 자료형을 바꾸면 된다.
// this.userId = userId;
// this.userPwd = userPwd;
// this.userName = userName;
this(userId, userPwd, userName);
/* 생성자 내부에서 생성자끼리 중복되는 코드가 있는 경우 this 생성자를 통해 같은 클래스 내에 있는
* 다른 생성자를 호출할 수 있다. 단, 반드시 생성자 내부 첫줄에 기술해야한다!
*/
this.age = age;
this.gender = gender;
}
public String information() {
return userId+" "+userPwd+" "+userName+" "+ age + " "+ gender;
}
}
☞ public User(String userId, String userPwd, String userName)은
똑같은 개수는 똑같다고 판단하여 개수를 줄이거나 늘리거나 자료형을 바꾸면 된다.
☞ 생성자 내부에서 생성자끼리 중복되는 코드가 있는 경우 this 생성자를 통해 같은 클래스 내에 있는 다른 생성자를 호출할 수 있다. 단, 반드시 생성자 내부 첫줄에 기술해야한다!
package com.kh.chap05_constructor.run;
import com.kh.chap05_constructor.mdoel.vo.User;
public class Run {
public static void main(String[] args) {
// User user = new User("whalewell", "1234","이고래");
// User user = new User();
User user = new User("whalewell", "12345", "고래", 35,'M');
User user2 = new User("whalewell", "고래", "12345", 35,'M'); // 같은 자료형이라 오류는 발생하지않음 => 가독성 측면 떨어짐
System.out.println(user.information());
}
2. 생성사 실습 예제
package com.kh.example.practice6.model.vo;
public class Book {
private String title;
private String publisher;
private String author;
private int price;
private double discountRate;
public Book() {
}
public Book(String title, String publisher, String author) {
this.title = title;
this.publisher = publisher;
this.author = author;
}
public Book(String title, String publisher, String author, int price, double discountRate) {
this(title, publisher, author);
this.price = price;
this.discountRate = discountRate;
}
public void inform() {
System.out.printf("책의 제목은 %s이며, 출처는 %s이고 저자는 %s입니다.\n",title, publisher, author);
System.out.printf("가격은 %d이며, 할인율은 %.1f 입니다.\n", price, discountRate);
// System.out.println(title + publisher + author + price + discountRate);
}
}
package com.kh.example.practice6.run;
import com.kh.example.practice6.model.vo.Book;
public class Run {
public static void main(String[] args) {
Book user = new Book("안녕","고래날라다님출판사","고래");
user.inform();
Book user1 = new Book("바다의 왕자","고래날라다님출판사","고래", 15000, 20);
user1.inform();
}
}
'JAVA > JAVA 기초' 카테고리의 다른 글
[JAVA] 7-4. 오버로딩 & 클래스 실습문제 (0) | 2023.10.13 |
---|---|
[JAVA] 7-3. 메소드(Method) (0) | 2023.10.12 |
[JAVA] 7-1. 클래스(Class) (0) | 2023.10.12 |
[JAVA] 배열까지 종합문제 (0) | 2023.10.12 |
[JAVA] 7. 객체(추상화, 캡슐화) (0) | 2023.10.11 |