생성자란?
클래스를 구성하는 요소중 하나로,
객체를 생성할 때 호출되어
객체의 초기화를 담당하는
특별한 메서드이다.
따라서 객체를 생성하는 모든 라이브러리용
클래스는 생성자를 가지고 있습니다.
[생성자]
일반 메서드와 달리 반환 타입이 없으며,
메서드 이름은 클래스 이름과 동일하다.
클래스를 기반으로 객체를 생성할 때,
객체의 초기화를 담당하는 역할이므로
객체를 생성할 때만 호출할 수 있다.
호출 시에는 new 키워드와 함께 사용된다.
클래스명 객체명 = new 클래스명();
Cat cat = new Cat();
//new 뒤에 온 Cat()이 생성자다.
[생성자 선언 이유]
메서드를 호출하며 매개변수를 통해
값을 전달했던 것처럼, 생성자 역시
매개변수를 통해 값을 전달할 수 있다.
public class Snack{
int price;
snack(int p){//int p를 매개변수로 받는 생성자
price=p; //인자로 받은 p가 price에 대입된다.
//즉 snack 생성자는 객체를 생성할 때마다 p를 가격으로 책정
}
void info(){
System.out.println("과자의 가격은"+price+"원 입니다.");
}
}
이렇게 설정된 생성자를 통해 매개변수로
객체를 생성하면 price의 값을 제어할 수 있다.
snack chip = new Snack(5000);
chip.info();
위와 같이 매개변수값으로 5000을 입력하여
chip 객체를 생성하게 되면 price는 5000으로 세팅되어
info를 통해 출력되는 정보에 5000원이 나오게 된다.
[this와 this()]
매개변수로 멤버변수와 동일한 변수명이 지정되면
중괄호 안에서 사용하기 위해 선언된 지역변수가
클래스 멤버변수보다 우선순위가 높아서
대입 연산자를 기준으로 왼쪽/오른쪽 모두
클래스 멤버변수가 아닌 매개변수를 뜻하게 된다.
class Student{
String name;
int age;
int studentID;
Student(String name, int age, int studentID){
name = name; //왼쪽 오른쪽 모두 지역변수로 취급
age = age; //왼쪽 오른쪽 모두 지역변수로 취급
studentID = studentID;//왼쪽 오른쪽 모두 지역변수로 취급
}
}
이러한 상황을 해결하기 위해 this 키워드를 사용한다.
this는 자기 자신을 참조하는데 사용하는 변수로
this를 멤버변수에 붙여서 사용하면 중괄호 안에서도
같은 이름의 매개변수와 필드를 구분해서 사용할 수 있다.
class Student{
String name;
int age;
int studentID;
Student(String name, int age, int studentID){
this.name = name; //this 사용으로
//왼쪽 name과 오른쪽 name 구분된다.
this.age = age;
this.studentID = studentID;
}
}
생성자가 오버로딩 되었을 때
동일한 코드가 반복되어 사용되는 것을
확인할 수 있는데 이런 상황에서 this()
메서드를 사용하면 간단히 코딩이 가능하다.
class Student{
String name;
int age;
int studentID;
Student(String name, int age, int studentID){
this.name = name; //this 사용으로
//왼쪽 name과 오른쪽 name 구분된다.
this.age = age;
this.studentID = studentID;
}
}
같은 클래스 안에 있는 생성자 중
매개변수의 개수, 자료형, 순서에 맞는
다른 생성자를 호출하는 메서드로
생성자 내부에서만 사용이 가능하다.
Phone(String brand, int series){
this.brand = brand;
this.series = series;
}
Phone(String brand, int series, String color){
this(brand, series);
//this()로 중복되는 brand와 series 처리
this.color = color;
}
'개주 훈련일지 > 📚 코살대 교본 학습' 카테고리의 다른 글
| 소프트웨어 생명주기 (0) | 2025.11.10 |
|---|---|
| 상속 (0) | 2025.11.08 |
| 메서드(method) (0) | 2025.11.05 |
| 소프트웨어 공학의 발전 (0) | 2025.11.05 |
| 클래스(class) (0) | 2025.11.04 |