생성자 : new 객체()
heap 메모리에 저장됨
iv(인스턴스 변수) 초기화 메서드
- private 외부에서 접근할 수 없음
- 인스턴스 초기화 메서드
- 초기화
란? : 값을 새로 넣어주는 것, 원하는 값을 세팅하는 것
Time t = new Time(); - 이것도 생성자
Time t = new Time(12, 34, 56); - 이것도 생성자, 생성자 추가해줘야 이렇게 편리하게 사용할 수 있음.(기본생성자)
class Card {
Card () { //매개변수 없는 생성자 (오버로딩)
// 인스턴스 초기화 작업
}
Card (String kind, int number) { //매개변수 있는 생성자 (오버로딩)
// 인스턴스 초기화 작업
}
}
- 자동으로 생성해 준다해도 의식적으로 반드시 넣어주기.
[자바의정석]
- 1. 참조변수 c 만들어짐
- 2. new 객체가 만들어짐 (color, gearType, door)
- 3. 생성자 호출 (White, auto, 4)
- 4. = 마지막은 대입
StudentTest.java
Object를 가져다 사용하는 쪽을 Client 쪽이라고 한다.
서비스를 제공해주는 모듈
서비스를 사용하는 모듈이 나누어져 있다.
자동으로 초기화가 된다.
아무 정보도 넣지 않았기 때문에 알아서 초기화된 값을 넣어준 것이다.
넘어오는 정보를 초기화 시키고 싶다면, 기본생성자에 파라미터를 넣어 값을 받아올 수 있다.
여기서 초기화의 의미는~~
새로운 값을 넣어준다는 것이다.
파라미터에 받아올 값을 적어주고 멤버변수에 초기화 시켜주는 작업을 해줄 수 있다.
파라미터엔 보통 멤버변수와 이름을 똑같이 작성해주는데(가독성이 좋기때문, 아~ 이 변수는 이 변수에 넣기위해서 있는 거구낭~~~), studentNumber = studentNumber 로 초기화시킬 수 없는 이유는 보통 변수를 가장 먼저 찾는 방법은 자신과 가장 가까운 곳에서 찾기 때문에 멤버변수보다 파라미터에 있는 지역변수에 적용이된다. 결국 매개변수가 매개변수에 값을 대입해주는 형식이 된다.
우리는 멤버변수에 넘어온 값을 대입시키려는 의도임. 그것이.. 생성자의 역할임ㅇㅇ..
객체가 생성되면 → 자기가 받은 파라미터의 값을 → 멤버변수에 대입
this를 써줘야 멤버변수로 인식한다~
저장 후 (컴파일 된 후) 오류가 난다~!
기본생성자가 제공되는 경우는~~
클래스에 생성자가 하나도 없는 경우에만 컴파일러가 생성자를 넣어준다~~
생성자를 직접 만들어주게 되면~ studentLee.showStudentInfo() 이거 제공 안된댑니다..
정리하면 기본 생성자가 아예 없으면 자동으로 기본생성자를 하나 만들어주기때문에 showStudentInfo()를 사용할 수 있지만, 기본 생성자를 직접 만들어주게 되면 안에 있는 메소드 showStudentInfo() 사용하지 못한다.
근데 쓰고싶으면..!!
기본 생성자 하나 다시 쓰면된다~
→ 오버로딩!
똑같은 이름의 생성자가 두개가 된것이다. 그것이~ 바로 오~버~로~딩..
경우에 따라 기본 생성자를 안만드는 경우가 있는데, 그 경우는 만약 이 객체를 만들기 위해선 항상 이름, 학번, 학년이 반드시 필수요소로 있어야 할 때. 이 요소가 없으면 이 객체를 생성할수 없다면 기본생성자를 제공해선 안됨.