개발일지/Java

Java 생성자(Constructor)

2022. 9. 8. 22:22
목차
  1. 생성자는 메서드와 비슷한 구조를 가지고 있지만 크게 두 가지 부분에서 큰 차이를 갖는다.
  2. 생성자는 오버로딩이 가능하다
  3. 기본 생성자(Default Constructor)
  4. 매개변수가 있는 생성자
  5. this() vs this
728x90
객체를 생성하는 역할을 하는 클래스의 구성요소
인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드

 

new 키워드를 사용하여 객체를 생성할 때에 호출되는 것이 사실 생성자이다.

 

생성자라는 이름 때문에 생성자가 인스턴스를 생성하는 역할을 한다는 오해가 발생하는데, 사실이 아니다

인스턴스 생성을 담당하는 것은 new 키워드이며, 생성자는 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드이다.

 

생성자는 메서드와 비슷한 구조를 가지고 있지만 크게 두 가지 부분에서 큰 차이를 갖는다.

  • 생성자의 이름은 반드시 클래스의 이름과 같아야 한다
  • 생성자는 리턴 타입이 없다. (void 키워드도 사용하지 않는다. 리턴하지 않는다는 의미의 void와는 다르게 아예 리턴 타입 자체가 존재하지 않는다.)
클래스명(매개변수) { // 생성자 기본 구조
    ... 생략 ...
}

 

생성자는 오버로딩이 가능하다

public class ConstructorExample {
    public static void main(String[] args) {
        Constructor constructor1 = new Constructor();
        Constructor constructor2 = new Constructor("Hello World");
        Constructor constructor3 = new Constructor(5,10);
    }
}

class Constructor {
    Constructor() { // (1) 생성자 오버로딩
        System.out.println("1번 생성자");
    }

    Constructor(String str) { // (2) 
        System.out.println("2번 생성자");
    }

    Constructor(int a, int b) { // (3) 
        System.out.println("3번 생성자");
    }
}
// 1번 생성자
// 2번 생성자
// 3번 생성자

 

 

기본 생성자(Default Constructor)

모든 클래스에는 반드시 하나 이상의 생성자가 존재해야 한다. 하지만 만들지 않아도 오류가 발생하지 않는다.

왜냐하면 생성자를 만들지 않을 경우 자바 컴파일러가 기본 생성자를 자동으로 추가해줬기 때문이다.

class 클래스명 {
    클래스명() {}
}

DefaultConst {
    DefaultConst() {} // 만들지 않아도 이렇게 생긴 생성자가 자동으로 생긴다
}

만약에 생성자가 이미 추가되어 있다면 기본 생성자가 아닌 이미 추가되어있는 생성자를 기본으로 사용한다.

 

 

매개변수가 있는 생성자

매개변수가 있는 메서드처럼 매개변수를 통해 호출 시에 해당 값을 받아 인스턴스를 초기화하는 데 사용

고유한 특성을 가진 인스턴스들을 계속 만들어야하는 경우 인스턴스마다 각기 다른 값을 가지고 초기화할 수 있다.

 

매개 변수가 없다면

public class Main {
    public static void main(String[] args) {
        Car c = new Car(); // 객체 생성 후
        c.modelName = "G63Amg"; // 이름 지정
        c.color = "Red"; // 색깔 지정

        c.modelName();
        c.color();
    }
}

class Car {
    String modelName;
    String color;

    void modelName() {
        System.out.println(modelName);
    }

    void color() {
        System.out.println(color);
    }
}

 

매개 변수가 있다면

public class Main {
    public static void main(String[] args) {
        Car c = new Car("G63Amg", "Red"); // 객체 생성과 동시에 매개변수 지정

        c.modelName();
        c.color();
    }
}

class Car {
    String modelName;
    String color;

    Car(String modelName, String color) { // 생성자 매개변수 지정
        this.modelName = modelName;
        this.color = color;
    }

    void modelName() {
        System.out.println(modelName);
    }

