- 생성자 , Constructor
- 특수한 목적을 가지는 메소드
- 객체를 초기화하는 역할 ( 객체 멤버 변수를 초기화 or 기타 초기화 작업 )
- 생성자 메소드
- 메소드명이 클래스명과 반드시 일치해야한다.
- 반환타입을 명시하지 않는다 > 반환값을 돌려주는 목적의 메소드가 아님
- 멤버 초기화를 구현한다.
- 기본 생성자 → 인자값이 없는 생성자
- 개발자가 만들지 않으면 자바가 자동으로 만들어준다.
- 인자값이 있는 생성자를 개발자가 만들었다면 기본 생성자는 자동으로 만들어지지 않는다.
- 생성자 오버로딩
public Person() {
this.name="익명";
this.age = -1;
}
//생성자 오버로딩 -> 메소드 오버로딩 ***
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person (String name) {
this.name = name;
this.age = -1;
}
public Person (int age) {
this.name = "익명";
this.age = age;
}
Person p5 = new Person(); // 익명 , -1
Person p6 = new Person("홍길동", 20); // 홍길동,20
Person p7 = new Person("아무개"); // 아무개 , -1
Person p8 = new Person(22); // 익명, 22
- 생성자 호출
- 생성자는 또 다른 생성자 호출 가능 → 누가 더 많은 일을 하는지 판단해서 호출
public Camera() {
this("none","none"); //-> Camera(String model, String color) 호출
}
public Camera(String model, String color) { //-> 가장 많은 일을 함
if(model.equals("none") || model.equals("A001")
|| model.equals("B001")|| model.equals("C001")) {
this.model = model;
}
this.color = color;
}
public Camera(String model) {
this(model,"none");
}
- 생성자 vs Setter
- 공통점 : 객체 변수의 값을 대입 할 수 있다.
- 차이점
1. 생성자 : 객체가 처음 만들어질때 자동으로 호출
- 두번 이상 호출 불가능( 객체가 생겨날때 딱 1번만 실행되고 그 이후에 호출 불가 ) →
초기화 역할
2. Setter : 개발자가 원하는 시점에 직접 호출
- 여러번 호출 가능 →
수정 역할
Person p = new Person();
class Person {
public Person() {
}
}
- 순서
- new → 설계도를 보고 heap 영역에 실체화 → 객체 만든 직후엔 모든 변수가 null
- Person() → 생성자가 호출됨으로써 초기화 값으로 변경 name = null, age = 0
- Person p
- =
- 변수의 생명 주기
- 지역 변수 : 변수 선언문이 생성 ~ 해당 영역이 종료 ( 메소드, 제어문 )
- 객체 변수(인스턴스 변수) : new, 객체 생성 ~ 객체 참조가 모두 끊기고 , GC가 객체를 회수할때 소멸
- 정적 변수(클래스변수) : main 실행전 생성 ~ main 메소드 종료시 소멸 , 프로그램 시작~ 종료
- 정적 멤버를 객체 생성을 통해서 초기화를 해야만 하는게 올바른 행동인가 ?
→ 정적 멤버의 초기화는 객체 생성 유무와 상관없이 별도로 실행되어야 한다.
- 객체 생성자, 정적 생성자
//객체 생성자
//-> 객체의 내부에 있는 멤버를 초기화하는 역할
//-> 정적 멤버를 초기화하지 않는다. -> 논리에 어긋남
public Monitor() {
this.model = "M100";
//Monitor.owner = "홍길동";
}
//정적 생성자
// - 정적 멤버를 초기화하는 전용 생성자
// - main() 실행전에 호출된다.
static {
Monitor.owner = "홍길동";
}
- 문법의 발전
- 생산자 : 클래스 설계하는 개발자
- 소비자 : 클래스를 사용해서 객체를 생성하는 개발자
- 생성자 : 생산자를 위한 기술이 아닌 소비자를 위한 기술
'프로그래밍 > Java' 카테고리의 다른 글
[JAVA]메소드 오버 로딩 , 재귀함수 (0) | 2021.08.19 |
---|---|
[JAVA]연산자 (0) | 2021.08.12 |
[Java] 자료형 (0) | 2021.07.11 |