Home 김영한의 실전 자바 - 생성자
Post
Cancel

김영한의 실전 자바 - 생성자

생성자

  • 김영한님의 실전 자바 강의 중 생성자 챕터를 학습하며 객체 생성 시 초기화 작업을 수행하는 생성자의 개념과 활용법을 정리함
  • 생성자가 필요한 근본적인 이유와 this, this() 키워드의 차이점을 분석함

</br></br>

생성자가 필요한 이유

  • 객체를 생성한 직후에 멤버 변수의 초기값을 설정하는 작업은 빈번하게 발생함

초기화 작업의 반복

  • 생성자가 없다면 객체를 생성한 후 매번 별도의 초기화 메서드를 호출하거나 직접 변수에 값을 대입해야 함
  • 초기화 코드가 중복되어 작성될 가능성이 높음
  • 개발자가 실수로 초기화 메서드 호출을 누락할 경우 값이 비어있는 불완전한 객체가 생성될 위험이 있음

생성자의 도입

  • 객체 생성 시점에 즉시 필요한 기능을 수행하도록 보장함
  • 객체를 생성하는 new 명령어 단계에서 초기화 로직을 포함하여 실수를 원천 차단함

</br></br>

this 키워드

  • 인스턴스 자기 자신의 참조값을 가리키는 키워드임

멤버 변수와 매개변수의 구분

  • 메서드나 생성자의 매개변수 이름이 멤버 변수와 동일할 때 구분을 위해 사용함
  • 자바 변수 호출 우선순위
    • 코드 블록 내부의 지역 변수나 매개변수가 가장 높은 우선순위를 가짐
    • 이름이 겹치면 멤버 변수보다 매개변수가 먼저 선택됨
  • 멤버 변수에 접근할 때 this.을 붙여서 인스턴스 변수임을 명시함
1
2
3
4
5
6
7
8
9
public class Product {
    String name;
    int price;

    void initProduct(String name, int price) {
        this.name = name; // this.name은 멤버 변수, name은 매개변수
        this.price = price;
    }
}
  • this를 생략할 수 있는 경우
    • 이름이 중복되지 않는다면 this를 생략해도 멤버 변수에 자동으로 접근함
    • 최근에는 IDE가 색상으로 변수를 구분해주므로 이름이 겹치는 경우에만 주로 사용함

</br></br>

생성자의 특징과 문법

  • 생성자는 객체 생성 직후 호출되는 특별한 메서드임

문법 규칙

  • 이름이 클래스 이름과 완전히 동일해야 함
  • 반환 타입이 존재하지 않으며 void도 적지 않음
  • 대문자로 시작하는 클래스 명명 규칙을 그대로 따름

동작 방식

  • new 키워드를 사용하여 인스턴스를 생성할 때 마지막의 괄호 ()가 생성자 호출을 의미함
  • 생성자 호출 시 인수를 전달하여 객체 내부 데이터를 즉시 채움

생성자 호출 흐름

</br></br>

기본 생성자

  • 매개변수가 없는 생성자를 의미함

자동 생성 조건

  • 클래스 내부에 개발자가 정의한 생성자가 하나도 없을 때만 컴파일러가 자동으로 생성함
  • 생성자가 하나라도 정의되어 있다면 컴파일러는 기본 생성자를 만들지 않음

제약 사항

  • 생성자를 직접 정의한 경우 반드시 해당 생성자의 매개변수 규칙을 지켜서 호출해야 함
  • 기본 생성자 없이 유인자 생성자만 존재할 때 빈 괄호로 객체를 생성하면 컴파일 오류가 발생함
  • 이는 필수 데이터 입력을 강제하여 프로그램의 안정성을 확보하는 장치가 됨

</br></br>

생성자 오버로딩과 this()

  • 생성자도 메서드와 마찬가지로 매개변수를 다르게 하여 여러 개를 정의할 수 있음

코드 중복의 문제

  • 여러 생성자가 비슷한 초기화 로직을 가질 경우 코드가 중복됨
  • 중복된 코드는 수정이 필요할 때 모든 생성자를 찾아 고쳐야 하는 번거로움이 있음

this() 기능

  • 생성자 내부에서 자기 자신의 다른 생성자를 호출할 때 사용함
  • 중복되는 로직을 하나의 주 생성자에 몰아넣고 다른 생성자들이 이를 호출하게 설계함

    생성자 오버로딩 흐름

호출 규칙

  • this()는 반드시 생성자 코드의 첫 번째 줄에 위치해야 함
  • 첫 줄이 아닌 곳에서 호출하거나 로직 실행 후 호출하면 컴파일 오류가 발생함

</br></br>

연습 문제

  1. 생성자를 사용하는 주된 목적은 무엇일까요?

    a. 객체가 생성될 때 초기화 작업을 수행하기 위해

    • 생성자는 객체가 메모리에 생성될 때 자동으로 호출되어 속성값 설정과 초기화 작업을 수행함

    • 이를 통해 객체가 사용 가능한 올바른 상태로 만들어지도록 보장하는 것이 주된 목적임

  2. 생성자의 문법적 특징은 무엇일까요?

    a. 클래스 이름과 동일하다

    • 생성자는 객체가 생성될 때 자동으로 호출되며 반환 타입이 없고 클래스 이름과 정확히 일치해야 하는 특별한 메서드임
  3. 자바 컴파일러가 클래스에 기본 생성자를 자동으로 추가해주지 않는 경우는 언제일까요

    a. 다른 생성자가 하나라도 정의된 경우

    • 클래스에 개발자가 정의한 생성자가 하나라도 있으면 자바는 자동으로 기본 생성자를 만들어주지 않음

    • 이때 기본 생성자 호출 시 컴파일 오류가 남

  4. 객체 지향 프로그래밍에서 this 키워드의 주된 용도는 무엇일까요?

    a. 현재 객체의 멤버 변수 및 메서드 지칭

    • this는 현재 코드가 실행되고 있는 자기 자신의 객체 인스턴스를 가리킴

    • 특히 멤버 변수와 이름이 같은 지역 및 매개변수와 구분할 때 유용함

  5. 생성자에서 this()를 사용하는 가장 큰 이유는 무엇일까요?

    a. 생성자 간 코드 중복 줄이기

    • 생성자들이 공통된 초기화 로직을 가질 때 this() 를 사용하여 다른 생성자를 호출함으로써 코드 중복을 효율적으로 제거할 수 있음

</br></br>

요약 정리

  • 생성자는 객체 생성 시점에 멤버 변수를 초기화하고 필수 로직을 실행함
  • this는 인스턴스 자신을 가리키며 매개변수와 멤버 변수를 구분함
  • 생성자가 하나라도 정의되면 기본 생성자는 자동 생성되지 않음
  • this()를 사용하여 생성자 간 중복을 제거하고 첫 줄 호출 규칙을 준수해야 함

</br></br>

Reference

Contents

스택과 큐 알고리즘

-