여니의 프로그래밍 study/Java

[Java] 생성자, 객체 생성

여니's 2022. 7. 30. 11:51

목차

     

     


    생성자란?

    : 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'를 의미한다.

    (참고로 연산자 new가 인스턴스를 생성하는 것이지 생성자가 생성하는 것이 아니다)

    모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 한다.

    참고로 클래스 내에 생성자가 하나도 없을 때 자동적으로 컴파일러가 기본생성자를 제공한다

     

    Yeony y= new Yeony();
    /*
    1. 연산자 new에 의해 메모리(Heap)에 Yeony 클래스의 인스턴스가 생성된다.
    2. 생성자 Yeony()가 호출되어 수행된다.
    3. Yeony 인스턴스의 주소가 반환되어 y 변수에 저장된다.
    */

    생성자의 조건

    - 생성자의 이름 == 클래스 이름

    - 생성자는 리턴값이 없다.

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

     

     

    인스턴스

    : 설계도(클래스)를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체를 의미한다.

    즉, 객체를 소프트웨어에 실체화한 것을 의미한다.

    (클래스에 소속된 개별적인 객체를 의미하며

    해당 클래스의 구조로 저장공간에 할당된 실체를 의미한다. 

    참고로 인스턴스마다 독립적인 저장 공간을 갖는다.)


    this(), this

    : 생성자에서 다른 생성자 호출할 때 쓰인다.

    생성자의 이름으로 클래스 이름 대신 this를 사용한다.

    ** 한 생성자에서 다른 생성자를 호출할 땐 반드시 첫 줄에서만 호출이 가능하고 this를 사용해야 한다.** 

     

    첫 줄에서만 호출이 가능한 이유?

    : 생성자 내에서 초기화 작업 도중에 다른 생성자를 호출하면,

    호출된 다른 생성자 내에서도 멤버 변수의 값을 초기화를 할 것이므로

    다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있기 때문이다.

     

     

    매개변수로 선언된 변수와 인스턴스 변수의 이름이 똑같을 때

    두 변수가 서로 구분이 안된다.

    따라서 인스턴스 변수 앞에 this를 사용하여 구별한다

    this.인스턴스변수 = 매개변수

     

    this 인스턴스 자신을 가리키는 참조 변수로 인스턴스 주소가 저장되어 있다.
    => 참조 변수
    this(), this(매개변수) 생성자, 같은 클래스 내의 다른 생성자를 호출할 때 사용함
    => 생성자

    super

    : 조상 클래스로부터 상속받은 멤버를 참조할 때 사용되는 참조 변수이다. 상속받은 멤버와 자신의 멤버가 이름이 같을 때 super를 붙여서 구별한다 (this랑 비슷한 개념)변수만이 아니라 메서드 역시 super를 써서 호출할 수 있다. 특히 조상 클래스의 메서드를 자손 클래스에서 오버라이딩 한 경우 super를 사용한다. 

     

     

    super()

    : 조상 클래스의 생성자를 호출할 때 사용한다.Object 클래스 (최상위 클래스)를 제외한 모든 클래스의 생성자는첫 줄에 반드시 자신의 다른 생성자 또는 조상의 생성자를 호출해야 한다.그렇지 않으면 컴파일러는 생성자의 첫 줄에 super()를 자동적으로 추가해준다. 

     

    Yeony(int x,int y){
    	super(); // 조상 클래스 Object 클래스의 생성자를 호출한다. Object()
        this.x=x;
        this.y=y;
    }

    '여니의 프로그래밍 study > Java' 카테고리의 다른 글

    [Java] 제어자  (0) 2022.07.30
    [Java] 자바 기본 API  (0) 2022.07.30
    [Java] 상속  (0) 2022.07.24
    [Java] 변수와 메서드  (0) 2022.07.18
    [Java] 자바 8버전, 이클립스 다운로드 하는 방법  (0) 2022.07.06