본문 바로가기
[JAVA]/[자바 기초]

[자바 기초] 생성자

by 북방바다코끼리표범 2023. 7. 31.

복습

https://shins99.tistory.com/12

 

[자바 기초] 함수와 메서드

복습 https://shins99.tistory.com/11 [자바 기초] 객체 지향 언어란? 복습 https://shins99.tistory.com/9 [자바 기초] 참조 자료형 - Scanner, Random 복습 https://shins99.tistory.com/8 [자바 기초] for, while 복습 https://shins99.ti

shins99.tistory.com


생성자

💡 학습 목표 

1. 생성자가 뭘까? 
2. 생성자를 사용하는 방법(문법
3. 생성자에는 기본생성자와 사용자정의 생성자가 있다
4. 생성자 오버로딩이란 무엇일까?
5. 생성자는 인스턴스화(객체화) 될 때 가장 먼저 수행되는 코드이다★★


생성자

  • 객체를 생성할 때 new 키워드와 함께 사용 - new Student();
  •  생성자는 일반 함수처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new 와 함께 호출 됨
  •  객체가 생성될 때 변수나 상수를 초기화 하거나 다른 초기화 기능을 수행하는 메서드를 호출 함
  •  생성자는 반환 값이 없고, 클래스의 이름과 동일
  •  대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private 으로 선언되는 경우도 있음
  • 객체를 생성할 때, 객체의 형태에 대한 강제성을 부여하는 것.
  • 반환값이 없음. 선언부에 반환 자료형이 없음
  • 생성자 이름 == 클래스 이름

 

기본 생성자 (default constructor)

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

매개변수가 없는 생성자

 

생성자 만들기

● 컴파일러가 제공해 주는 기본 생성자외에 필요에 의해 생성자를 직접 구현 할 수 있음

생성자 만들어보기

public class Bus {

	// 속성(상태)
	int busNumber;
	int count;
	int money;

	// 생성자 만들어보기
	// 함수와 메서드와 생성자의 차이 생성자는 리턴 타입 없음.
	// 반드시 클래스 이름과 동일 해야 한다.
	// 객체화 시키기 위해서 적어도 하나의 생성자가 있어야 함.
	// 생성자가 없으면 메모리에 올릴 수 없다.

	// 1. 기본 생성자는 컴파일러가 자동으로 만들어 준다.
	// 단! (사용자가 정의한 생성자가 없을 경우)
	// 2.

	public Bus() {

	}

	// 개발자가 직접 생성자를 명시하는 거을
	// 사용자 정의 생성자라고 부른다.
	public Bus(int busNumber) {
		this.busNumber = busNumber;
		// this = 자기 자신.
		// this를 안쓰고 싶다면 변수 이름을 바꿔야 함.
	}

	public Bus(int busNumber, int count) {
		this.busNumber = busNumber;
		this.count = count;

	}

	public Bus(int busNumber, int count, int money) {
		this.busNumber = busNumber;
		this.count = count;
		this.money = money;
	}

	// 행위(기능)
	public void take(int m) {
		money += m;
		count++;
	}

	public void showInfo() {
		System.out.println("버스 번호 : " + busNumber);
		System.out.println("승객 수 : " + count);
		System.out.println("금액 : " + money);
		System.out.println("======================");
	}

} // end of class

생성자 사용해보기

public class BusMainTset1 {

	// 메인 함수
	public static void main(String[] args) {

		// 참조변수 = bus100 <-- stack
		// 객체 <-- heap 메모리 영역에 올라간다.
		Bus bus100 = new Bus();
		bus100.busNumber = 100;
		bus100.count = 0;
		bus100.money = 0;

		System.out.println();

		// 생성자 사용해보기 (사용자 정의 생성자)
		Bus bus200 = new Bus(200);
		bus200.showInfo();

		// 매개변수 순서대로 값을 입력 해주어야 한다.(포지셔닝)
		Bus bus300 = new Bus(300, 1);
		bus300.showInfo();

		Bus bus400 = new Bus(400, 1, 1300);
		bus400.showInfo();

	} // end of main

} // end of class

생성자를 사용하는이유

- 사용자에게 편의성을 제공하기 위해

 

생성자 오버로딩 

  •  자바언어에서 굉장히 중요한 단어
  •  매개변수에 따라서 구분이 가능하다 (적재하다 라고 함)
  •  단, 매개 변수의 개수가 같더라도 데이터 타입이 다르면 구분이 가능
  •  생성자를 여러가지 정의할 수 있는 기능 = 생성자 오버로딩
    // 생성자 안에 쓰는 변수 = 매개변수
  • 생성자는 인스턴스화 될 때 가장 먼저 수행되는 코드이다.

 

기타

  • 객체 자기 자신의 메모리를 가르키는 this
  • this를 이용하면 멤버변수와 매개변수의 이름이 동일해도 구분가능