본문 바로가기
Java

Constructor & Overloaded Constructor (생성자와 생성자 오버로딩)

by 개발자공부 2024. 4. 18.

 

목차

 

Constructor 생성자

생성자 주요 특징

Default constructor 기본 생성자

Overloaded Constructor 사용자 정의 생성자

생성자 오버로딩

JVM stack & Heap memory

정리


Constructor 생성자

생성자는 클래스의 인스턴스, 즉 객체를 생성할 때 호출되는 특별한 유형의 메서드이다. 생성자는 객체가 처음 만들어 질 때 제일 먼저 수행하는 코드이다. 객체의 초기화를 담당하며 객체가 올바르게 사용될 수 있도록 필요한 값들을 설정하고 필요한 초기화 코드를 실행한다. 

생성자 선언은 ' public 클래스명 (매개변수) { ...... } ' 형식이다. 

 

생성자 주요 특징

☞ 생성자의 이름은 클래스의 이름과 동일해야 한다.

☞ 생성자는 반환(리턴) 타입을 가지지 않으며, 심지어 void도 사용하지 않는다.(=/=메서드)

☞ 객체 생성시 new 키워드와 함께 자동으로 호출된다.

☞ 생성자는 기본 생성자와 사용자 정의 생성자로 구분할 수 있다.

 

Default constructor 기본 생성자

클래스에는 반드시 적어도 하나 이상의 생성자가 존재한다. 작성자가 생성자를 하나도 작성하지 않은 경우 컴파일러가 기본 생성자를 하나 넣어주지만 겉으로 보이지는 않는다. 기본 생성자가 있기 때문에 new 키워드로 생성자를 호출할 수 있다. ctrl + space를 누르면 생성자 자동완성이 가능하다.

public class User{

	public User(){
    
    }

}

 

Overloaded Constructor 사용자 정의 생성자

객체 생성시 특정 값으로 초기화 할 수 있는 생성자를 만들 수 있는데 이를 '사용자 정의 생성자' 혹은 '매개변수가 있는 생성자'라고 부른다.그러나 사용자 정의 생성자를 선언하면 컴파일러가 기본 생성자를 제공하지 않는다. 사용자 정의 생성자를 만든 상태에서 기본 생성자를 만들고 싶다면 따로 작성하면 된다.

public class User{

	String name;
    int age;

	public User(String s, int a){
    	name = s;
        age = a;
    }

}

 

생성자 오버로딩

필요에 따라 생성자를 여러개 만들 수 있는데 이러한 행위를 오버로딩이라고 부른다.

public class User{

	String name;
    int age;

	//기본 생성자
	public User(){
    
    }
    
    //사용자 정의 생성자1
    public User(String s){
    	name = s;
    }
    
    //사용자 정의 생성자2
    public User(String s, int a){
    	name = s;
        age = a;
    }

}

JVM stack & Heap memory

User user1 = new User( ) { ...... } 처럼 생성자로 객체를 만들 수 있다. new User를 선언하면 Heap memory(동적 메모리)에 자리가 할당된다. 이를 부르고 싶으니 이와 연결된 빈 상자를 User user1이라는 이름으로 JVM stack에 만들어준다.

User 클래스 안에 있는 값을 불러오고 싶을 때 명명한 이름이 없으면 접근할 수 없다. 


정리

☞생성자는 인스턴스를 찍어내기 위함이다.

☞생성자는 객체가 처음 만들어 질 때 제일 먼저 수행하는 코드이다.

☞클래스 하나에는 기본 생성자 1개가 포함되어 있다.

☞리턴 타입 없다.

☞클래스 이름 = 생성자 이름

☞사용자 정의 생성자를 만들면 컴파일러가 처음에 준 기본 생성자는 사라진다.

☞생성자 여러개 만드는 것 가능 = 오버로딩

'Java' 카테고리의 다른 글

Method Overloading 메서드 오버로딩  (0) 2024.04.23
Static 변수  (1) 2024.04.19
this를 활용하는 3가지 방법  (0) 2024.04.18
접근 제어 지시자  (0) 2024.04.18
OOP(객체지향 프로그래밍)  (0) 2024.04.16