반응형
[Java Class.02] 필드, 생성자
1.필드(Field)
- 필드는 객체의 데이터나 현재 상태값을 저장하는 일종의 변수 같은 개념이다.
- 예를 들어, 자동차 객체는 제작회사, 색깔, 가격 등의 데이터가 필드라고 할 수 있다.
- 객체의 명사적인 특성을 필드라고 생각하면 된다.
public class Car {
// 필드 선언
String company; // 제작 회사
int speed; // 속도
int price; // 가격
}
2.필드 초기값
초기값이 미리 입력되지 않은 필드는 객체 생성 시 아래와 같이 자동으로 기본 초기값으로 설정된다.
분류 | 타입 | 초기값 | |
기본타입 | 정수 | byte | 0 |
char | 빈 칸 | ||
short | 0 | ||
int | 0 | ||
long | 0L | ||
실수 | float | 0.0F | |
double | 0.0 | ||
논리 | boolean | false | |
참조타입 | 배열 | null | |
클래스(String 포함) | null | ||
인터페이스 | null |
3.생성자(Constructor)
- 생성자는 new 연산자를 이용해 클래스로부터 객체를 만들 때 호출되어 객체의 초기화를 담당한다.
- 객체의 초기화: 필드를 초기화 하거나 메소드를 호출하여 객체를 사용할 준비를 하는 것.
4.기본 생성자
- 모든 클래스는 생성자가 반드시 존재한다.
- 클래스 내부에 생성자 선언을 생략하면 컴파일러가 기본 생성자(Default Constructor)를 자동 추가한다.
public class Car {
int price;
public Car() { // 기본 생성자 자동추가
}
}
- 그래서 클래스에 생성자를 만들지 않아도 다음과 같이 new 연산자 뒤에 기본 생성자를 호출해서 객체를 생성할 수 있다.
Car myCar = new Car(); // 여기에서 Car()가 바로 기본 생성자
- 하지만, 클래스에 명시적으로 선언한 생성자가 1개라도 있으면, 컴파일러는 기본 생성자를 추가하지 않는다.
5.생성자 선언
- 생성자 명령 블록 내부에서 필드에 초기값을 저장하거나 메소드를 호출하여 여러 가지 준비를 미리 할 수 있다.
public class Car {
String color;
int price;
public Car(String color, int price) { // 생성자
this.color = color; // this: 객체 자신, this.color: 필드, color: 매개변수
this.price = price;
}
}
- this는 객체 자신을 가리키는 명령어이다.
- 위 Car 클래스의 생성자를 이용해서 객체를 만들어 활용하는 아래의 코드를 보세요.
public class Main {
public static void main(String[] args) {
Car car1 = new Car("green", 2000);
System.out.println(car1.color); // green
System.out.println(car1.price); // 2000
}
}
6.생성자 오버로딩(Constructor Overloading)
- 자바에서는 다양한 방법으로 객체를 생성할 수 있도록 생성자 오버로딩(Overloading)을 제공한다.
- 생성자 오버로딩이란, 매개 변수를 달리하여 같은 이름의 생성자를 여러 개 선언하는 것을 말한다.
public class Car {
String color;
int price;
Car() { // 생성자 1
}
Car(String color) { // 생성자 2
this.color = color;
}
Car(String color, int price) { // 생성자 3
this.color = color;
this.price = price;
}
}
- 생성자가 오버로딩되어 있을 경우, new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 개수에 의해 호출될 생성자가 결정된다.
public class Main {
public static void main(String[] args) {
Car car1 = new Car(); // 생성자 1
Car car2 = new Car("red"); // 생성자 2
Car car3 = new Car("red", 10000); // 생성자 3
System.out.println(car1.company);
System.out.println(car2.company + "," +car2.color);
System.out.println(car3.company + "," + car3.color + "," + car3.price);
}
}
7.다른 생성자 호출 this()
- 생성자 오버로딩이 많아질 경우, 중복된 코드가 발생한다.
public class Car {
String company;
String color;
int price;
Car() { // 생성자 1
}
Car(String company) { // 생성자 2
// 중복코드
this.company = company;
this.color = "red"; // 기본값
this.price = 1000; // 기본값
}
Car(String company, String color) { // 생성자 3
// 중복코드
this.company = company;
this.color = color;
this.price = 1000; // 기본값
}
Car(String company, String color, int price) { // 생성자 4
// 중복코드
this.company = company;
this.color = color;
this.price = price;
}
}
- 이 경우, 필드 초기화 같은 것은 하나의 생성자에서만 코딩하여 중복된 코드를 줄일 수 있다.
public class Car {
String company;
String color;
int price;
Car() { // 생성자 1
}
Car(String company) { // 생성자 2
this(company, "red", 1000); // 다른 생성자 호출
}
Car(String company, String color) { // 생성자 3
this(company, color, 1000); // 다른 생성자 호출
}
Car(String company, String color, int price) { // 생성자 4
this.company = company;
this.color = color;
this.price = price;
}
}
- this()는 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄에서만 허용된다.
- this()의 매개변수는 호출되는 생성자의 매개 변수에 맞게 작성되어야 한다.
public class Main {
public static void main(String[] args) {
Car car1 = new Car("USA");
Car car2 = new Car("USA","green");
Car car3 = new Car("USA","green", 2000);
System.out.println(car1.company);
System.out.println(car2.company + "," +car2.color);
System.out.println(car3.company + "," + car3.color + "," + car3.price);
}
}
[퀴즈1] 다음 클래스에서 생성자의 중복을 this()로 제거해 보세요.
public class Book {
String title;
String author;
int year;
int price;
Book(String title) {
this.title = title;
this.author = "unknown";
this.year = 0;
this.price = 0;
}
Book(String title, String author) {
this.title = title;
this.author = author;
this.year = 0;
this.price = 0;
}
Book(String title, String author, int year) {
this.title = title;
this.author = author;
this.year = year;
this.price = 0;
}
Book(String title, String author, int year, int price) {
this.title = title;
this.author = author;
this.year = year;
this.price = price;
}
}
[퀴즈2] 위의 Book 클래스에서 Book 객체를 생성하는 4가지 방법을 모두 코딩해 보세요.
public class Main {
public static void main(String[] args) {
Book book1 = new....
Book book2 = new....
Book book3 = new....
Book book4 = new....
}
}
728x90
반응형
'자바(Java) > 자바 클래스' 카테고리의 다른 글
[Java Class.06] 상속(Inheritance) (0) | 2024.02.23 |
---|---|
[Java Class.05] Singleton & Final(싱글톤&파이널) (0) | 2024.02.23 |
[Java Class.04] Member of Instance & Static (0) | 2024.02.23 |
[Java Class.03] 메소드(Method) (0) | 2024.02.18 |
[Java Class.01]객체 지향 프로그래밍(Object Oriented Programming) (0) | 2024.02.18 |
댓글