본문 바로가기
자바(Java)/자바 클래스

[Java Class.02]필드, 생성자

by 긱펀 2024. 2. 18.
반응형

[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
반응형

댓글