클래스에 인스턴스를 생성하게 해주는 함수
생성자의 이름은 클래스의 이름과 같아야 한다.
해당 클래스의 인스턴스가 만들어질 때 클래스의 '멤버변수의 값을 초기화'한다.
반환타입없다.
→ 생성자: 인스턴스를 만들 때 멤버변수를 초기화한다.
기본생성자: Student() 괄호안에 비어있음, 값을 할당하지 않는다.
생성할 때 필수 값을 가지고 있어야 할 경우, 아래와 같이 정의한다.
public class Student{
멤버변수;
멤버함수;
Student(매개변수){
멤버변수=매개변수;
}
}
main에서 생성, 호출
public static void main(String[] args) {
Student st = new Student("h",123);
st.infoPrint();
}
결과값

만약 생성할 때 필수값을 가져야해서 개발자가 정의해주었을 때는
기본 생성자는 오류가 난다.

기본 생성자도 필요하다면 직접 넣어줘야 한다.
package ex02;
public class Student {
int no;
String name;
int kor_score;
int eng_score;
int math_score;
Student(int no, String name){
this.no=no;
this.name=name;
}
Student(){ // 기본생성자
}
void infoPrint() {
System.out.println("이름: "+name);
System.out.println("번호: "+no);
System.out.println("국어점수: "+kor_score);
System.out.println("영어점수: "+eng_score);
System.out.println("수학점수: "+math_score);
System.out.println("------------------");
}
}


