생성자(constructor) - 7

생성자(constructor) - 7

💡 학습 목표
    1. 기본 생성자에 대해 알아보자.
    2. 사용자 정의 생성자에 대해 알아보자.
    3. 생성자 오버로딩이란 뭘까?

1. 기본 생성자에 대해 알아보자.

  • 생성자(Constructor)는 클래스의 인스턴스, 즉 객체를 생성할 때 호출되는 특별한 유형의 메서드이다.
  • 객체의 초기화를 담당하며, 객체가 올바르게 사용될 수 있도록 필요한 값들을 설정하고, 필요한 초기화 코드를 실행.

생성자의 주요 특징

  • 생성자의 이름은 클래스의 이름과 동일.
  • 생성자는 반환 타입을 가지지 않으며, 심지어 void 도 사용하지 않음.
  • 객체 생성 시 new 키워드와 함께 자동으로 호출.
  • 생성자는 크기 기본 생성자와 사용자 정의 생성자로 구분.

기본 생성자 (default constructor)

  • 클래스에는 반드시 적어도 하나 이상의 생성자가 존재한다.
  • 클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출할 수 있음
  • 클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어 줌

사용자 정의 생성자(Overloaded Constructor) - 매개변수가 있는 생성자

  • 이를 통해 객체 생성 시 특정 값으로 초기화할 수 있습니다.
  • 사용자 정의 생성자를 선언하면 컴파일러는 기본 생성자 (default constructor)는 제공되지 않음
  • 필요에 따라 여러 생성자를 만들어 줄 수 있다. (생성자 오버로딩)
package basic.ch08;

public class Student {

	// 생성자 - constructor
	// 객체를 생성할 때 다음과 같은 모양으로 만들어라고 강제로 지시하는 것
	// 생성자는 객체를 생성할 때 반드시 존재해야 한다.

	String name;
	int number;
	int grade;

	// 생성자는 리턴 타입이 없다.
	// 클래스 이름과 같다면 (대문자까지 동일)
	// 생성자
	public Student() { 	} // <-- 기본 생성자
	// 기본 생성자는 컴파일러가 .class 파일을 만들 때
	// 사용자 정의 생성자가 하나도 없다면
	// 자동으로 코드를 넣어 준다.

	// 사용자 정의 생성자란?
	// 클래스 설계자가 인스턴스화 했을 때 정상적으로
	// 동작해야 하는 초기값들이 필요하다면 강제성을 부여 하는 것

	public Student(String s, int n1, int n2) {
		name = s;
		number = n1;
		grade = n2;
		// 중요 별표 3개
		// 생성자는 객체가 처음 만들어 질 때
		// 제일 먼저 수행하는 코드 이다.
		// showInfo(); // 생성자를 호출할때 원하는 코드를 읽게 할수 있음
	}

	// 메서드 정의
	public void showInfo() {
		System.out.println("학생의 이름은 " + name);
		System.out.println("학생의 번호는 " + number);
		System.out.println("학생의 학년은 " + grade);
	}

} // end of class
package basic.ch08;

public class StudentMainTest {

	public static void main(String[] args) {

		Student s1 = new Student("홍길동", 101, 3); // 객체
		System.out.println(s1); // 주소값이 출력이 된다.
		// s1.showInfo();
		System.out.println("-----------------------");
		// 연습문제
		// s2 참조 변수의 이름으로 학생을 메모리에 올리고
		// 호출해주세요
		Student s2 = new Student("이순신", 102, 1);
		System.out.println(s2); // 주소값이 출력이 된다.
		System.out.println("-----------------------");
		// s2.showInfo();
		Student s3 = new Student(); // 기본 생성자로 메모리에 올림
		s3.name = "야스오";
		s3.grade = 1;
		s3.number = 103;
		s3.showInfo();
		System.out.println(s3); // 주소값이 출력이 된다.
		
		// 생성자를 여러개 만들어 줄 수 있다.
		// 생성자 오버로딩이라고 한다.
		
	} // end of main

} // end of class

 

시나리오 코드 2 - 생성자 오버로딩 만드는 연습

package basic.ch08;

public class UserInfo {

	public String userId;
	public String userPassword;
	public String userName;
	public String userAddress;
	public String phoneNumber;
	
	// 생성자 오버로딩이란
	// 생성자의 개수가 여러개 있다
	
	// 기본 생성자 형태 만들어 보기
	public UserInfo() {} 
	
	public UserInfo(String id) {
		userId = id;
	}
	
	public UserInfo(String id, String name) {
//		userId = id;
		this(id);
		userName = name;
	}
	
	// 연습 문제
	// 1 - 매개변수 3개를 받는 생성자를 만들어 주세요
	public UserInfo(String id, String name, String address) {
//		userId = id;
//		userName = name;
		this(id,name);
		userAddress = address;
	}
	
	// 2 - 매개변수 4개를 받는 생성자를 만들어 주세요
	public UserInfo(String id, String name, String address, String password) {
//		userId = id;
//		userName = name;
//		userAddress = address;
		this(id,name,address);
		userPassword = password;
	}
	
	// 3 - 매개변수 5개를 받는 생성자를 만들어 주세요
	public UserInfo(String id, String name, String address, String password, String pnumber) {
//		userId = id;
//		userName = name;
//		userAddress = address;
//		userPassword = password;
		this(id,name,address,password);
		phoneNumber = pnumber;
	}
	
} // end of class
package basic.ch08;

public class UserInfoMainTest {

	// 코드의 시작점 - 메인 함수
	public static void main(String[] args) {
		UserInfo userInfo1 = new UserInfo("123");
	} // end of main

} // end of class

Java 객체지향 핵심 - 2 으로 돌아가기

 

'Java > Java 객체 지향 핵심' 카테고리의 다른 글

클래스 설계 자유 실습  (0) 2024.04.17
객체지향 패러다임이란 - 8  (0) 2024.04.16
RunTime Data Area - 6  (0) 2024.04.15
메소드(method)와 변수 - 5  (0) 2024.04.15
함수와 만들기 {연습 문제}  (1) 2024.04.15