객체 배열(Object Array)

Joy🌱·2022년 12월 31일
0

☕ Java

목록 보기
23/40
post-thumbnail

💁‍♀️ 객체 배열(Object Array)이란,
레퍼런스 변수에 대한 배열.
생성한 인스턴스도 배열을 이용해서 관리하면 동일한 타입의 여러 개 인스턴스를 연속 처리할 수 있어 편리함. 또한 반환값은 1개의 값만 반환할 수 있어 동일한 타입의 여러 인스턴스를 반환해야 하는 경우도 객체 배열을 이용할 수 있음
객체 배열을 생성하는 것은 객체를 다루기 위한 참조변수들을 만든 것일 뿐, 객체가 저장되어있지는 않음.
따라서 객체 배열 생성 후, 추가적으로 객체를 저장해야 함


👀 객체 배열의 할당 및 초기화

◼ Car Class

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로 달려갑니다.");
	}
}                                                                       

◼ Application Class

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를 활용한 간단한 회원 관리용 프로그램

DTO를 활용한 간단한 회원 관리용 프로그램

  • 여러 명의 회원 정보를 받아 한 번에 여러 회원 정보를 등록
  • 전체 회원 조회 시 여러 명의 회원 정보를 반환
    => 동일한 타입의 여러 개의 인스턴스를 인자로 전달하거나 리턴받는 경우에 객체 배열을 이용할 수 있음

◼ MemberDTO Class

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 + "]";
	}
}

◼ MemberInsertManager Class

public class MemberInsertManager {

	public void insert(MemberDTO[] members) {
		
		System.out.println("회원을 등록합니다.");
		
		// 향상된 for문
		for(MemberDTO member : members) { >>> members라는 회원정보의 객체 배열을 출력할 것
			System.out.println(member.getName() + "님을 회원 등록에 성공했습니다.");
		}
	}
}

◼ MemberManager Class

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

◼ MemberSelectManager Class

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, '남')
		};
	}
}

◼ Application Class

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
프로그램을 종료합니다.

profile
Tiny little habits make me

0개의 댓글

관련 채용 정보