728x90
반응형
+ 22.01.18 생성자(Constructor)
클래스 안에 클래스의 이름과 똑같은 메소드를 생성 -> setOprands의 역할을 함
ex) Calculator 클래스 안에 Calculator 메소드를 생성
생성자는 어떠한 메소드보다 가장 먼저 진행되서 초기화 작업을 하게 된다.
'생성자(Constructor)'는 크게 두 가지 역할이 있다.
- 인스턴스를 만들고,
- 인스턴스의 속성(인스턴스 변수)들을 초기화시켜준다.
생성자는 new 키워드와 함께 사용!
클래스에 아무런 생성자가 없을 경우에는 컴파일러가 자동으로 파라미터 없는 생성자를 제공해준다. 그러나 생성자를 하나라도 정의하면 이 생성자는 사용할 수 없다.
기본 생성자
생성자를 한 개도 정의 안 했을 경우에는 자바에서 자동으로 기본 생성자를 제공해준다.
(아래 코드는 생성자를 배우기 전 BankDriver.java 파일에서 사용했던 코드)
Person p1 = new Person();
// 먼저 인스턴스를 만들고 그 후에 값들을 설정해 주었음
Person p1 = new Person(); // p1이라는 변수에 인스턴스 저장
p1.setName("박효신");
p1.setAge(28);
p1.setCashAmount(30000);
생성자 정의
생성자를 하나라도 정의하면 위의 기본 생성자는 사용할 수 없다.
public class Person {
String name;
int age;
public Person(String pName, int pAge) {
name = pName;
age = pAge;
}
}
파라미터 두 개를 받는 생성자를 작성했다. 그러면 원래는 이렇게 썼던 것을
public static void main(String[] args) {
Person p1 = new Person();
p1.setName("박효신");
p1.setAge(27);
}
이렇게 바꿀 수 있다.
public static void main(String[] args) {
Person p1 = new Person("박효신", 27);
}
그러면 Person 인스턴스가 생성되고, 그 인스턴스의 변수 name에 "박효신"이 지정되고, 변수 age에 27이 지정된다. 한번에 모든 인스턴스 변수의 초기값을 설정할 수 있게 되었다.
오버로딩
파라미터의 구성을 다르게 하면 같은 이름의 메소드를 여러 개 정의할 수 있다는 개념을 '메소드 오버로딩'이라고 했었다. 마찬가지로 생성자 오버로딩도 가능하다.
public Person(String pName, int pAge) {
name = pName;
age = pAge;
}
public Person(String pName) {
name = pName;
age = 40; // 40살을 기본 나이로 설정
}
파라미터 하나만 받는 생성자 작성. 그러면 어떤 파라미터를 넘기느냐에 따라 어떤 생성자가 사용될지 정해진다.
public static void main(String[] args) {
Person p1 = new Person("박효신", 27); // 첫 번째 생성자
Person p2 = new Person("임창정"); // 두 번째 생성자
System.out.println(p1.name);
System.out.println(p1.age);
System.out.println(p2.name);
System.out.println(p2.age);
}
박효신
27
임창정
40
+ 22.01.07 생성자의 특징
- 값을 반환하지 않는다.
생성자는 인스턴스를 생성해주는 역할을 하는 특수한 메소드라고 할 수 있다. 그런데 반환 값이 있다면 엉뚱한 객체가 생성될 것이다. 따라서 반환 값을 필요로하는 작업에서는 생성자를 사용하지 않는다. 반환 값이 없기 때문에 return도 사용하지 않고, 반환 값을 메소드 정의에 포함시키지도 않는다.
- 생성자의 이름은 클래스의 이름과 동일하다.
자바에서 클래스의 이름과 동일한 메소드는 생성자로 사용하기로 약속되어 있다.
728x90
반응형
'TIL > Java' 카테고리의 다른 글
[Java] 실습과제_특가 할인 매장 (0) | 2022.01.05 |
---|---|
[Java] this (0) | 2022.01.04 |
[Java] 은행 시뮬레이션 프로그램_계좌 이체 메소드 작성하기 (0) | 2022.01.02 |
[Java] 접근 제어자 (0) | 2021.12.31 |
[Java] 은행 시뮬레이션 프로그램_입금, 출금 메소드 작성하기 (0) | 2021.12.31 |