생성자의 역할
= 객체를 생성하는 시점에서 필드를 다양하게 초기화할 수 있다.
생성자의 특징
- 생성자는 메소드
- 생성자 이름은 클래스 이름과 같다.
- 생성자의 반환타입은 없다.
- 생성자는 new 연산자와 함께 사용되며, 객체를 생성할 때 호출한다.
- 생성자도 오버로딩할 수 있다
(오버로딩 = 메서드 이름은 같지만, 메서드 시그니처가 다른 메서드를 정의하는 것, 여기서 메서드 시그니처는 매개변수의 개수, 매개변수의 타입과 순서등을 말함)
- 생성자의 목적은 객체 초기화
예제) 두개의 생성자를 가진 circle 클래스
디폴트 생성자
- 매개변수 없고 아무 작업 없이 단순 리턴하는 생성자
- 모든 클래스는 최소한 하나의 생성자가 있음
- 만약 생성자를 선언하지 않으면 컴파일러가 자동으로 디폴트 생성자 추가
예제
원의 반지름과 색깔을 알려주는 클래스를 작성한다.
Circle4 클래스의 메서드
메인 메서드
생성자에 radius와 color을 매개변수로 받아줌으로써 c1객체의 경우, radius와 color가 없으면 객체가 생성이 안된다.
this ()
this 생성자의 경우 오버로딩된 생성자에서 중복된 코드를 없앨 수 있다.
메인메서드
Circle 4 를 오버로딩한걸 살펴보면
radius=r;
color="파랑";
이 아닌 this(radius,"파랑"); 로 this 생성자를 만들어줄 수 있다.
this() 생성자 정리
- 클래스 내의 다른 생성자 호출
- 생성자 내에서만 사용 가능
- 반드시 생성자 코드의 제일 처음에 실행
내가 했던 실수
그렇다면
얘를 this 생성자로 만들수는 없을까? 라는 생각을 했다.
이러면 당연히 에러가 뜬다. 왜냐하면 같은 생성자를 두번 호출한 격이 되기 때문이다.
Circle 4와 this(radius,color)는 매개변수의 개수와 타입이 같은 똑같은 생성자이다.
이미 Circle4 생성자 를 호출하고 this 생성자를 호출하니 에러가 뜰 수 밖에 없다!
this 생성자 작동원리 (+예제)
책의 작가와 이름을 호출하는 클래스를 만들어 보았다.
<콘솔창>
여기서 중요한건 LoveStory 객체이다.
LoveStory 객체는 매개변수가 하나이기 때문에 매개변수가 한개인 생성자를 호출한다. 그 생성자 안에는 this 생성자가 있으므로 "춘향전","작자미상" 으로 매개변수가 생성되므로 LoveStory 객체는 매개변수가 총 2개가 되므로 밑에 있는 매개변수가 2개인 생성자를 호출하게 된다.
'Java > 기초' 카테고리의 다른 글
[java기초] 자식클래스와 부모생성자 (0) | 2021.06.30 |
---|---|
[java기초] 상속과 다형성 (0) | 2021.06.30 |
[java기초] 객체 생성과 참조변수 / this (0) | 2021.06.24 |
[java기초] static (0) | 2021.06.21 |
[java 기초] 용어정리 & 기초자료형과 참조자료형 (0) | 2021.06.20 |
댓글