Languages/Java

[JAVA] 생성자(Constructor)

MoonSta 2023. 1. 5. 00:10

2022.12.15 - [JAVA] - [JAVA]클래스와 인스턴스

 

[JAVA]클래스와 인스턴스

⚡️클래스 (class) 객체 지향이라는 프로그래밍 패러다임을 가진 JAVA에서는 객체(Object)를 중심으로 프로그래밍을 구성합니다. 객체(Object)의 동작이나 속성들을 구체화 시킨 것이 객체 지향 프로

mooonstar.tistory.com

생성자(Constructor)

 지난 포스팅에서 클래스와 인스턴스에 대한 내용을 다루었습니다. 다음과 같은 코드를 사용하여 인스턴스를 생성하였습니다. 

클래스 변수(객체) = new 클래스();

//클래스() --> 생성자 호출

 

 위의 코드가 실행되고 인스턴스가 생성될 시에 반드시 실행되어야 하는 작업이 있다. 바로 인스턴스를 초기화해야 하는 일이다. 이 초기화의 역할을 해주는 것이 바로 생성자(Constructor)이다. 이 생성자(Constructor)은 인스턴스 객체 생성 시에 가장 먼저 호출이 된다. 또한 클래스에 생성자가 없다면 객체에 접근을 하지 못한다. 하지만 지난 포스팅에서 인스턴스를 생성할 때 코드상 생성자는 보이지 않는다. 이유는 무엇일까?

 

생성자(Constructor)의 기본 예제

public class school {
	
    class StudentClass {
        String name;
        int personnel; 
    }
    public StudentClass(String name, int personnel) {
    	this.name = name;
        this.personnel = personnel;
    }
    public classInfo() {
    	return name + "은" + personnel + "명 입니다.";
    }
    public static void main(String[] args) {
    	StudentClass studentClass = new StudentClass("moonstar class", 30);
        System.out.println(studentClass.studentInfo());
    }
}

//moonstar class는 30명 입니다.

 위의 예제를 보면 생성자 호출은 하고 있지만 생성자는 보이지 않는다. 그 이유는 컴파일 과정에서 컴파일러가 자체적으로 기본 생성자를 만들어주기 때문이다. 

 

기본 생성자(Default Constructor)

public class school {
	
    class StudentClass {
        String name;
        int personnel; 	
        //기본 생성자
        public StudentClass(){}          
    }

 위의 코드처럼 컴파일 과정에서 눈에 보이지 않는 기본 생성자를 컴파일러가 자동으로 만들어 주기 때문에 문제가 발생하지 않는다. 이것이 Default Constructor(기본 생성자)이다. 그리고 여기서 생성자의 특징을 먼저 알아보도록 하자.

 

생성자(Constructor)의 특징

  • 리턴 타입이 없다.
  • 클래스와 이름이 동일해야 한다.
  • 모든 클래스에 존재하고, 한 개 이상의 생성자를 가질 수 있다.

 

사용자 정의 생성자(User Defined Constructor)

생성자가 한 개 이상 존재하는 클래스에서 컴파일러는 자동으로 기본 생성자를 추가해주지 않는다. 따라서 생성자(Constructor)의 특징에서 볼 수 있듯이 생성자에 사용자가 정의한 매개변수를 인자로 줄 수 있다. 이것이 사용자 정의 생성자이다. 사용자 정의 생성자(User Defined Constructor)를 사용하게 되면 인스턴스 생성과 동시에 원하는 값으로 초기화가 가능하다. 

 

사용자 정의 생성자(UserDefined Constructor) 예제

public class Constructor {
	
    class CompareConstructor {         
        String name;  
        
        //기본 생성자
        CompareConstructor() {
        }
        //사용자 정의 생성자
        CompareConstructor(String nm) {
        	name = nm;         
        }
    }
    public static void main(String[] args) {
        CompareConstructor 기본 = new CompareConstructor(); 
            기본.name = "디폴트"
            
        CompareConstructor 사용자 정의 = new CompareConstructor("사용자 정의");  		
    }
}

사용자 정의 생성자(User Defined Constructor)를 사용하게 되면 생성 직후 바로 초기화가 가능하다.