[개인공부] ch-6 생성자, 기본 생성자

Walter Mitty·2022년 11월 5일
0

개인공부

목록 보기
8/40
post-thumbnail
  • 생성자(constructor)
    • 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
      • 인스턴스 = 객체(iv묶음)을 초기화 해주는 메서드이다.
    • 인스턴스 생성시 수행할 작업(iv 초기화)에 사용
Time t = new Time();
t.hour = 12;
t.minute = 34;
t.second = 56;

이렇게 초기화해줘야 하는 것을 한줄에! ⇨ 생성자 호출

Time t = new Time(12, 34, 56);

생성자를 호출했다는 말은 생성자를 사용했다는 것이다. = iv를 초기화!


  • 생성자 규칙

    • 이름이 클래스 이름과 같아야 한다.
    class Card {
    	Card() { // 매개변수 없는 생성자
      	// 인스턴스 초기화 작업
      }
    	
      // 생성자 오버로딩
      Card(String kind, int number) { // 매개변수 있는 생성자
      	// 인스턴스 초기화 작업
      }
    }
    • 리턴값이 없다 (void 안붙임)
      • 항상 반환값이 없으므로
    • 모든 클래스는 반드시 생성자를 가져야 한다.(한개 이상!)
  • 기본 생성자(default constructor)

    • 매개변수가 없는 생성자
    • 생성자가 하나도 없을 때 컴파일러가 자동 추가해준다.
클래스이름(){} // 기본 생성자
Point() {}  // Point 클래스의 기본 생성자
  • 매개변수가 있는 생성자

  • 생성자 this()
    • 생성자에서 다른 생성자를 호출할 때 사용
    • 다른 생성자 호출시 첫 줄에서만 사용가능

  • 참조변수 this (괄호 붙은건 생성자 this()!)
    • 인스턴스 자신을 가리키는 참조변수
    • 인스턴스 메서드(생성자 포함)에서 사용가능
    • 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용



  • 변수의 초기화
    • 지역변수(lv)는 수동 초기화 해야한다(사용전 꼭!!)
      • 수동 초기화 = 우리가 직접 초기화!
    • 멤버변수(iv, cv)는 자동 초기화된다.
  • 멤버변수의 초기화
  1. 명시적 초기화(=) / 선언시 대입연산자 사용

  2. 초기화 블럭 ⇨ 초기화가 복잡해지면 여러문장이 필요하고! 이때

  • 인스턴스 초기화 블럭: {} ⇨ iv 초기화 할 때
  • 클래스 초기화 블럭 : static {} ⇨ cv 초기화 할 때
  1. 생성자
  • iv 초기화 할 때 사용
  • 복잡한 초기화에 사용한다

  • cv, iv 초기화 종류
    • 자동초기화: 0으로 초기화
    • 간편초기화: = 대입연산자 사용
    • 복잡초기화: {} / static {} / 생성자 사용
      - {} 는 거의 안쓴다
      - static{} 는 cv 초기화할 때 사용
      - 생성자는 iv 초기화할 때 사용

  • 멤버변수의 초기화
    • 클래스 변수 초기화 시점: 클래스가 처음 로딩될 때 단 한번
      • 클래스가 처음으로 메모리에 올라갈 때
    • 인스턴스 변수 초기화 시점: 인스턴스가 생성될 때 마다


      객체를 또 만들면 cv는 초기화 안됨(단 한번만 되니까!), 인스턴스 변수는 또 초기화 될 수 있다.

순서를 보면
1. cv → iv 순으로 초기화
2. 자동 → 간단 → 복잡 초기화 순으로 진행된다.

0개의 댓글