고래씌

[JAVA] 7-2. 생성자 본문

JAVA/JAVA 기초

[JAVA] 7-2. 생성자

고래씌 2023. 10. 12. 16:40

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