반환타입, 함수이름, 매개변수타입&갯수
반환타입 함수이름(매개변수){
}
클래스의 멤버변수와 함수의 매개변수의 이름을 같게 하려면(사용성↑)
this.멤버변수 = 매개변수로 사용한다.
// 멤버변수
int no;
String name;
char gender;
// 모든 매개변수로 생성
Student(int no, String name, char gender){
this.no=i;
this.name=s;
this.gender=c;
}
예제
1. 성별, 이름, 나이를 가진 Person클래스
2. 기본 생성자를 포함해서 모든 생성자를 만든다.
package ex0325;
public class Person {
char gender;
String name;
int age;
Person(){}
Person(char gender){
this.gender=gender;
}
Person(String name){
this.name=name;
}
Person(int age){
this.age=age;
}
Person(char gender, String name){
this.gender=gender;
this.name=name;
}
Person(String name, char gender){
this.name=name;
this.gender=gender;
}
Person(char gender, int age){
this.gender=gender;
this.age=age;
}
Person(int age, char gender){
this.age=age;
this.gender=gender;
}
Person(String name, int age){
this.name=name;
this.age=age;
}
Person(int age, String name){
this.age=age;
this.name=name;
}
Person(char gender, String name, int age){
this.gender=gender;
this.name=name;
this.age=age;
}
Person(char gender, int age, String name){
this.gender=gender;
this.age=age;
this.name=name;
}
Person(String name, int age, char gender){
this.name=name;
this.age=age;
this.gender=gender;
}
Person(String name, char gender, int age){
this.name=name;
this.age=age;
this.gender=gender;
}
Person(int age, char gender, String name){
this.age=age;
this.gender=gender;
this.name=name;
}
Person(int age, String name, char gender){
this.age=age;
this.name=name;
this.gender=gender;
}
}
생성자 내에서 중복되는 경우를 고려해서 이미 생성한 생성자를 활용할 수 있다.
1번을 2번처럼 사용 가능하다.
1번
Person(char gender, String name){
this.gender=gender;
this.name=name;
}
Person(char gender, String name, int age){
this.gender=gender;
this.name=name;
this.age=age;
}
2번
Person(char gender, String name){
this.gender=gender;
this.name=name;
}
Person(char gender, String name, int age){
this(gender, name); // 위에서 생성한 생성자를 활용
this.age=age;
}
예제
학생의 번호를 바꿀 수 있는 멤버 함수
void setNo(int no) {
// 학생의 번호를 바꿀 수 있는 멤버함수
this.no=no;
}
void setName(String name) {
// 학생의 이름을 바꿀 수 있는 멤버함수
this.name=name;
}
void setGender(char gender) {
현재 인스턴스가 가지고 있는 멤버변수 값을 리턴해주는 함수
int getNo() {
return this.no;
}
String getName() {
return this.name;
}
char getGender() {
return this.gender;
}
멤버변수를 전달받은 값으로 할당시키는 함수
멤버변수의 값을 외부로 리턴하는 함수
[예제] 도서정보프로그램
1. class 이름: Book
2. 멤버변수: 제목(title), 장르(String genre), 출판사(publisher), 가격(price), 작가(writer)
*필수데이터: title, writer, publisher
3. 멤버변수의 setter, getter 함수를 생성
BookTest.java
package ex0325;
public class BookTest {
public static void main(String[] args) {
Book b = new Book("오라클","길벗","조현영");
System.out.println(b.title+", "+b.genre+", "+b.publisher+", "+b.price+"원, "+b.writer);
b.setGenre("학습");
b.setPrice(12000);
System.out.println(b.title+", "+b.genre+", "+b.publisher+", "+b.price+"원, "+b.writer);
System.out.println("제목: "+b.getTitle());
System.out.println("장르: "+b.getGenre());
System.out.println("출판사: "+b.getPublisher());
System.out.println("가격: "+b.getPrice());
System.out.println("작가: "+b.getWriter());
}
}
Book.java //클래스
package ex0325;
public class Book {
String title;
String genre;
String publisher;
int price;
String writer;
Book(String title, String publisher, String writer){
this.title=title;
this.publisher=publisher;
this.writer=writer;
}
void setTitle(String title) {
this.title=title;
}
void setGenre(String genre) {
this.genre=genre;
}
void setPublisher(String publisher) {
this.publisher=publisher;
}
void setPrice(int price) {
this.price=price;
}
void setWriter(String writer) {
this.writer=writer;
}
String getTitle() {
return title;
}
String getGenre() {
return genre;
}
String getPublisher() {
return publisher;
}
int getPrice() {
return price;
}
String getWriter() {
return writer;
}
}
결과

[예제]
함수이름: bookInfoToString
책정보를 문자열로 반환한다.
String bookInfoToString() {
return "Title: " + getTitle() +
" Genre: " + getGenre() +
" Publisher: " + getPublisher() +
" Price: " + getPrice() + "원" +
" Writer: " + getWriter();
}
System.out.println(b.bookInfoToString());

이클립스 에디터가 getter랑 setter, toString() 등 생성할 수 있게 제공해준다.

@Override
public String toString() {
return "Book [title=" + title + ", genre=" + genre + ", publisher=" + publisher + ", price=" + price
+ ", writer=" + writer + "]";
}

[용어정리]
클래스: 사용자가 정의하는 자료형, 인스턴스의 명세서, 붕어빵 틀
멤버변수: field, 클래스에 정의된 변수
멤버함수: method, 클래스에 정의된 함수
인스턴스: 메모리에 클래스가 정의한대로 만들어진 상태 → 메모리맵으로 그릴 수 있음, 붕어빵
생성자: 인스턴스를 만들어줌. new '클래스이름()';
참조변수: 클래스를 통해 만들어진 인스턴스에 접근하기 위한 변수 → 주소를 저장할 변수
.: 참조변수를 통해 인스턴스의 field에 접근, ~의 라고 해석하면 좋음
this: 클래스 내 field, 멤버변수를 지정할 때 사용
일반(원시) 자료형: int n=10;처럼 변수선언 후 10이라는 값을 넣을 수 있다.
클래스: int[] arr; 는 배열을 가리킬 변수를 선언한 것이지만(참조변수) 배열은 생성되지 않아 new int[10];을 해주어야 함.
다른 패키지에 있는 클래스를 쓰기 위해서는
import 패키지.클래스명;
그리고 그 클래스의 필드에 접근하려면 필드 앞에 public을 설정해주어야 다른 패키지에서 사용할 수 있다.

private으로 정의해주면 같은 패키지여도 사용할 수 없음.
