✔ 생성자(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
'프로그래밍언어 > Java' 카테고리의 다른 글
| [JAVA] 컬렉션 프레임워크(Collection Framework) / 제네릭(Generic) (0) | 2023.12.20 |
|---|