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;
			}
		}
		
	}

}