내일배움캠프 14일차 TIL - 생성자

iy·2024년 1월 3일

TIL

목록 보기
13/37

생성자(constructor)

  • ⭐인스턴스가 생성될 때마다 호출되는 '인스턴스(객체:iv묶음) 초기화 메서드'
  • 인스턴스 생성시 수행할 작업(iv 초기화)에 사용
// 객체 생성
Time t = new Time();

// iv 초기화
t.hour = 12;
t.minute = 34;
t.second = 56;

// 생성자 호출
Time t = new Time(12,34,56);
  • 이름이 클래스 이름과 같아야 한다.
  • 리턴값이 없다.(void 안 붙임)
  • 모든 클래스는 반드시 생성자를 가져야 한다.

생성자도 오버로딩이 가능해 하나의 클래스에 여러 개의 생성자가 존재할 수 있다.

class Card {
    ...
    //생성자 오버로딩
    Card(){ //매개변수 없는 생성자
        // 인스턴스 초기화 작업
    }

    Card(String kind, int number){ //매개변수 있는 생성자
        // 인스턴스 초기화 작업
    }
}

주의할 점은 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것은 아니다!

인스턴스 생성 과정

Card c = new Card();
  1. 연산자 new에 의해 메모리(heap)에 Card 클래스의 인스턴스가 생성된다.
  2. 생성자 Card()가 호출되어 수행된다.
  3. 연산자 new의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장된다

기본 생성자(default constructor)

  • 매개변수 없는 생성자
  • 생성자가 하나도 없을 때만 컴파일러가 자동 추가

클래스이름() {} //기본 생성자

Point() {} //Point 클래스의 기본 생성자
class Data_1 {
    int value;
}

class Data_2 {
    int value;

    Data_2(int x) { // 매개변수가 있는 생성자
        value = x;
    }
}

class Ex6_11 {
    public static void main(String[] args){
        Data_1 d1 = new Data_1(); //ok
        Data_2 d2 = new Data_2(); // 컴파일 에러 발생
    }
}

매개변수가 있는 생성자

class Car{
    String color; // 색상
    String gearType; // 변속기 종류 - auto(자동), manual(수동)
    int door; // 문의 개수

    Car(){}// 기본생성자
    Car(String c, String g, int d){ // 매개변수가 있는 생성자
        color = c;
        gearType = g;
        door = d;
    }
}
// 생성자 없을 때 : 연산자 new로 인스턴스 생성 후 생성자 호출하고 초기화 진행
Car c = new Car();
c.color = "white";
c.gearType = "auto";
c.door = 4;

// 생성자 있을 때 : 생성자 통해서 동시에 초기화 가능
Car c = new Car("white","auto",4);

// 비교적으로 더 간단하게 코드 작성 가능

😭
오늘 강의를 듣고 실습을 진행하면서 자꾸 에러 코드라는 표시를 봤다. 인스턴스 생성에서 나는 오류였다.. 매개변수가 있는 생성자를 선언하고 빈 내용의 생성자를 통해 인스턴스를 생성하려고 해서였다. 실습 진행하는 데 애를 먹고 결국 생성자 부분 강의와 자바의 정석 책으로 이 부분을 다시 공부했다.. 아무것도 없는 빈 생성자는 생성자가 하나도 없을 때만 컴파일러가 자동 추가!! 한다는 걸 잊지 않기 위해 남겨놓는다.

참고 자료:
내일배움캠프 강의 (Java 문법 종합반 KDT 실무형 스프링 백엔드 엔지니어 양성과정 4회차)
책 자바의 정석 1 (남궁성저자)
자바의 정석 강의 https://youtu.be/HXh2ZSgg-oQ?si=_S54gJfIVxexeY9S

0개의 댓글