생성자(Constructor)
- 객체가 생성될 때 호출됨. => new 키워드가 사용될 때 호출
- 특수 목적의 메소드로 객체의 초기화를 위해 사용
- 객체 변수에 값을 무조건 설정해야만 객체가 생성될 수 있도록 강제
- 생성자가 선언된 경우 생성자의 규칙대로만 객체를 생성할 수 있음.
- 규칙
- 클래스명과 동일
- 리턴 타입을 정의하지 않는다(void도 사용하지 않는다.).
- 객체가 생성될 때 자동으로 한번 호출
- 매개변수 조건에 따라 여러개 작성 가능
- 클래스에 최소 1개 존재
- 생성자 코드가 없을 경우 컴파일러가 기본생성자를 자동으로 생성
- 예제
클래스에 기본생성자와 매개변수를 가진 생성자를 정의했을 경우
public class Book {
String title;
int price;
public Book() {
}
public Book(String title, int price) {
this.title = title;
this.price = price;
}
public void showPrice() {
System.out.println(title + "의 가격은 " + price + "원 입니다");
}
}
public class Main {
public static void main(String[] args) {
Book b1 = new Book();
Book b2 = new Book("국어책", 3000);
b1.showPrice();
b2.showPrice();
}
국어책의 가격은 3000원 입니다
}
클래스에 기본생성자 없이 매개변수를 가진 생성자만 정의했을 경우
public class Book {
String title;
int price;
public Book(String title, int price) {
this.title = title;
this.price = price;
}
public void showPrice() {
System.out.println(title + "의 가격은 " + price + "원 입니다");
}
}
public class Main {
public static void main(String[] args) {
Book b1 = new Book();
Book b2 = new Book("국어책", 3000);
b1.showPrice();
b2.showPrice();
}
}
접근제어자(Access Modifier)
public class Sample {
private String secret;
private String getSecret() {
return this.secret;
}
}
- default
- 접근제어자를 별도로 설정하지 않는 경우 default 접근제어자가 자동으로 설정
- 동일한 패키지 않에서 접근 가능
> house/HouseKim.java
package house;
public class HouseKim {
String lastname = "kim";
}
> house/HousePark.java
package house;
public class HousePark {
String lastname = "park";
public static void main(String[] args) {
HouseKim kim = new HouseKim();
System.out.println(kim.lastname);
}
}
- protected
- 동일 패키지의 클래스 또는 해당 클래스를 상속받은 클래스에서만 접근 가능
> house/HousePark.java
package house;
public class HousePark {
protected String lastname = "park";
}
> house/person/JiseongPark.java
package house.person;
import house.HousePark;
public class JiseongPark extends HousePark {
public static void main(String[] args) {
EungYongPark jsp = new EungYongPark();
System.out.println(jsp.lastname);
}
}
package house;
public class HousePark {
protected String lastname = "park";
public String info = "this is public message.";
}
- 접근 제어자를 이용하면 프로그래머의 실수 방지 및 기타 위험 요소 제거 가능
static
- 공유되는 변수나 메서드를 정의할 때 사용
- 메모리 할당을 딱 한번만 하게 됨 => 메모리 적게 사용
- 값 공유
- static으로 설정하면 같은 메모리 주소만 바라보기 때문에 static 변수의 값 공유
- 메모리의 효율을 높이기 위한 목적보다는 공유의 목적으로 훨씬 더 많이 사용