생성자
객체가 만들어 질 때 초기값을 위해 실행되는 (특별한)메소드
객체가 생성될 때 자동으로 호출되는 메소드
생성자 안에는 값을 초기화 하는 코드가 있다.
생성자 안에서 변수를 선언하지 않는다.
생성자의 이름은 반드시 클래스 이름과 동일해야 한다.
생성자는 메소드이므로 여러 개 작성 가능(오버로딩)
생성자는 new 연산자를 통해 객체를 만들 때 한 번만 호출된다.
생성자는 리턴타입이 없다.
매개변수(전달인수)와 실행코드가 없는 단순 생성자를 '기본 생성자'라 한다.
또는 디폴트 생성자라고도 한다.
기본 생성자는 조건에 따라 자동으로 생성되기도 하고 직접 입력 해줘야 한다.
자동생성: 생성자가 하나도 없을 때 컴파일러가 자동으로 생성한다.
생성자가 하나라도 있을 경우 기본 생성자는 자동으로 생성되지 않는다.
왜 하는가?
-main()메소드를 간단 명료하게 제작(편하다)
-메모리 할당을 예약(참조변수)
-네트워크 관련 작업 등 여러가지 기능
public class Constructor_01 {
public static void main(String[] args) {
//객체가 생성되면 해당 이름으로 되어 있는 생성자가 있는지 확인
//car 객체를 만들면 Car 클래스 안에 Car()로 되어 있는 생성자가 있는지 확인한다.
Car car = new Car();
//해당 클래스의 생성자가 없으면 자동생성해준다.
Car2 car2 = new Car2();
//해당 클래스의 생성자가 매개변수가 있는경우도 있다.
Car3 car3 = new Car3("포르쉐", 30000);
}
}
//생성자가 있는 클래스
class Car {
int speed;
//Car 클래스의 생성자
//만약 없다면 컴퓨터가 자동으로 만들어준다
Car(){
System.out.println("Car 클래스에 생성자가 만들어졌습니다.");
}
}
//생성자 없는 클래스
class Car2 {
}
//매개변수 생성자가 있는 클래스
class Car3 {
String name;
int price;
//객체 생성할때 넣은 매개변수를 전역변수에 넣을 수 있다.
Car3(String name, int price){
this.name = name; //매개변수이름과 멤버함수와 같으면 this를 붙여서 식별해준다.
this.price = price; //this는 자기자신(Class)을 의미 즉! 여기선 class Car3의 멤버변수인 name과 price를 의미한다.
System.out.println("차종: " + name +" / 가격: " + price);
}
}
초기화
public class C15constructor {
public static void main(String[] args) {
MyClass15 o1 = new MyClass15(27);
o1.printAge();
//이렇게 초기화 하면 새로 생성된 인스턴스의 값이 들어감
MyClass15 o2 = new MyClass15(30);
o2.printAge();
}
}
class MyClass15 {
private int age;
//생성자: 인스턴스 만들 때 처음 해야하는 일(코드) 작성
//주로 필드 초기화 코드 작성
//초기화가 안되면 age 값에 기존에 호출된 값이 남아있음
MyClass15(int age) {
this.age = age;
}
public void printAge() {
System.out.println("age : " + age);
}
}
상위 클래스에 생성자가 있는경우
public class C16extends {
public static void main(String[] args) {
MySubClass16 o1 = new MySubClass16();
}
}
class MyClass16 {
MyClass16() {
//초기화 하는 코드 작성됨....
System.out.println("상위 클래스 초기화 코드");
}
}
class MySubClass16 extends MyClass16 {
MySubClass16() {
//상속받은 경우는 부모 클래스 생성자 호출이 꼭 되어야함 super();
//맨위에 작성 얘가 먼저 작동해야함 무조건
super();
//MySubClass16 인스턴스 필드 초기화 코드들....
System.out.println("하위 클래스 초기화 코드");
}
}
반응형
'JAVA > 기본' 카테고리의 다른 글
추상 클래스 (abstract class) / 추상 메소드 (abstract method) (0) | 2023.08.30 |
---|---|
상속 Extends / 오버라이딩(overriding) / 오버로딩(Overloading) (0) | 2023.08.23 |
wrapper class 래퍼클래스(포장 클래스) (참조타입) (0) | 2023.08.17 |
기본적인 타입 (0) | 2023.08.16 |
Optional<> (0) | 2023.02.27 |