[Java] 객체 배열

Yeon·2023년 11월 8일

study

목록 보기
5/11

객체 배열

객체 배열

객체를 저장하는 배열로 배열의 자료형을 클래스명으로 지정하여 활용. 초기값은 null이며 객체가 생성되면 주소를 저장.

객체 배열 선언과 할당

  • 선언 Member[] mArray; // 클래스명[] 배열명;
  • 할당 mArray = new Member[10] // 배열명 = new 클래스명[배열크기]
  • 선언과 동시에 할당 Member[] mArray = new Member[10]; // 클래스명[] 배열명 = new 클래스명[배열크기]

객체 배열 초기화

  • 인덱스를 이용한 초기화 mArray[0] = new Member(”abc123”, “홍길동”, 28); 배열명[인덱스] = new 클래스명();
  • 선언과 동시에 할당 및 초기화
    MemberVO[] mArray3 = {
    				new MemberVO("abc123","홍길동", 23),
    				new MemberVO("def456","최길동", 24),
    				new MemberVO("ghi","박길동", 25),
    };
    // 클래스명[] 배열명 = {new 클래스명(), new 클래스명()};
    mArray[index]가 하나의 참조형 변수로 여겨진다.

배열 빈 공간은 생길 수 있으므로 항상 null 체크를 진행하고 해당 영역에 접근해야 한다.

if(mArray3[0] != null) {
			System.out.println(mArray3[0].getName());
}

객체 배열 사용
객체 배열을 연습하기 위해 회원을 등록하고 관리하는 프로그램을 작성해 보았다. 회원등록, 탈퇴, 정보 검색, 정보 수정 등이 가능한 프로그램이다.

public class Run {
	public static void main(String[] args) {
		MemberMenu mm = new MemberMenu();
		mm.mainMenu();
	}
}

실행 클래스 Run에서 MemberMenu 클래스의 객체를 생성해 mainMenu() 메소드를 실행하면 메뉴 화면이 나타난다.

	public void mainMenu() {
		System.out.println("최대 등록 가능한 회원 수는 " + mc.MAX_SIZE + "명입니다.");
		System.out.println("현재 등록된 회원 수는 " + mc.existMemberNum() +"명입니다");
		
		if(mc.existMemberNum() != 10) {
			System.out.println("1. 회원 등록");
		} else {
			System.out.println("1. 회원등록 (현재 인원 10명으로 회원가입 불가)");
		}
		System.out.println("2. 회원 검색");
		System.out.println("3. 회원 정보 수정");
		System.out.println("4. 회원 삭제");
		System.out.println("5. 모두 출력");
		System.out.println("9. 끝내기");
		
		int num = 0;
		
		while(true) { // 1번을 선택했는데 현재 등록된 회원수가 10이라면
        			  // 1번이 아닌 메뉴를 선택할 때까지 메뉴 번호 입력 문이 출력됨.
			System.out.print("메뉴 번호 : ");
			num = Integer.parseInt(sc.nextLine());
			
			if(num != 1) {
				break;
			} else {
				if(mc.existMemberNum() != 10) {
					break;
				}
			}
		}
		
		switch(num) {
			case 1: insertMember(); break;
			case 2: searchMember(); break;
			case 3: updateMember(); break;
			case 4: deleteMember(); break;
			case 5: printAll(); break;
			case 9: System.out.println("프로그램을 종료합니다."); return;
			default: System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
		}
		
		System.out.println();
		mainMenu();
		
	}

위와 같이 MemberController 클래스의 멤버 변수와 메소드에 접근해 최대 회원 등록 가능 수와 현재 등록된 회원의 수 정보를 받아와서 그에 따라 케이스별로 프로그램이 진행되게 작성하였다.

그 후, 케이스별로 나눠진 메소드를 하나씩 작성했는데 insertMember 메소드 즉, 회원 등록 메소드를 구현하던 중 에러를 만났다.

String id;
while(true) { // 중복된 아이디를 입력하지 않을 때 까지 무한 루프
	System.out.print("아이디 : ");
	id = sc.nextLine();
	if(mc.checkId(id) == false) {
		System.out.println("중복된 아이디입니다. 다시 입력해주세요.");
	} else {
		break;
    }
}
		

입력받은 아이디의 중복 검사 메소드인 checkId()에서 에러가 난 것이다.

에러 메시지를 살펴보고 객체 m이 null 값이어서 정보에 접근할 수 없다는 것을 알게 되었다.

public Boolean checkId(String inputId) {
	for (Member m : mArray) {
		if (m.getId().equals(inputId)) {
				return false;
			}
		}
		return true;
	}
}

작성한 코드를 살펴보니 m.getId().equals(inputId)에서 에러가 났다는 것을 알 수 있었다. 그래서 null체크 하는 문장을 추가해 오류를 수정했다.

if (m != null && m.getId().equals(inputId)) { 
	return false;
}


다음 단계로 잘 넘어가는 것을 확인했다.

이번엔 회원의 정보들을 모두 받고 mc.insertMember(회원 정보...) 즉, MemberController의 회원 등록 메소드에 입력 받은 정보를 전달한다. 그리고 전달 받은 정보를 통해 Member 객체를 만들어 내고 회원 배열에 추가하는 코드를 작성했다. 하지만,

현재 등록된 회원 수가 0인 것으로 보아 메소드가 제대로 실행되지 않은 것을 알 수 있었다. 에러 메시지도 뜨지 않아 고민하다 작성한 코드를 다시 살펴봤는데

public void insertMember(String id, String name, String password, 
							String email, char gender, int age) {
	for (Member m : mArray) {
		if (m == null) {
			m = new Member(id, name, password, email, gender, age);
			break;
		}
	}
}

현재 for each 문으로 작성된 것이 문제인지 테스트 해봐야겠다는 생각이 들었다.

public void insertMember(String id, String name, String password, 
							String email, char gender, int age) {
	for (int i = 0; i < mArray.length; i++) {
		if (mArray[i] == null) {
			mArray[i] = new Member(id, name, password, email, gender, age);
			break;
		}
	}
}

for each 문을 for문으로 변경하고 index를 통해 배열에 접근해서 배열의 요소가 null이라면 입력 받은 값으로 Member 객체를 생성하고 요소 값으로 대입해주도록 하였다.

그 결과 회원 등록 메소드가 성공적으로 수행되고 1명으로 늘어난 것을 확인했다.
이를 통해 for each 문이 아니라 for 문을 사용해야 객체를 배열에 채워 넣을 수 있다는 것을 알게 되었다.

profile
웹 개발자

0개의 댓글