프로그래밍언어/Java

[Java] 생성자(Constructor)의 특징

개발하는소유밍 2024. 2. 16. 16:05

✔ 생성자(Constructor) 란 ?

 

⁂ 객체가 생성될 때, 자동으로 호출되는 특수목적의 멤버함수(메서드)로, 객체 초기화(객체의 필드값을 설정하는것)를 위해 사용

 인스턴스 생성 시에 실행되어야 할 작업을 위해 사용되는 인스턴스 초기화 메서드

 

Card c = new Card();

//1. 연산자 new에 의해서 메모리(heap)에 Card 클래스의 인스턴스가 생성된다.
//(★★인스턴스를 생성하는 건 연산자 new이다.)
//2. 생성자 Card()가 호출되어 수행된다.
//3. 연산자 new의 결과로, 생성된 Card인스턴스의 주소가 반환되어 참조 변수 c에 저장된다.

 

 

✔  생성자의 특징 총정리

 

 - 클래스의 이름과 생성자의 이름은 동일해야함

 - 객체가 생성될때마다 자동으로 한번 호출

 - 클래스에 최소 1개는 있어야하며 없을 경우, 컴파일러가 기본생성자를 자동으로 생성

 (단, 매개변수가 작성 된 생성자 코드가 한개라도 있을 경우, 컴파일러는 자동으로 기본생성자를 생성할 수 없기때문에  기본생성자 호출시 에러발생)

 - 다른 멤버 변수(메서드) 와 달리 리턴값이 없음

 (*생성자도 메서드이기 때문에 리턴 값이 필요없는 void를 붙여야 하지만,  모든 생성자가 리턴 값이 없으므로 void를 생략 가능하게됨)

 - 매개변수의 조건에 따라 여러개를 작성(오버로딩)할 수도 있음

 (*생성자 오버로딩 : 매개 변수를 달리하는 생성자를 여러 개 선언하는 것)

 


 

 

(1) 기본 생성자(default constructor)

 -  모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 한다.

 -  컴파일할 때, 소스파일(*. java)의 클래스에 생성자가 하나도 정의되지 않은 경우 컴파일러는 기본 생성자를 추가하여 컴파일한다.

 

class Card {
    private String cardName;
    
    public Card() {} //기본생성자
}

 

 

 

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

 - 매개변수가 있는 인스턴스를 생성할때, 생성자를 사용해서 초기화 해주어야 한다.

 - 기본생성자 없이 매개변수를 포함한 생성자만 작성 할 경우, 컴파일러가 기본 생성자를 자동으로 만들어주지 않아 오류가 날 수 있다.

 

class Card{
	private String name;
	
	//기본 생성자
	public Card() { }
	
	//매개변수 생성자
	public Card(String cardname) {
	    this.name = cardname;
	}
}

컴파일 에러 참고 : https://infjin.tistory.com/117

 

 

+

기본 생성자를 사용할 경우와 매개변수가 있는 생성자를 사용할 경우의 결과 값은 똑같이 나온다.
하지만 매개변수를 갖는 생성자를 사용하는 것이 코드를 보다 간결하고 직관적으로 만든다.

 

/* 이전방식의 객체 생성 & 필드 초기화 */
Car c = new Car();

c.name = " 소나타";
c.color = "white";

/* 활용 방식 */
Car c = new Cat("소나타", "white");

 

 

 

✔  생성자에서 다른 생성자 호출하기 - this, this( )

 this  - 객체 자신을 가리키는 레퍼런스 변수
자기 자신의 객체에 접근할 때 사용
this(), this(매개변수) 같은 클래스 안에서 생성자가 다른 생성자를 호출할 때 사용
코드의 중복을 방지할 수 있음

this()는 생성자코드에서만 사용할 수 있으며,
 사용시 다른코드보다 가장 윗줄에 첫번째 문장으로 위치해야함

static메서드(클래스 메서드)에서는 인스턴스 멤버들을 사용할 수 없는 것처럼
 'this' 역시 사용할 수 없음
 (* static메서드는 인스턴스를 생성하지 않고도 호출될 수 있으므로
 static메서드가 호출된 시점에 인스턴스가 존재하지 않을 수도 있기 때문)

생성자를 포함한 모든 인스턴스 메서드에는
 자신이 관련된
 인스턴스를 가리키는 참조 변수 'this'가 지역변수로 숨겨진 채로 존재

 

 

 

✔ super / super()

 super   자신이 상속받은 부모클래스에 대한 레퍼런스 변수
super()   자식클래스 생성자에서 부모클래스의 생성자를 호출하기위해 사용

  사용시 다른코드보다 가장 윗줄에 첫번째 문장으로 위치해야 함

  자식클래스의 모든 생성자는 부모클래스의 생성자를 포함하고 있어야 함
 (*컴파일러가 자동으로 부모클래스의 기본생성자를 호출했을때
 매개변수가 있는 생성자만 존재하고, 기본생성자는 없어서 호출 시 에러발생)

 

 

 


 

[Spring] 의존성 주입 @Aurowired (Spring DI)

스프링 어노테이션 중에는 @Autowired 가 있는데, 이 어노테이션을 특정 필드에 부여하면 IoC 컨테이너 안에 존재하는 특정 필드와 같은 타입의 Bean을 자동으로 찾아 주입해주게 된다. ※ 스프링 프

younimini.tistory.com

 

300x250