💁♀️ 객체 배열(Object Array)이란,
레퍼런스 변수에 대한 배열.
생성한 인스턴스도 배열을 이용해서 관리하면 동일한 타입의 여러 개 인스턴스를 연속 처리할 수 있어 편리함. 또한 반환값은 1개의 값만 반환할 수 있어 동일한 타입의 여러 인스턴스를 반환해야 하는 경우도 객체 배열을 이용할 수 있음
객체 배열을 생성하는 것은 객체를 다루기 위한 참조변수들을 만든 것일 뿐, 객체가 저장되어있지는 않음.
따라서 객체 배열 생성 후, 추가적으로 객체를 저장해야 함
public class Car {
// 필드
private String modelName;
private int maxSpeed;
// 매개변수 생성자
public Car(String modelName, int maxSpeed) {
this.modelName = modelName;
this.maxSpeed = maxSpeed;
}
// 메소드 선언
// getter & setter 생략
// 출력문 메소드 선언
public void driveMaxSpeed() {
System.out.println(modelName + "이(가) 최고 시속 " + maxSpeed + "km/h로 달려갑니다.");
}
}
public class Application {
public static void main(String[] args) {
// 자동차 5대 인스턴스를 생성
Car car1 = new Car("페라리", 300);
Car car2 = new Car("람보르기니", 350);
Car car3 = new Car("롤스로이스", 250);
Car car4 = new Car("부가티베이론", 400);
Car car5 = new Car("포르쉐", 450);
// car1.driveMaxSpeed();
// car2.driveMaxSpeed();
// car3.driveMaxSpeed();
// car4.driveMaxSpeed();
// car5.driveMaxSpeed();
>>> 아래 반복문을 사용하는 것이 훨씬 효율적
Car[] carArray = new Car[5];
>>> 자동차 객체 5개가 생긴 것이 아닌 5개의 레퍼런스 배열이 생긴 것
>>> (각각에 null 값이 들어있는 상태)
/*---------------------------------------------*/
System.out.println(carArray); >>> Car의 주소값 출력됨
System.out.println(carArray[0]); >>> null 출력됨
// carArray[0].driveMaxSpeed();
>>> NullPointerException 에러.
>>> carArray[0]은 아직 Car 객체를 참조하지 않는 상태로 null 값
>>> null 값을 가지는 레퍼런스 변수를 대상으로 참조 연산자를 사용하면
>>> java.lang.NullPointerException이 발생
/*---------------------------------------------*/
carArray[0] = new Car("페라리", 300);
carArray[1] = new Car("람보르기니", 350);
carArray[2] = new Car("롤스로이스", 250);
carArray[3] = new Car("부가티베이론", 400);
carArray[4] = new Car("포르쉐", 450);
>>> 자동차 객체 5개 생성 완료
>>> 배열이므로 반복문을 사용할 수 있음
for(int i = 0; i < carArray.length; i++) {
carArray[i].driveMaxSpeed();
}
>>> 향상된 for문도 사용 가능
for(Car car : carArray) {
car.driveMaxSpeed();
}
>>> 객체 배열도 할당과 동시에 초기화 할 수 있음
Car[] carArray2 = {
new Car("페라리", 300),
new Car("람보르기니", 350),
new Car("롤스로이스", 250),
new Car("부가티베이론", 400),
new Car("포르쉐", 450)
};
}
}
💻 Mini Console
[Lcom.greedy.section01.init.Car;@4e718207
null
페라리이(가) 최고 시속 300km/h로 달려갑니다.
람보르기니이(가) 최고 시속 350km/h로 달려갑니다.
롤스로이스이(가) 최고 시속 250km/h로 달려갑니다.
부가티베이론이(가) 최고 시속 400km/h로 달려갑니다.
포르쉐이(가) 최고 시속 450km/h로 달려갑니다.
페라리이(가) 최고 시속 300km/h로 달려갑니다.
람보르기니이(가) 최고 시속 350km/h로 달려갑니다.
롤스로이스이(가) 최고 시속 250km/h로 달려갑니다.
부가티베이론이(가) 최고 시속 400km/h로 달려갑니다.
포르쉐이(가) 최고 시속 450km/h로 달려갑니다.
DTO를 활용한 간단한 회원 관리용 프로그램
public class MemberDTO {
// 관리할 회원 정보를 추상화해서 필드 작성
private int num;
private String id;
private String pwd;
private String name;
private int age;
private char gender;
// 모든 필드를 초기화 하는 생성자
public MemberDTO(int num, String id, String pwd, String name, int age, char gender) {
this.num = num;
this.id = id;
this.pwd = pwd;
this.name = name;
this.age = age;
this.gender = gender;
}
/* getter, setter */
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
// 모든 필드 값을 문자열로 반환
public String getInformation() {
return "MemberDTO [num = " + num + ", id = " + id + ", pwd = " + pwd + ", name = " + name
+ ", age = " + age + ", gender = " + gender + "]";
}
}
public class MemberInsertManager {
public void insert(MemberDTO[] members) {
System.out.println("회원을 등록합니다.");
// 향상된 for문
for(MemberDTO member : members) { >>> members라는 회원정보의 객체 배열을 출력할 것
System.out.println(member.getName() + "님을 회원 등록에 성공했습니다.");
}
}
}
public class MemberManager {
public void signUpMembers() {
// 6명의 회원 정보를 담을 members 객체 배열 생성
MemberDTO[] members = new MemberDTO[6];
>>> 1. 회원 등록을 해보자면, 레퍼런스 배열의 공간을 추가해주고
>>> 아래에 추가할 회원 정보를 입력
// 6명의 회원 정보를 각 인덱스에 할당
members[0] = new MemberDTO(1, "user01", "pass01", "효연이", 25, '여');
members[1] = new MemberDTO(2, "user02", "pass02", "수민이", 11, '여');
members[2] = new MemberDTO(3, "user03", "pass03", "치즈", 2, '남');
members[3] = new MemberDTO(4, "user04", "pass04", "엄마", 44, '여');
members[4] = new MemberDTO(5, "user05", "pass05", "아빠", 46, '남');
members[5] = new MemberDTO(6, "user06", "pass06", "동연이", 22, '남');
// 회원 정보를 입출력할 용도의 MemberInsertManager 클래스 작성
MemberInsertManager memberInsertManager = new MemberInsertManager();
memberInsertManager.insert(members);
>>> 주소값을 위의 insert 메소드에 인자로 넘기는 중
}
public void printAllMembers() {
// MemberSelectManager 클래스 작성
>>> 작성한 메소드를 호출하고 반환받은 값을 객체 배열 레퍼런스 변수에 저장
/*----------------------------------------------------------------------*/
// MemberSelectManager msm = new MemberSelcetManager();
// MemberDTO[] selectedMembers = msm.selectAllMembers();
/*----------------------------------------------------------------------*/
>>> 위 두 줄을 아래의 한 줄로 작성
>>> msm는 앞으로 사용될 일이 없어 굳이 msm에 주소값을 저장할 필요없이
>>> new MemberSelcetManager()를 직접 식에 작성
MemberDTO[] selectedMembers = new MemberSelectManager().selectAllMembers();
>>> selectAllMembers();는 객체 배열을 반환함
System.out.println("===== 가입 된 회원 목록 =====");
// 향상된 for문
for(MemberDTO member : selectedMembers) {
System.out.println(member.getInformation());
}
}
public class MemberSelectManager {
public MemberDTO[] selectAllMembers() {
>>> 2. 회원 전체 조회를 해보자면, 아래에 추가할 회원의 정보를 적어줌
return new MemberDTO[] {
new MemberDTO(1, "user01", "pass01", "효연이", 25, '여')
, new MemberDTO(2, "user02", "pass02", "수민이", 11, '여')
, new MemberDTO(3, "user03", "pass03", "치즈", 2, '남')
, new MemberDTO(4, "user04", "pass04", "엄마", 44, '여')
, new MemberDTO(5, "user05", "pass05", "아빠", 46, '남')
, new MemberDTO(6, "user06", "pass06", "동연이", 22, '남')
};
}
}
public class Application {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
MemberManager memberManager = new MemberManager();
menu :
while(true) {
System.out.println("===== 회원 관리 프로그램 =====");
System.out.println("1. 회원 등록");
System.out.println("2. 회원 전체 조회");
System.out.println("9. 프로그램 종료");
System.out.print("메뉴 선택 : ");
int no = sc.nextInt();
switch(no) {
case 1 : memberManager.signUpMembers(); break;
case 2 : memberManager.printAllMembers(); break;
case 9 : System.out.println("프로그램을 종료합니다."); break menu;
default : System.out.println("잘못 된 번호를 입력하셨습니다."); break;
}
}
}
}
💻 Mini Console
===== 회원 관리 프로그램 =====
1. 회원 등록
2. 회원 전체 조회
9. 프로그램 종료
메뉴 선택 : 1
회원을 등록합니다.
효연이님을 회원 등록에 성공했습니다.
수민이님을 회원 등록에 성공했습니다.
치즈님을 회원 등록에 성공했습니다.
엄마님을 회원 등록에 성공했습니다.
아빠님을 회원 등록에 성공했습니다.
동연이님을 회원 등록에 성공했습니다.
===== 회원 관리 프로그램 =====
1. 회원 등록
2. 회원 전체 조회
9. 프로그램 종료
메뉴 선택 : 2
===== 가입 된 회원 목록 =====
MemberDTO [num = 1, id = user01, pwd = pass01, name = 효연이, age = 25, gender = 여]
MemberDTO [num = 2, id = user02, pwd = pass02, name = 수민이, age = 11, gender = 여]
MemberDTO [num = 3, id = user03, pwd = pass03, name = 치즈, age = 2, gender = 남]
MemberDTO [num = 4, id = user04, pwd = pass04, name = 엄마, age = 44, gender = 여]
MemberDTO [num = 5, id = user05, pwd = pass05, name = 아빠, age = 46, gender = 남]
MemberDTO [num = 6, id = user06, pwd = pass06, name = 동연이, age = 22, gender = 남]
===== 회원 관리 프로그램 =====
1. 회원 등록
2. 회원 전체 조회
9. 프로그램 종료
메뉴 선택 : 9
프로그램을 종료합니다.