멍발자의 개발
생성자 본문
생성자
클래스에서 필드와 메소드 외에 생성자라고 불리는 것을 정의할 수 있다.
멤버 변수 초기화할 때 많이 쓴다.
생성자의 특징
- void 키워드를 가지지 않는 메소드
- 필드 변수를 초기화하는 메소드
- 클래스명과 같은 이름의 특수한 메소드
- 모든 클래스에 존재하고 오브젝트 작성시에 반드시 불리는 메소드
따로 선언해 주지 않으면 자동으로 선언된다.
종류
1. 기본 constructor : 자동적으로 추가되는 생성자다.
2. 인수 없는 constructor : 클래스 정의 내에 인수 없음으로 생성자를 정의한다.
3. 인수 있는 constructor : 클래스 정의 내에 인수 있음으로 생성자를 정의한다.
기본 constructor
클래스 블록내에 constructor을 기술하지 않는 것이다.
항상 마지막에 return 형태를 쓰지 않도록 주의해야 한다.
인수가 없는 생성자
class Computer1 {
private String os;
private int memory;
// 인수 없는 생성자
public Computer1() {
//필드 변수에 초기값 설정
this.os = null;
this.memory = 0;
System.out.println("PC가 생성되었습니다.");
}
public void show(){
System.out.println("PC의 OS는 " + os + "입니다.");
System.out.println("메모리는 " + memory + "GB입니다.");
}
}
public class Constructor1 {
public static void main(String[] args) {
System.out.println("=== 인수없는 생성자 실행 전 ===");
Computer1 com = new Computer1();
System.out.println("=== 인수없는 생성자 실행 후 ===");
com.show();
}
}
// 결과
=== 인수없는 생성자 실행 전 ===
PC가 생성되었습니다.
=== 인수없는 생성자 실행 후 ===
PC의 OS는 null입니다.
메모리는 0GB입니다.
클래스 명이랑 생성자 정의가 일치하지 않으면 컴파일 오류가 난다.
클래스가 하나도 정의가 안 되어 있으면 자동적으로 만들어지는데 빈 생성자가 만들어진다.
무조건 클래스에 하나의 생성자가 포함된다.
인수가 있는 생성자
class Computer2 {
private String os;
private int memory;
//인수가 있는 생성자
public Computer2(String os, int memory){
//필드 변수에 초기값 설정
this.os = os;
this.memory = memory;
System.out.println("OS는 " + os + "이고. 메모리는 " + memory + "GB의 PC가 만들어졌습니디.");
}
public void show() {
System.out.println("PC의 OS는 " + os + "입니다.");
System.out.println("메모리는 " + memory + "GB입니다.");
}
}
public class Constructor2 {
public static void main(String[] args) {
System.out.println("===인수가 있는 생성자 실행 전===");
Computer2 com = new Computer2("Windows 1", 32);
System.out.println("=== 인수가 있는 생성자 실행 후 === ");
com.show();
}
}
//결과
===인수가 있는 생성자 실행 전===
OS는 Windows 1이고. 메모리는 32GB의 PC가 만들어졌습니디.
=== 인수가 있는 생성자 실행 후 ===
PC의 OS는 Windows 1입니다.
메모리는 32GB입니다.
생성자는 외부 액세스가 불가능한 private이기 때문에 컴파일 오류가 되어 실행할 수 없다.
public으로 되어야 실행 가능하다.
기본 생성자
자동으로 만들어지는 건 인수가 없는 생성자가 만들어지는 것이다.
빈 생성자를 만드는 습관을 들이자.
기본 생성자를 사용할 수 없는 프로그램 = 생성자 만들 때 private를 사용한 경우
생성자는 클래스 내에 정의 될 수 있다.
생성자에 액세스 한정자를 붙일 수 있다. private로 해 버리면 외부 클래스로부터 객체의 생성을 할 수 없다.
constructor을 정의하고 있으면 디폴트 constructor은 자동으로 준비하지 않게 된다.
클래스 명이랑 같게 하고 return형은 없고 메소드 정의와 유사하다.
인수값의 설정이 필드값이랑 반대가 되면 안 된다.