public class BookVO {
private String title;
private int price;
private String company;
private int page;
}
BookVO b = new BookVO();
초기화하기 위해서 코드를 작성하지 않았다.
앞에서 배운것같이 b.title = "자바";
이런식으로 초기화하는 방법도 있지만,
지금은 생성자를 통해서 하는 법을 배우고자 한다
public class BookVO {
private String title;
private int price;
private String company;
private int page;
//초기화
public BookVO(String title, int price, String company, int page){
this.title = title;
this.price = price;
this.company = company;
this.page = page
}
}
BookVO b = new BookVO("자바", 17000, "Kyu", 530); // 초기값
생성자도 메소드이기 때문에 매개변수에 값을 전달할 수 있다.
받은 값을 this
를 이용해서 초기화할 수 있다
this
는 앞에서 언급했듯이 자기자신 BookVO를 가리키는 것이기때문에,
그리고 this
도 객체이기 때문에 .
을 이용해 초기화할수있는것이다.
만약에 위 코드에서 this
가 없으면, 예를 들어 title = title
이라면 두개의 title
모두 매개변수로 들어온값을 나타내기 때문에 초기화를 할 수없다
생성자의 가장 큰역할을 초기화이다.
//초기화
public BookVO(String title, int price, String company, int page){
this.title = title;
this.price = price;
this.company = company;
this.page = page
}
BookVO b = new BookVO("자바", 17000, "Kyu", 530); // 초기값
이렇게 코드를 만들면 초기화를 한다고 했다.
초기화를 하기전에는 분명히 메모리에 객체가 만들어져야하는데,
눈에 보이지 않지만 생성자 메소드 안에는 객체를 메모리에 올리는 코드가 포함되어 있다.
그래서 기본생성자만가지고는 초기화를 할 수 없고 별도로 매개변수를 넣고 this를 이용해 초기화를 해야한다.
BookVO b = new bookVO();
BookVO b = new BookVO("자바", 17000, "Kyu", 530);
다른 언어에서는 메소드 이름이 같으면 에러가나는데 객체지향에서는 이런식으로 해도 중복에러가 나지않는다.
매개변수의 갯수가 다르기때문에 다른 함수로 해석을 한다.
그래서 원하는 대로 생성자 메소드를 여러개 만들 수 있다.