생성자가 뭐냐면? 메소드다 !
; 인스턴스가 생성될 때 마다 호출되는 '인스턴스 초기화 메서드'
객체를 만들면 ! 기본 값 0 들어가 !!
그 다음에 내가 어떤 값을 설정하면 ? 원하는 값으로 초기화를 해야해 ~
이런 과정을 초기화 라고 함 ~~~
Time t = new Time();
t.hour = 12;
t.minute = 34;
t.second = 56;
요런 과정을 말함!
근데 이게 번거로우니까 한번에!!!
Time t = new Time(12, 34, 56);
이것이 생성자!
생성자가 하는일 ? - 인스턴스 초기화 !
초기화는 ? - 객체 만들고 원하는 값 세팅
초기화에 필요한 다른 작업 - 인스턴스 생성시 수행할 작업(iv초기화)에 사용
왜 만드냐? 편리하게 초기화 하기 위해서 !
생성자, 기본적으로 메서드인데 조금 특별한 메서드이다.
지켜야할 규칙!!!!
- 이름이 클래스 이름과 같아야 한다.
- 리턴값이 없다. (void 안붙임) / 대입문 / 원래 메서드는 리턴값없으면 void 붙이자나 . 얘는 왜 안붙여? 항상 반환값이 없으니까. 규칙임
- 모든 클래스는 반드시 생성자를 가져야한다. (한개 이상)
// Card c = new Card(); 에서 저 뒤에 card(); 가 생성자 호출 이었음 // 기본 생성자 , 생성자가 하나도 없을 때 자동 생성
기본 생성자
- 매개변수가 없는 생성자
- 기본생성자는 직접 작성해줘야 하는데, 생성자가 하나도 없을 때만 컴파일러가 자동 추가
생성자에서 다른 생성자 호출할 때 사용!
다른 생성자 호출시 첫 줄에서만 사용 가능
같은 클래스내 생성자 호출할 때 클래스이름 대신 this를 씀
왜냐? 규칙임 걍 외우자
서로 호출하는 일이 많음 - 코드 중복을 제거하려고 !
ex)
기본생성자 -> 매개변수 없으니 기본값 지정해줘
// 차의 경우 뭐 컬러 화이트 기어타입 오토 문 네개 이런식
// 원래는 매개변수 주면 주는 애로 만들면 되는데, 아무것도 지정해주지 않으면 디폴트 값으로 써라 !
근데 그 디폴트 값 지정하느라 기본생성자에 써둔 것을 보면 -> 매개변수 있는 생성자하고 코드가 중복되잖아 !!!! 그니까 ~ this 어쩌고 써서 ㄱ
Car() {
color = "흰"; ====> 여기부터 세줄 밑에하고 같잖아
기어 = "오토"; 그니까 그걸 줄여서
문 + 4; >>>> Car { this("white", "auto", 4);로
}
car (String c, String g, int d) {
color = "흰";
기어 = "오토";
문 + 4;
}
코드의 중복을 없애자 ~
위의 생성자에서 아래 생성자를 호출 하도록
this() 이거는 생성자
괄호 안붙은 this는 참조변수야!
비슷하게 생겼는데 완전히 별도니까 잘 구분해 !!!!!!!
인스턴스 자신을 가리키는 참조변수
인스턴스 메서드(생성자포함)에서 사용가능
지역 변수와 인스턴스 변수를 구별할 때 사용
this가 있어야 iv ~~
인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다!
모든 인스턴스메서드에 지역변수로 숨겨진채로 존재한다. (선언 x, 사용가능)
스태틱 메서드에서는 this 사용불가 , Iv도 사용 불가
this는 인스턴스 메서드에서만 !!
