Java_09_생성자

OngTK·2025년 7월 11일

Java

목록 보기
9/35

1. 정의

객체를 생성할 때 사용되는 초기화를 담당하는 키워드

클래스명 변수명 = new 생성자명();

2. 목적

  • 객체 생성시 멤버변수의 초기화
  • 매개변수 유효성 검사를 통해 멤버변수에 일관성 유지

3. 규칙

1) ☆★ 클래스명 = 생성자명 ☆★

2) overload 가능

overload란?

  • 변수명/식별자는 동일한 이름을 가질 수 없음
  • 즉, 메소드/생성자는 동일한 이름으로 여러 개 만들 수 없음.
  • But, 메소드/생성자는 매개변수의 개수/타입/순서가 다르다면,
    동일한 이름으로 여러 개의 메소드/생성자를 선언할 수 있음
  • why? 객체의 멤버변수는 객체마다 할당되며, 객체의 메소드는 객체 모두에게 공유됨

4. 종류

1) 기본 생성자

  • 정의 : 생성자명( ){ }
  • 특징 : 매개변수가 없음
  • 사용 : new 생성자명();

2) 매개변수가 있는 생성자

  • 정의 : 생성자명( 타입 매개변수명, 타입 매개변수명 ){}

3) 생성자 오버로드

  • 정의 : 생성자명( 타입 매개변수명, 타입 매개변수명, 타입 매개변수명 ){}
    // 2번 vs 3번
    // 매개변소의 타입/순서/개수가 다르므로 생성자가 overload 되었음!

5. 사용

1) 선언 (클래스명 = 생성자명!!!)

(1) class 클래스명{
생성자명( ){ }
}
(2) class 클래스명{
생성자명( 타입 매개변수명, 타입 매개변수명 ){ }
}

2) 호출/사용 방법

new 생성자명( );
new 생성자명( 매개변수, 매개변수 );

※ 생성자 자동 생성 방법
마우스 우클릭 > Generate (alt + Insert) > Constructor > 매개변수 선택 > OK

※ this.멤버변수
현재 메소드/생성자를 호출한 객체를 가리킴
일반적으로 멤버변수명과 매개변수명이 동일하여 this를 쓰는 경우가 많음

6. 예시

  1. Class를 생성하면 멤버변수/생성자/메소드를 작성할 수 있도록 준비한다.
public class Phone {
    // [1] 멤버변수                     // 1
    
    // [2] 생성자                       // 1
    
    // [3] 메소드                       // 1
}
  1. 객체 정의에 필요한 멤버변수와 타입을 정의한다.
public class Phone {
    // [1] 멤버변수                     // 1
    String model; // 기종              // 2
    String color; // 색상
    int price;    // 가격

    // [2] 생성자                       // 1
    
    // [3] 메소드                       // 1
}
  1. 생성자를 정의한다.
    이때, 생성자는 (1) 매개변수가 없는 기본생성자와 (2) 매개변수를 포함한 생성자를 정의한다.
    그리고 추가적으로 overload를 이용한 생성자를 정의한다.
public class Phone {
    // [1] 멤버변수                     // 1
    String model; // 기종              // 2
    String color; // 색상
    int price;    // 가격

    // [2] 생성자                       // 1
    //  1) 기본 생성자                                   // 3
    //      * 클래스 내 생성자가 없으면 자동으로 생성
    //      * 클래스 내 하나 이상의 생성자가 있을 때는, 기본 생성자를 직접 정의
    Phone() {
    }

    //  2) 매개변수가 있는 생성자                          // 3
    //      * 생성자는 매개변수를 갖지만 반환값은 없음
    Phone(String pModel, String pColor){
        // 매개변수 값을 멤버변수에 저장
        // 모든 멤버변수를 매개변수를 통해 받을 필요는 없음
        model = pModel;
        color = pColor;
        price = 1200000; // 초기값을 임의의 값으로 설정
    }

    //  3) 생성자의 오버로드                               // 3
    //      기존 생성자와 매개변수의 타입/순서/개수가 다르므로 Overload!!
    Phone(String model, String color, int price){
        // 멤버변수 : 객체 내 변수 vs 매개변수 : 메소드/생성자가 사용하는 인수값(외부로부터 들어옴)
        // >> 이름이 같은 issue = 코드 내에서 멤버변수와 매개변수 구별이 불가함
        // 해결책(☆★☆★☆★☆★) :
        //      this 키워드 - 현재 메소드/생성자를 호출한 객체를 가리킴
        //      일반적으로 멤버변수명과 매개변수명이 동일하여 this를 쓰는 경우가 많음
        this.model = model;
        this.color = color;
        this.price = price;
    }
    
    // [3] 메소드                       // 1
}
profile
2025.05.~K디지털_풀스택 수업 수강중

0개의 댓글