    void color() {
        System.out.println(color);
    }
}

 

 

this() vs this

this()

자신이 속한 클래스에서 다른 생성자를 호출하는 경우에 사용.

  • 반드시 생성자의 내부에서만 사용할 수 있다.
  • 반드시 생성자의 첫 줄에 위치해야한다.
public class Test {
    public static void main(String[] args) {
        Example example = new Example();
        Example example2 = new Example(5);
    }
}

class Example  {
    public Example() {
        System.out.println("Example의 기본 생성자 호출!");
    }

    public Example(int x) {
        this();
        System.out.println("Example의 두 번째 생성자 호출!");
    }
}

// 출력
Example의 기본 생성자 호출!
Example의 기본 생성자 호출!
Example의 두 번째 생성자 호출!

 

this  키워드

인스턴스 변수와 매개변수를 구분해주기 위한 용도로 주로 사용된다

this는 인스턴스 자신을 가리키며, 우리가 참조 변수를 통해 인스턴스의 멤버에 접근할 수 있는 것처럼 this를 통해서 인스턴스 자신의 변수에 접근할 수 있다.

public class Main {
    public static void main(String[] args) {
        Car car = new Car("G63Amg", "Red");
        car.modelName();
        car.color();
    }
}

class Car {
    private String modelName;
    private String color;

    public Car(String modelName, String color) {
        this.modelName = modelName;
        this.color = color;
    }

    public void modelName() {
        System.out.println(modelName);
    }

    public void color() {
        System.out.println(color);
    }
}
// 출력
G63Amg
Red

만약 위의 코드에서, this.modelName = modelName 대신 modelName = modelName이라고 작성하면 둘 다 지역변수로 간주된다.

728x90
저작자표시 비영리 변경금지 (새창열림)

'개발일지 > Java' 카테고리의 다른 글

Java 멤버 내부 클래스  (0) 2022.09.09
Java 내부 클래스 (Inner class)  (0) 2022.09.09
Java 메서드 오버로딩(Method Overloading)  (0) 2022.09.08
Java 메서드 (Method)  (0) 2022.09.08
Java 필드(Field)  (0) 2022.09.08
  1. 생성자는 메서드와 비슷한 구조를 가지고 있지만 크게 두 가지 부분에서 큰 차이를 갖는다.
  2. 생성자는 오버로딩이 가능하다
  3. 기본 생성자(Default Constructor)
  4. 매개변수가 있는 생성자
  5. this() vs this
'개발일지/Java' 카테고리의 다른 글
  • Java 멤버 내부 클래스
  • Java 내부 클래스 (Inner class)
  • Java 메서드 오버로딩(Method Overloading)
  • Java 메서드 (Method)
E-room
E-room
나의 성취 기록들
E-room Achievement Logs나의 성취 기록들
E-room
E-room Achievement Logs
E-room
전체
오늘
어제
  • 분류 전체보기
    • 개발일지
      • 돌픽
      • Spring
      • Algorithm
      • Java
      • Node.js
      • Python
      • DataBase
      • 웹개발
      • JavaScript
      • 컴퓨터지식
      • Django
    • 이것저것
    • 피드백 감사히 받겠습니다

블로그 메뉴

  • 태그
  • Github
  • 돌픽-이상형월드컵

인기 글

최근 글

최근 댓글

태그

  • 탐색
  • 프로그래밍
  • Spring
  • python
  • boot
  • mysql
  • dfs
  • 파이썬
  • 백트래킹
  • 조합
  • dp
  • 순열
  • Java
  • 알고리즘
  • search
  • algorithm
  • 자바
  • JPA
  • javascript
  • 백준
  • 생활코딩
  • SQL
  • 수열
  • 재귀
  • 자료구조
  • Django
  • 완전탐색
  • API
  • 다이나믹
  • 스파르타코딩클럽

공지사항

hELLO · Designed By 정상우.
E-room
Java 생성자(Constructor)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.