1. 기본 생성자
- 클래스는 생성자가 반드시 존재하고 생성자를 하나 이상 가질 수 있다.
- 클래스 내부에 생성자 선언을 생략했다면 컴파일러는 다음과 같이 중괄호{} 블록 내용이 비어 있는 기본 생성자를 바이트 코드에 자동 추가
//소스 파일(Car.java)
public class Car{
}
/* 컴파일⬇ */
public class Car{
public Car() { } //자동 추가
}
❗ 그러나 클래스에 명시적으로 선언한 생성자가 1개라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.
- 명시적으로 생성자를 선언하는 이유는 객체를 다양한 값으로 초기화하기 위해서
2. 필드 초기화
- 클래스로부터 객체가 생성될 때 필드는 기본 초기값으로 자동 설정
- 두 가지 방법으로 값 초기화 가능
1) 필드를 선언할 때 초기값을 주는 방법
- 동일한 클래스로부터 생성되는 객체들은 모두 같은 값을 갖게 된다.
- 객체 생성 후 초기값을 변경할 수 있지만, 객체 생성 시점에는 필드의 값이 모두 같다.
public class Korean{
//필드
String nation = "대한민국",
String name;
String ssn;
//생성자
public Korean(String n, String s){
name = n;
ssn = s;
}
}
2) 생성자에서 초기값을 주는 방법
public Korean{
this.name = name;
//필드 //매개변수
this.ssn = ssn;
}
- 필드와 매개 변수 이름은 동일한 이름으로 사용하는 것이 통상적이다.
- 하지만 동일하다면 생성자 내부에서 해당 필드에 접근할 수 없기 때문에 필드 앞에 'this.'을 붙인다.
❕❕this = 객체 자신의 참조
3. 생성자 오버로딩
- 외부에서 제공되는 다양한 데이터들을 이용해서 객체를 초기화하려면 생성자도 다양화될 필요가 있다.
- 다양한 방법으로 객체를 생성을 위해
생성자 오버로딩
매개 변수를 달리하는 생성자를 여러 개 선언하는 것
public class 클래스{
클래스 ([타입 매개변수, ...]) { //생성자의 오버로딩 - 매개 변수의 타입, 개수, 순서가 다르게 선언
...
}
클래스 ([타입 매개변수, ...]) { // (위와 같음)
...
}
}
- 다음은 Car 클래스에서 생성자를 오버로딩한 예
public class Car {
Car() {...}
Car(String model) {...}
Car(String model, String color) {...}
}
❗❗생성자 오버로딩 시 주의할 점❗❗
- 매개 변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우 매개 변수 이름만 바꾸는 것은 생성자 오버로딩이 아님
- 생성자 오버로딩이 많아질 경우, 생성자 간의 중복된 코드가 발생
-----> 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법
4. 다른 생성자 호출 : this()
- 자신의 다른 생성자를 호출하는 코드
- 반드시 생성자의 첫 줄에서만 허용
- 예제
Car(String model){
this.model = model;
this.color = "은색"; //model, color, maxSpeed 중복
this.maxSpeed = 250;
}
Car(String model, String color){
this.model = model;
this.color = color;
this.maxSpeed = 250;
}
Car(String model, String color, int maxSpeed){
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
- this()를 이용
public class Car{
String company = "현대자동차";
String model;
String color;
int maxSpeed;
Car(){
}
Car(String model){
this(model, "은색", 250);
}
Car(String model, String color){
this(model, color, 250);
}
Car(String model, String color, int maxSpeed){
this.model = model;
this.color = color; //위 두 개의 생성자를 호출
this.maxSpeed = maxSpeed;
}
}
5. 메소드 이름
- 숫자로 시작하면 안 되고, $와 _ 를 제외한 특수 문자를 사용하지 말아야 함.
- 메소드 이름은 소문자로 작성함
- 혼합된 이름이라면 뒤이어 오는 단어의 첫 글자는 대문자로 작성
'Java' 카테고리의 다른 글
[ch06 클래스] 생성자 (0) | 2022.07.20 |
---|---|
[ch06 클래스] 객체 지향 프로그래밍 (0) | 2022.07.19 |
[ch04 조건문과 반복문] (0) | 2022.07.18 |
[ch05 참조타입] 열거 타입 (0) | 2022.07.11 |
[ch05 참조타입] 배열 (0) | 2022.07.11 |