생성자는
- 인스턴스 생성시 (객체가 생성될 때 마다) 초기화 해주는 메서드
- 자바의 모든 클래스에는 하나 이상의 생성자가 정의되야한다.
- 클래스이름과 동일한 메서드
- 메서드의 return type/리턴타입이 없다.
- 생성자를 명시 안한다면 default 로 설정이 되는데 이렇게 설정된 것을 초기화라고 한다.
- default 생성자는 생성자를 정의하지 않았을 경우에만 호출되어 진다.
- default 생성자의 접근 지시자(public, private...)는 class의 선언형태에 따라 결정된다.
public BookVO{
} //생성자가 생략된 클래스
public class Book{
private String title;
private int price;
private String company;
private int page;
public BookVO(){
super() // default constructor(기본생성자)는 이렇게 생겼다.
}
}
**위에 설명한 것 처럼 클래스 이름과 동일한 메서드 **
중복정의를 하는 방법은 아래의 두 방법과 같다.
package kr.tpc;
// 책(Object)->제목, 가격, 출판사, 페이지 수......
public class BookVO {
public String title;
public int price;
public String company;
public int page;
// 디폴트생성자 메서드(생략)--------------------------방법1
public BookVO() {
// 초기화 작업
this.title="자바";
this.price=14000;
this.company="이지스";
this.page=780;
}
// 생성자 메서드의 중복정의(overloading)-------------------------방법2
public BookVO(String title,int price,String company, int page) {
this.title=title;
this.price=price;
this.company=company;
this.page=page;
}
}
둘 중에 하나로 사용하면 됨ㅋ
이렇게 중복정의를 할 때 this 를 사용함. 왜냐하면!!
위에 보다시피 BookVO라는 이름이 같은 클래스가 두 개나 있다.
객체지향에서는 메소드이름이 같아도 에러가 안난다.
하지만 매개변수의 개수 혹은 타입 둘 중 하나가 달라야한다. 그럼 서로 다른 메소드로 받아들인다.
위의 클래스를 보면
하나는
public BookVO() {
this.title="자바";
this.price=14000;
this.company="이지스";
this.page=780;
}
또 하나는 아래와 같이 매개변수 부분이 다르다. 그래서 가능함!
public BookVO(String title,int price,String company, int page) {
this.title=title;
this.price=price;
this.company=company;
this.page=page;
}
}
** this 키워드(인스턴트 자신을 가리키는 참조변수)는
자기 자신의 멤버 변수에 접근할 수 있다는 의미 + 가독성을 위해서 사용한다. **
import kr.tpc.BookVO;
public class TPC12 {
public static void main(String[] args) {
// 생성자 -> »생성+초기화-> 중복정의
BookVO b1=new BookVO();
//b1.title="자바;
System.out.print(b1.title+"\t");
System.out.print(b1.price+"\t");
System.out.print(b1.company+"\t");
System.out.println(b1.page);
BookVO b2=new BookVO();
System.out.print(b2.title+"\t");
System.out.print(b2.price+"\t");
System.out.print(b2.company+"\t");
System.out.println(b2.page);
BookVO b3=new BookVO("Python", 18000, "데탑", 920);
System.out.print(b3.title+"\t");
System.out.print(b3.price+"\t");
System.out.print(b3.company+"\t");
System.out.println(b3.page);
}
}
위의 메인 클래스의 출력값은 아래와 같다.
자바 14000 이지스 780
자바 14000 이지스 780
python 18000 데탑 920
이유는!
BookVO b1=new BookVO();
BookVO b2=new BookVO();
b1, b2는 초기화 한 메모리에 부모클래스에서 명시적으로 저장해준 값들이 들어가고
b3는 중복정의(Overloading)을 해주었기때문에 해당 값이 나온다.
BookVO b3=new BookVO("Python", 18000, "데탑", 920);
공부할 때 도움 많이 된 블로그!!
https://cow-kite24.tistory.com/6
[Java] 생성자, 디폴트 생성자, 매개변수 생성자, 생성자 오버로딩 / 2021.07.26
1. 생성자란? 클래스의 변수들은 메서드에 의해 값이 변경될 수 도 있지만, 생성자를 사용하여 초기화시켜줄 수도 있다. 생성자는 인스턴스를 만들고, 인스턴스의 변수들을 초기화시켜주는 역할
cow-kite24.tistory.com
**인프런 강의 'Java TPC(생각하고, 표현하고, 코딩하고 / 박매일 강사님)'를 듣고 작성 및 발췌 했습니다.
'Java' 카테고리의 다른 글
[JAVA/자바]함수와 메서드의 개념 및 차이-스크랩 (0) | 2022.12.14 |
---|---|
[JAVA/자바]super와 super()비교 -스크랩 (0) | 2022.12.14 |
[JAVA/자바]Getter,Setter메소드 그리고 접근제어자 public, private (0) | 2022.12.14 |
[JAVA/자바]private 생성자와 static, non-static (0) | 2022.12.11 |
[JAVA/자바]변수와 메서드 (0) | 2022.12.11 |