만들어 놓은 클래스를 main ()함수에서 사용하기위해 객체로 선언한 것을 인스턴스화라고 한다.
이전에 배운 클래스는 객체로써 사용하기위해서
클래스를 정의한 것
이다.
정의해 놓은 클래스를 main()함수에서 객체로 사용하기 위해서는객체생성
이라는 단계를 거쳐야한다.
객체생성이란, 만들어놓은 클래스를 main()함수에서 사용하고자 할 때 사용자가 컴퓨터에게
해당 클래스를 객체로써 사용 할 예정이니 메모리 공간을 할당해줘
하여 실제로 사용할 수 있도록 메모리 공간을 할당받게되는 과정을인스턴스화한다
라고 말하며, 할당된 클래스를인스턴스 또는 객체
라고 한다.
student라는 클래스를 만들었고 이 클래스를 main()함수에서 객체로 사용 하고자할 때 main()함수에서 new예약어를 사용하여 객체를 생성한다.
💡 객체 생성 문법 : 클래스명 + 객체로 쓸 이름 = new + 생성자();
Student stu = new Student();
하나의 클래스를 만들어 놓은 후 main()함수에서 여러개의 객체를 생성할 수 있다.
아래 예시를 보자.
student stu = new Student();
student stu2 = new Student();
// stu 와 stu2는 서로 다른 객체이다.
// 객체 안의 속성과 메소드는 동일한 내용으로 복사가 되지만 두개의 객체가 서로 값을 공유하지는 않기 때문에
// stu에 멤버변수 값을 초기화 하더라도 공유가 되지 않아 stu2는 초기화가 안된다.
(1) 생성자는 클래스명과 동일하게 입력한다.
(2) 생성자는 객체 생성과 동시에 멤버변수를 초기화하는 역할을 한다.
(3) 생성자를 초기화하지 않을 경우 클래스 내에는 컴파일러가 자동적으로 default생성자(기본생성자)를 만든다.
클래스를 정의할 때 멤버벼수는 선언만하고 값을 할당하지는 않을 경우 , main()함수에서 객체 생성과 동시에 멤버변수를 초기화 시킬 수가 있는데 그 역할을 생성자가 한다.
Student라는 클래스에 멤버변수가
(1) String studentName;
(2) int studentAge;
를 선언 한 상태라고 가정
Student stu = new Student("이지현", 19);
main()함수에 객체생성과 동시에 값을 넣어주게 되면, stu라는 객체안에 Student클래스의 변수와 메소드가 복사가 되고, 멤버변수값을 선언한 차례대로 studentName = "이지현",
studentage = 19가 초기화된다.
💡 생성자 오버로드란 : 생성자이름이 같고 매개변수만 다른 경우를
생성자오버로드
라고 한다.
객체 생성시 매개변수를 받지 않고 생성 할 경우, 매개변수를 1개만 받고 생성 할 경우 등
여러가지 형태로 만들어야 할 때는 생성자를 오버로드하여 여러개를 맨들어둔다.
다만 생성자를 여러개 만들게 되면, 자바 컴파일러는 디폴트생성자를 만들지 않기 때문에
수동적으로 사용자가 만들어줘야 한다.
new예약어를 통하여 객체생성시 사용자가 지정한 변수를 참조변수라고 한다.
Student stu = new Student(); // stu가 참조변수이다.
생성된 객체를 통하여 클래스 내 멤버변수와 메소드에 접근할 수 가 있다.
💡 호출방법 : 참조변수 + .(점) + 멤버변수/메소드;
stu.studentName = "이지현"; // 멤버변수studentName를 초기화하는 과정
stu.getStudentName(); // 메소드getStudentName를 호출하는 과정