-
학원 DAY10. 생성자기록 2022. 9. 18. 17:02
생성자 (Constructor)
- 생성자는 메소드다.
- 생성자는 클래스의 이름과 동일한 이름을 가진 메소드다. 그래야 생성자로서의 기능을 가진다.
- 생성자 메소드는 반환타입이 없다. (void 조차도 적지 않는다.)
기본생성자( Default Constructor) 메소드 형식 :
public Book() {
}
- 기본 생성자 메소드는 다른 생성자가 하나도 없을 때 컴파일러가 자동으로 실행파일에 추가한다.
- 개발자가 소스파일에 생성자를 정의하지 않았더라도, 실행파일에 기본 생성자는 포함되어 있다.
- 따라서, 생성자를 정의하지 않았지만, 객체 생성시 기본생성자를 new 키워드 다음에 이와 같이 Person person = new Person() 적을 수 있었던 것이다.
- 생성자 메소드는 객체 생성할 때 new라는 연산자 뒤에 적는다. new Sample();처럼.
- 객체 생성된 이후에 생성자 메소드를 참조변수로 호출할 수도 없다. 참조변수.생성자메소드 (x)
Book b1 = new Book();
<< new Book()을 실행했을 때 자바가상머신이 수행하는 작업 >>
1. 생성자 메소드의 이름과 동일한 자바클래스를 메모리에 로딩한다.
Book.class를 메모리에 로딩
2. 메모리에 로딩된 클래스를 이용해서 객체를 생성한다.
Book.class로 메모리의 Heap 영역에 Book객체 생성
3. 생성된 객체에 포함된 생성자 메소드를 실행한다.
Book() 생성자 메소드 실행
4. 생성된 객체의 주소값을 b1에 대입
new Book()에서 Book()
* 객체 생성을 위해서 메모리에 로딩할 클래스의 이름을 알려준다. <- 생성자 메소드의 이름과 클래스 이름은 동일하다.
* 객체 생성 직후에 실행할 메소드를 알려준다. <-- Book() 생성자 메소드가 객체 생성직후에 실행할 생성자 메소드다.
* 생성자 메소드는 객체 생성 직후에 자동으로 실행되는 메소드다.
* 생성자 메소드는 객체의 초기화 작업을 수행한다. (객체의 초기화는 객체의 멤버변수를 초기화하는 것이다.)
* 생성자 메소드는 객체 생성시에만 호출할 수 있고, 그 외에는 실행할 수 없다. 생성자에 수행문을 작성하면 객체를 생성하자마자 실행한다.
(생성자 메소드를 정의하는 목적 : 객체 생성되자마자 수행하고 싶은 작업이 있을 때 생성자 메소드 안에 적으면 된다. 만약, 객체 생성되자마자 수행하고 싶은 작업이 없으면 안적어도 된다. 자동으로 추가되는 메소드(기본생성자)를 쓰면된다. 기본 생성자에는 아무 구현 내용이 없다.)
* 생성자 메소드도 중복정의할 수 있다.
* 매개변수 생성자 : 매개변수가 있는 생성자를 매개변수 생성자라고 함.
구현부 : 클래스명(자료형 변수명..) { }
호출부 : new 클래스명(값);
- 매개변수 생성자를 이용해 객체 생성시점에 멤버변수값을 넣을 수 있다.
Employee emp2 = new Employee(100, "류관순", 250);
public Employee(int no, String name, int salary) {
System.out.println("인턴사원용 생성자 실행됨.");
this.no = no; // no는 가장 가까운 선언을 따르므로 매개변수의 no이다.
this.name = name;
this.dept = "인사팀";
this.position = "인턴";
this.salary = salary;
this.commission = 0;
this.isExpired = false;
}꿀팁 -> 이클립스에서 오른쪽버튼 source (alt + shift + s) 누르고 general constructor using fields를 클릭하면 쉽게 생성자를 만들 수 있다.
'기록' 카테고리의 다른 글
학원 DAY10. this() (0) 2022.09.26 학원 DAY10. this (0) 2022.09.26 학원 DAY9. 메소드(2) (0) 2022.09.17 학원 DAY9. 메소드의 매개변수, 반환타입, 메소드 중복정의(오버로딩) (0) 2022.09.17 학원 DAY8. 메소드 (0) 2022.09.17