생성자
- 클래스로부터 객체를 만드는 새로운 메소드 클래스로부터 new 연산자로 객체를 생성할 때 호출
- 객체의 생성과 초기화를 담당
객체초기화
- 필드를 초기화 하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것
생성자가 성공적으로 실행
- 힙영역에 객체 생성되고 객체 번지가 리턴
기본 생성자
- 클래스 내부에 생성자 선언 생략할 경우 바이트 코드에 자동 추가
[public] 클래스() {}
- 그래서 클래스에 생성자 선언하지 않아도 생성자가 자동 추가 된것이므로 new 생성자()로 객체 생성 가능
생성자 선언
클래스 ( 매개변수선언, ...) {
//객체의 초기화코드
}
- 매개 변수 선언은 생략할 수도 있고(위쪽 서식들과 같이) 여러개 선언해줄 수도 있음( 여러개 선언해줄 땐 생략x)
-
public class Car { //생성자 Car(String model, String color, int maxSpeed) {...} }
- 클래스에 생성자가 명시적으로 선언 되었을 경우 반드시 선언된 생성자 호출하여 객체 생성
Car myCar = new Car("그랜저", "검정", 300);
이들 값을 가지고 생성자 {...} 안쪽 부분이 실행 됨
생성자의 필드 초기화
- 생성자는 new연산자에 의해 호출이되어 객체를 만들기도 하지만(위쪽) 객체의 데이터를 초기화 하는 역할도 함
public class Korean {
//필드
String nation = "대한민국";
String name;
String ssn;
//생성자
public Korean(String n, Stting s) {
name = n;
ssn = s;
}
}
국적은 다 똑같기 때문에 필드 값에 고정으로 주고
이름과 주민번호는 다 다르기 때문에 생성자에서 초기값을 줌
생성자가 필드를 초기화 하는 역할을 해줌
Korean K1 = new Korean("김자바", "012345-6789021");
Korean K2 = new Korean("박자바", "325164-5579156");
- 생성자가 필드의 초기화를 위해 사용된다고 그러면 매개변수 이름은 필드의 이름과 유사하거나 동일한 것으로 사용 권장 -매개변수 이름만 보고 어떤 필드와 연관이 있는지 알기 위함
- 필드와 매개변수 이름이 완전히 동일한 경우 this.필드로 표현 (this.내가가지고있는 필드 란 뜻)
생성자 오버로딩
- 매개변수를 달리하는 생성자 여러개 선언
- 외부에서 제공되는 다양한 데이터 사용하여 객체 초기화 하려면 생성자 역시 다양화 해야
-
public class 클래스{ 클래스([타입,매개변수,...]) { ... } 클래스([타입,매개변수,...]) { ... } } }
클래스 블록 사이에 클래스 이름과 동일한 이름(){} 가 있으면 생성자를 얘기한다.
이 생성자가 여러개일때 매개변수의타입,개수, 순서가 다르게 선언돼야 한다.
public class Car {
Car() {...}
Car(string model) {...}
Car(string model, String color) {...}
Car(string model, String color, int maxSpeed) {...}
Car car1 = new car();
Car car2 = new car("그랜저");
Car car2 = new car("그랜저", "흰색");
Car car2 = new car("그랜저", "흰색", 300);
- 매개 변수의 타입, 개수, 선언된 순서 같은경우, 매개변수 이름만 바꾸는 것은 생성자 오버로딩아님
Car(String model, Stringcolor) {...}
Car(Stringcolor, String model) {...} //오버로딩 아님
------ 실습 예제 풀기----
더보기
생성자는 호출과 정의로 나뉜다
public class Dogtest {
public static void main(String[] args) {
Dog d = new Dog("바둑이", 5.72, 5); //생성자 호출
}
}
class Dog {
String name;
double weight;
int age;
/* 생성자 - 객체 생성 및 초기화 (생성자 정의) */
Dog(String s, double d, int i) {
name = s; // 이름 초기화
weight = d; // 무게 초기화
age = i; // 나이 초기화
}
}
생성자 호출과 정의
Duck dk = new Duck("덕구", 2); //생성자 호출
Duck (String s, int a) {
name = s;
age = a'
}
//생성자 정의
'Java' 카테고리의 다른 글
[Java]문자열 출력 (0) | 2022.02.14 |
---|---|
[Java] 프로그래밍이란 (0) | 2022.02.14 |
[JAVA] 필드 (0) | 2022.02.08 |
[JAVA] 객체 지향 프로그래밍 (0) | 2022.02.02 |
[JAVA ] 참조 타입(배열) (0) | 2022.01.31 |