[java] 생성자

DEVELOPERS_Ivan ㅣ 2023. 7. 31. 23:46

생성자
기본 생성자 & 오버로딩(여러가지 생성자를 정의하는 생성자)

 

생성자(constructor)
● 생성자 선언
객체를 생성할 때 new 키워드와 함께 사용
클래스명(매개변수, ....) { // 객체의 초기화 코드 작성 }
예시 :Subway subway100 = new Subway(50);
● 생성자는 일반 함수처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new 와 함께 호출 됨
● 객체가 생성될 때 변수나 상수를 초기화 하거나 다른 초기화 기능을 수행하는 메서드를 호출 함
● 생성자는 반환 값이 없고, 클래스의 이름과 동일
● 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private 으로 선언되는 경우도 있음

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

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

생성자 오버로딩(constructor overloading)
● 매개 변수를 달리하는 생성자를 여러 개 선언하는 것
● 모든 클래스는 생성자가 반드시 존재하며, 하나 이상을 가질 수 있다.
● 생성자를 호출하는 코드에서 여러 생성자 중 필요에 따라 호출해서 사용할 수 있음
● 클래스에 생성자를 따로 구현하면 기본 생성자 (default constructor)는 제공되지 않음

 

// 생성자_예제1. 설계 코드

 

package ch04;

 

public class Bus {

 

// 속성(상태)

int busNumber;

int count;

int money;

 

// 생성자 만들어 보기 생성자는 리턴 타입이 없다.

// 메서드와 구분하세요. 반드시 클래스 이름과 동일해야 한다.

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

 

public Bus() {

 

}

//개발자가 직접 생성자를 명시하는 것을 " 사용자 정의 생성자 "라고 부른다.

 

public Bus(int busNumber) {

this.busNumber = busNumber;

} // end of take

 

// 행위(기능)

 

public void take(int m) {

// money += m;

count++;

} // end of take

 

public void showinfo() {

System.out.println("버스 번호 :" + busNumber);

System.out.println("승객 수: " + count);

System.out.println("금액: " + money);

 

} // end of showinfo

 

} // end of class

 

// 생성자_예제1. 객체 코드

 

package ch04;

 

public class BusMainTest1 {

 

// 메인함수

public static void main(String[] args) {

 

// bus100 <-- stack

// 객체 <-- heap 메모리 영역에 올라간다.

// 생성자 사용해 보기(사용자 정의 생성자)

Bus bus100 = new Bus();

bus100.busNumber = 100;

bus100.count = 100;

bus100.money = 100;

 

} // end of main

 

} // end of class


 

// 생성자_예제2. 설계 코드

 

package ch04;

 

public class Student {

 

// 기본 생성자는 자동으로 컴파일러가

// .class 생성할 때 만들어 준다.

// 단, 사용자 정의 생성자가 없는 경우에만 자동으로 만들어준다.

 

String name;

 

public Student(String name) {

this.name = name;

}

 

} // end of class

// 생성자_예제2. 설계 코드

 

package ch04;

 

public class Student {

 

// 기본 생성자는 자동으로 컴파일러가

// .class 생성할 때 만들어 준다.

// 단, 사용자 정의 생성자가 없는 경우에만 자동으로 만들어준다.

 

String name;

 

public Student(String name) {

this.name = name;

}

 

} // end of class

 

// 생성자_예제2. 객체 코드

 

package ch04;

 

public class StudentMainTest {

 

// 메인함수

public static void main(String[] args) {

 

} // end of main

 

} // end of class


// 생성자 오버로딩 예제1. 설계 코드

 

package ch04;

 

public class Subway {

 

// 1. 멤버 변수를 설계

// 2. 생성자 2개 이상 설계

// 3. 지하철에 맞는 메서드를 설계

int subwayNumber;

int count;

int money;

 

public Subway(int subwayNumber) {

this.subwayNumber = subwayNumber;

}

 

public Subway(int a, int c) {

this.subwayNumber = a;

this.count = c;

 

}

 

// 매개 변수 3개 받는 생성자 설계 하기

public Subway(int b, int d, int e) {

this.subwayNumber = b;

this.count = d;

this.money = e;

}

 

public void showinfo() {

System.out.println("지하철 번호 :" + subwayNumber);

System.out.println("승객 수: " + count);

System.out.println("금액: " + money);

System.out.println(" ========== ");

 

}

 

} // end of class

// 생성자 오버로딩_예제1. 객체 코드

 

package ch04;

 

//생성자 오버로딩 test

// 메인코드 ※실행하는 쪽에는 코드에 시작점 작성

 

public class SubWayMainTest {

 

public static void main(String[] args) {

 

Subway subway100 = new Subway(50);

subway100.showinfo();

 

Subway subway200 = new Subway(3, 3, 3);

subway200.showinfo();

 

} // end of main

 

} // end of class

Console 보기

지하철 번호 :50

승객 수: 0

금액: 0

==========

지하철 번호 :3

승객 수: 3

금액: 3

==========

 

// 생성자 오버로딩 예제2. 설계 코드

 

package ch04;

 

public class Human {

// 속성

String name;

int height; // 키

double weight; // 몸무게

boolean isMan; // 성별(남자)?

 

public Human(String name) {

this.name = name;

// 생성자 영역 안에서 필요하다면

// 식을 넣거나, 값을 초기화 하거나

// 또는 다른 메서드를 호출할 수 있다.

isMan = true;

if (this.height == 0) {

this.height = 180;

}

showinfo();

}

 

public Human(String name, boolean isMan) {

this.name = name;

this.isMan = isMan;

showinfo();

}

 

// 행위

public void showinfo() {

System.out.println("키 : " + height);

System.out.println("몸무게 : " + weight);

System.out.println("성별 남자인가? : " + isMan);

System.out.println("이름 : " + name);

}

 

} // end of class

 

// 생성자 오버로딩_예제2. 객체 코드

 

package ch04;

 

public class HumanMainTest {

 

// 메인함수

public static void main(String[] args) {

System.out.println("================");

Human human1 = new Human("야스오");

System.out.println("================");

Human human2 = new Human("소나", false);

// System.out.println("야스오 생성 완료");

System.out.println("================");

 

} // end of main

 

} // end of class