TIL/Java
[Java] 객체배열
yndev
2022. 1. 13. 23:15
객체배열
- 레퍼런스 변수에 대한 배열
- 동일한 타입의 여러 인스턴스들을 배열로 관리할 수 있다.
- 반환값은 1개의 값만 반환할 수 있기 때문에 동일한 타입의 여러 인스턴스를 반환해야 하는 경우 객체 배열을 이용한다.
선언
클래스명[ ] 배열명;
클래스명 배열명[ ];
ex) Product[ ] pArr;
Product pArr[ ];
할당
배열명 = new 클래스명[배열크기];
ex) pArr = new Product[3];
선언과 동시에 할당
클래스명 배열명[ ] = new 클래스명[배열크기];
ex) Product pArr[ ] = new Product[3];
인덱스를 이용한 초기화
배열명[ i ] = new 클래스명( );
ex) pArr[0] = new Product("TV", 300);
선언과 동시에 할당 및 초기화
클래스 배열명[ ] = {new 클래스명( ), new 클래스명( )};
Product[] pArr = {
new Product("Tv", 300)
, new Product("스피커", 20)
, new Product("모니터", 500)
, new Product("가습기", 100)
, new Product("USB", 7)
};
객체배열 저장구조
Example arr[ ] = new Example[2];
arr[0] = new Example();
arr[1] = new Example();
- arr[index] 이 하나의 참조형 변수라고 생각한다.
상단의 개념 활용 코드
- DTO를 활용한 간단한 회원 관리용 프로그램
- 구현 기능
1. 여러 명의 회원 정보를 받아 한 번에 여러 회원 정보를 등록
2. 전체 회원 조회 시 여러 명의 회원 정보를 반환
MemberDTO 클래스 작성 (코드생략)
MemberSelectManager 클래스 (회원 정보 전체를 반환하는 메소드)
public class MemberSelectManager {
/**<pre>
* 회원 정보 전체를 반환하는 메소드
* </pre>
* @return 전체 회원 정보 객체 배열로 반환
* */
public MemberDTO[] selectAllMembers() {
return new MemberDTO[] {
new MemberDTO(1, "user01", "pass01", "김영희", 20, '여')
, new MemberDTO(2, "user02", "pass02", "홍길동", 22, '남')
, new MemberDTO(3, "user03", "pass03", "박진희", 24, '여')
, new MemberDTO(4, "user04", "pass04", "이순신", 26, '남')
, new MemberDTO(5, "user05", "pass05", "한지희", 28, '여')
};
}
}
MemberManager 클래스 (여러 명의 회원 정보를 등록)
public class MemberManager {
/**<pre>
* 여러 명의 회원 정보를 등록
* </pre>
* */
public void signUpMembers() {
/* 5명의 회원 정보를 담을 객체 배열 생성 */
MemberDTO[] members = new MemberDTO[5];
/* 5명의 회원 정보를 각 인덱스에 할당 */
members[0] = new MemberDTO(1, "user01", "pass01", "김영희", 20, '여');
members[1] = new MemberDTO(2, "user02", "pass02", "홍길동", 22, '남');
members[2] = new MemberDTO(3, "user03", "pass03", "박진희", 24, '여');
members[3] = new MemberDTO(4, "user04", "pass04", "이순신", 26, '남');
members[4] = new MemberDTO(5, "user05", "pass05", "한지희", 28, '여');
/* 회원정보를 입/출력할 용도의 MemberInsertManager 클래스 작성 */
MemberInsertManager memberInsertManager = new MemberInsertManager();
memberInsertManager.insert(members);
}
/**<pre>
* 모든 회원 목록을 조회하여 정보를 출력
* </pre>
* */
public void printAllMembers() {
/* MemberSelectManager 클래스 작성 */
/* 작성한 메소드를 호출하고 반환받은 값을 객체배열 레퍼런스 변수에 저장한다. */
MemberDTO[] selectedMembers = new MemberSelectManager().selectAllMembers();
/* 가입 되어 있는 회원 목록을 출력한다. */
System.out.println("==== 가입 된 회원 목록 ====");
for(int i = 0; i < selectedMembers.length; i++) {
System.out.println(selectedMembers[i].getInformation());
}
for(MemberDTO member : selectedMembers) {
System.out.println(member.getInformation());
}
System.out.println("==========");
System.out.println("총 " + selectedMembers.length + "명의 회원이 가입되어 있습니다.");
}
}
MemberInsertManager 클래스 (여러 명의 회원 정보를 한 번에 등록할 수 있는 기능 제공)
public class MemberInsertManager {
/**
* <pre>
* 여러 명의 회원 정보를 한 번에 등록할 수 있는 기능 제공
* </pre>
* @param members 회원 정보를 객체 배열 형태로 전달
* */
public void insert(MemberDTO[] members) {
System.out.println("회원을 등록합니다.");
/* 일반 for문*/
for(int i = 0; i < members.length; i++) {
System.out.println(members[i].getName() + "님을 회원 등록에 성공했습니다.");
}
System.out.println();
/* 향상된 for문 */
for(MemberDTO member : members) {
System.out.println(member.getName() + "님을 회원 등록에 성공했습니다.");
}
System.out.println("총 " + members.length + "명의 회원 등록에 성공했습니다.");
}
}
Application 클래스
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;
}
}
}
}