[JAVA] 객체 배열

Gabriela·2023년 7월 25일
0

JAVA

목록 보기
12/24

‣ 객체배열과 리팩토링 활용 예제


메인 클래스

public class MainWrapper {  

  public static void ex01() {

    // 가족이 3명인 경우
    Family f = new Family(3);
   
    // 가족의 이름 3개, 나이 3개
    String[] name = {"나", "엄마", "언니"};
    int[] age = {20, 23, 30};
   
    // 디폴트 생성자 + Setter
    for(int i = 0; i < f.getFamily().length; i++) {   // f.getFamily().length == f.getFamilyCount()
     
      f.getFamily()[i] = new Person();    // 디폴트 생성자를 이용해서 배열 요소를 저장해 둔다.
     
      f.getFamily()[i].setName(name[i]);  // Setter를 이용해서 이름을 저장한다.
      f.getFamily()[i].setAge(age[i]);    // Setter를 이용해서 나이를 저장한다.
    }
   
    // 확인
    for(int i = 0; i < f.getFamily().length; i++) {
      System.out.println((i+1) + "번째 가족 이름: " + f.getFamily()[i].getName());
      System.out.println((i+1) + "번째 가족 나이: " + f.getFamily()[i].getAge());
    }
  }
  public static void ex02() {
   
    // Person이 3명인 Family 객체 생성
    Family f = new Family(3);
   
    // 가족의 이름 3개, 나이 3개
    String[] name = {"나", "엄마", "언니"};
    int[] age = {20, 23, 30};
   
    // 파라미터가 2개인 생성자
    for(int i = 0; i < f.getFamily().length; i++) {
     
      f.getFamily()[i] = new Person(name[i], age[i]);
    }
   
    // 확인
    for(int i = 0; i < f.getFamily().length; i++) {
      System.out.println((i+1) + "번째 가족 이름: " + f.getFamily()[i].getName());
      System.out.println((i+1) + "번째 가족 나이: " + f.getFamily()[i].getAge());
    }
  }
  public static void ex03() {
   
    // ex01() 리팩토링
   
    Family f = new Family(3);
   
    // 가족의 이름 3개, 나이 3개
    String[] name = {"나", "엄마", "언니"};
    int[] age = {20, 23, 30};
   
    Person[] family = f.getFamily();
    for(int i = 0; i < family.length; i++) {
      family[i] = new Person();
      family[i].setName(name[i]);
      family[i].setAge(age[i]);
    }
   
    // 향상 for문 이용
    for(Person p : family) {
      if(p != null) {   // NullPointExeption을 방지해서 보다 안전한 코드가 된다.
      System.out.println("가족 이름: " + p.getName());
      System.out.println("가족 나이: " + p.getAge());
      }
    }
  }
public static void ex04() {
   
    // ex02() 리팩토링
   
    Family f = new Family(3);
   
    // 가족의 이름 3개, 나이 3개
    String[] name = {"나", "엄마", "언니"};
    int[] age = {20, 23, 30};
   
    // 리팩토
    Person[] family = f.getFamily();
    // 파라미터가 2개인 생성자
    for(int i = 0; i < family.length; i++) {
      family[i] = new Person(name[i], age[i]);
    }
   
    // for문으로 확인
    for(int i = 0; i < family.length; i++) {
      System.out.println((i+1) + "번째 가족 이름: " + family[i].getName());
      System.out.println((i+1) + "번째 가족 나이: " + family[i].getAge());
    }
   
    // 향상 for문 NullPointExeption 방지 예시 (객체는 항상 null 값을 조심해야한다.)
    family[1] = null;
    for(Person p : family) {
      if(p != null) {
        System.out.println("가족 이름:" + p.getName());
        System.out.println("가족 나이:" + p.getAge());
      }
    }
  }

Person 클래스

public class Person {
 
  private String name;
  private int age;
 
  public Person() {
   
  }
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
 
  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;
  }
}

Family 클래스

public class Family {
 
  private int familyCount;  // 가족의 수, 배열의 길이
  private Person[] family;  // 가족 배열, 배열의 선언만 수행
 
  public Family(int familyCount) {
    this.familyCount = familyCount;
    family = new Person [familyCount];  // 배열의 생성이 수행
  }
 
  public int getFamilyCount() {
    return familyCount;
  }
  public void setFamilyCount(int familyCount) {
    this.familyCount = familyCount;
    Person[] temp = new Person[familyCount];
    System.arraycopy(family, 0, temp, 0, family.length);
    family = temp;  // 임시 배열의 주소값을 패밀리 배열에 복사
   
  }
  public Person[] getFamily() {
    return family;
  }
  public void setFamily(Person[] family) {
    this.family = family;
  }
}

🤣엄마는 23살 이지만 언니는 30살이다 포항항~🤣👍


profile
개발이 세상에서 제일 재밌어요

0개의 댓글

관련 채용 정보