생성자
기본 생성자 & 오버로딩(여러가지 생성자를 정의하는 생성자)
생성자(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
'Java' 카테고리의 다른 글
[java] 접근 제어 지시자와 정보은닉 (0) | 2023.08.01 |
---|---|
[java] 객체와 객체간의 상호작용 (0) | 2023.07.31 |
[java] 인스턴스화 생성과 힙 메모리 (0) | 2023.07.31 |
[java] 함수와 메서드 (0) | 2023.07.28 |
[java] 객체 지향 언어 (0) | 2023.07.27 |