✔생성자란?
객채를 만드는 특별한 메소드.
✔생성자의 역할
1.객체 생성 - 객체를 만드는 것
클래스이름 + 변수이름 = new + 클래스이름();
new 옆에 클래스 이름과 같은 함수 사용(생성자)
2.객체 초기화 - 객체의 필드 값을 설정하는 것
주위⚠
생성자의 이름은 클래스이름과 동일시켜야 한다.
생성자는 값을 반환하지 않는다.(return type표기하지 않음)
생성자 또한 메소드 이므로 사용을 위해 먼저 정의해야 된다.
[before]
/* 1. 객체 생성 */
Cat c = new Cat();
/* 2. 필드 초기화 */
c.name = "네로";
c.weight = 3.78;
c.age = 3;
[after]
/* 객체 생성과 동시에 초기화 */
Cat c = new Cat("네로", 3.78, 3);
class BankAccount {
String accNumber; // 계좌번호
String ssNumber; // 주민번호
int balance = 0; // 예금 잔액
public BankAccount(String acc, String ss, int bal) {
accNumber = acc;
ssNumber = ss;
balance = bal;
System.out.println("객체 생성");
}
public int deposit(int amount) {
balance += amount;
return balance;
}
public int withdraw(int amount) {
balance -= amount;
return balance;
}
public int checkMyBalance() {
System.out.println("계좌번호 :" + balance);
System.out.println("주민번호:" + ssNumber);
System.out.println("잔 액 :" + balance + '\n');
return balance;
}
}
class BankAccountConstructor {
public static void main(String[] args) {
BankAccount yoon = new BankAccount("12-34-89", "990990-9090990", 10000);
BankAccount park = new BankAccount("33-55-09", "770088-5959007", 10000);
yoon.deposit(5000);
park.deposit(3000);
yoon.withdraw(2000);
park.withdraw(2000);
yoon.checkMyBalance();
park.checkMyBalance();
}
}
[결과]
객체 생성
객체 생성
계좌번호 :13000
주민번호:990990-9090990
잔 액 :13000
계좌번호 :11000
주민번호:770088-5959007
잔 액 :11000
개발자가 생성자 함수를 하나라도 만들게되면 컴파일러는 디폴트 생성자를 안 만든다.
그래서 개발자가 디폴트 생성자(클래스(){}) 를 만들어 줘야지 에러가 안 난다.
✔CamelCase표기법
폴더 이름 = main함수를 가진 클래스의 이름
✔변형 된 CamelCase표기법
✔snake_case 표기법
⬆자동으로 패키지 생성
패키지는 클래스의 묶음으로서 하나의 디렉토리(폴더) 이다.
✔패키지를 사용하는 이유
같은 이름의 클래스는 한 패키지에 넣을 수 없기 때문에 같은 이름의 클래스르 가진 파일을 사용해야 할 경우, 다른 폴더에 저장되기 떄문에 별도로 관리할 수 있다.
서로 다른 패키지의 두 클래스는 인스턴스 생성 시 사용하는 이름이 다르다.
서로 다른 패키지의 두 클래스 파일은 저장되는 위치가 다르다.
✔패키지 이름 짓는 큐칙
모두 소문자로 구성
인터넷 도메인 이름의 역순으로 이름을 구성
이름 끝에 클래스를 정의한 주체 또는 팀의 이름 추가
ex)package com.wxfx.snart; / package com.fxmx.simple;
✔장점
협업 시, 서로 작업한 클래스 사이에서 발생할 수있는 이름 충돌 문제를 피할 수 있다.
문법 : package 패키지이름
package com.wxfx.smart 만들면서 패키지 안에 Baby클래스 생성
package com.wxfx.smart; public class Circle { public Circle() { System.out.println("B회사 입니다." + "com.wxfx.smart"); } }
package com.fxmx.simple 만들면서 패키지 안에 Baby 클래스 생성
package com.fxmx.simple; public class Circle { public Circle() { System.out.println("A회사 입니다." + "com.fxmx.simple"); } }
위 2개의 package 클래스 참조해서 객체 생성
public class CircleObjectTest { public static void main(String[] args) { com.fxmx.simple.Circle c1 = new com.fxmx.simple.Circle(); com.wxfx.smart.Circle c2 = new com.wxfx.smart.Circle(); } }
[결과]
A회사 입니다.com.fxmx.simple
B회사 입니다.com.wxfx.smart
- 노래의 제목을 나타내는 title
- 가수를 나타내는 artist
- 노래가 속한 앨범 제목을 나타내는 album
- 노래의 작곡가를 나타내는 composer, 작곡가는 여러 명 있을 수 있다.
- 노래가 발표된 연도를 나타내는 year
- 노래가 속한 앨범에서의 트랙 번호를 나타내는 track
- 기본 생성자와 모든 필드를 초기화하는 생성자를 작성
- ABBA의 “Dancing Queen"노래를 Song 객체로 생성하고 show()를 이용하여 이 노래의 정보를 출력하는 프로그램을 작성하라.
public class Song {
String title;
String artist;
String album;
String composer;
int year;
int track;
String local;
// 똑같은 파일에서는 참조하는 경우 public 없어도 됨.
Song(String title, String artist, int year, String local) {
this.title = title;
this.artist = artist;
this.year = year;
this.local = local;
}
// 모든 필드를 초기화 시키는 생성자
Song(String title, String artist, String album, String composer, int year, int track, String local) {
this.title = title;
this.artist = artist;
this.album = album;
this.composer = composer;
this.year = year;
this.track = track;
this.local = local;
}
// 디폴트 생성자(기본 생성자)
Song() {
}
void show() {
System.out.println(year + "년" + local + "국적의" + artist + "가 부른" + title);
}
public static void main(String[] args) {
Song song = new Song("Dancing Queen", "ABBA", 1978, "스웨덴");
song.show();
}
}
[결과]
1978년스웨덴국적의ABBA가 부른Dancing Queen