클래스를 사용하기 위해서는 클래스를 생성하여야함
클래스가 생성된다는 것은 클래스를 실제 사용할 수 있도록 메모리공간(힙 메모리)을 할당받는다는 뜻
이렇게 실제로 사용할 수 있도록 생성된 클래스를 '인스턴스'라 함
클래스자료형 변수이름 = new 생성자;
ex) Student studentLee = new Student( );
new Student( )를 선언하면 Student가 하나 생성됨
각 Student는 studentID, studentName 등의 멤버변수를 지님
이들 변수를 저장할 공간이 힙메모리
클래스 생성자를 하나 호출하면 인스턴스가 힙메모리에 생성됨
Student studentLee = new Student( );
위와 같이 생성된 클래스를 studentLee변수에 대입하면
studentLee변수가 인스턴스가 저장된 메모리를 가리킴
지역변수 studentLee에 생성된 인스턴스를 대입하는것은
studentLee에 인스턴스가 생성된 힙 메모리의 주소를 대입한다는것과 같은의미
Student studentLee = new Student( );
Student studentKim = new Student( );
생성된 두 인스턴스는 각각 다른 메모리 공간을 차지
studentLee.studentName과 studentKim.studentName은 다른값
힙메모리에 생성된 인스턴스의 메모리주소는 참조변수에 저장됨 ex) reference.Student@58ceff1
여기에 나오는 주소값은 해시코드값이라고도 함
이 값은 자바 가상 머신에서 객체가 생성되었을 때 생성된 객체에 할당하는 가상주소값
studentLee를 참조변수, 주소값을 참조값이라 함
생성자의 역할은 클래스를 처음 만들 때 멤버 변수나 상수를 초기화함
생성자의 이름은 그 클래스의 이름과 같음
생성자는 상속되지 않으며 리턴값은 없다
하나의 클래스에는 반드시 적어도 하나 이상의 생성자가 존재함
프로그래머가 생성자를 기술하지 않으면 디폴트 생성자가 자동으로 생성됨
디폴트 생성자는 매개변수와 구현코드가 없음
만약 클래스에 매개변수가 있는 생성자를 추가하면 디폴트 생성자는 제공되지 않음
필요에 의해 생성자를 추가하여 하나의 클래스에 생성자가 두 개 이상 중복 정의 해야하는 경우 생성자 오버로드라고 함
: 객체 지향 프로그램에서는 접근제어자 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있음
public int = a;
protected int = b;
(default) int c = 3;
private int = d;