[Java] 객체 배열

2024. 11. 13. 22:26·Java/OOP

 

 

Tv 클래스를 만들었다 치자.

 

        Tv t1 = new Tv();
        t1.modelCode = "57R-V";
        t1.price = 890_000;
        t1.userScore = 3.8;

        Tv t2 = new Tv();
        t2.modelCode = "99SO-8";
        t2.price = 1_890_000;
        t2.userScore = 5.0;

 

 

t1, t2 둘 다 같은 클래스 Tv 클래스를 사용했지만, 객체는 다르다. 

 

Tv지만 Tv의 종류는 다양한 것처럼 코드에서도 t1과 t2는 다른 객체이다.

 

 

 

 

만약 t1이 참조하는 인스턴스의 모든 멤버 변수와 t2의 모든 멤버 변수를 출력해야 한다면 어떻게 할까?

 

 

Tv t1 = new Tv();
t1.modelCode = "57R-V";
t1.price = 890_000;
t1.userScore = 3.8d;

Tv t2 = new Tv();
t2.modelCode = "99SO-8";
t2.price = 1_890_000;
t2.userScore = 5.0d;

System.out.println("모델 명: "+t1.modelCode+" 가격: "+t1.price+" 사용자 별점: "+t1.userScore);
System.out.println("모델 명: "+t2.modelCode+" 가격: "+t2.price+" 사용자 별점: "+t2.userScore);

 

 

출력 부분 코드가 읽기 힘들다 만약 참조 변수가 더 많아지면 관리하기 힘들어질 거다.

 

 

이 문제를 해결하기 위해 객체에 배열을 도입시켰다.

 

Tv클래스도 결국에는 여러 개의 데이터가 묶인 하나의 데이터이므로 배열을 사용할 수 있다. 

 

 

 

 


 

 

Tv[] tv = new Tv[2];

 

Tv 타입의 변수를 보관할 수 있는 Tv 배열을 만들었다, 배열을 선언하는 것처럼 배열의 크기도 지정해 선언할 수 있다.

 

tv 배열은 Tv 인스턴스의 참조값(객체주소)을 2개 보관할 수 있다.

 

 

Java에서 중요한 것은 값을 대입할 때 (= 연산할 때) 값을 복사해서 대입하는 것이다.

다시 말해 Tv t = new Tv()에서 t는 인스턴스 자체를 가지는 게 아니라 참조값(객체 주소)을 복사한 값을 지니고 있다.

 

 

배열을 선언하면 배열의 주소가 존재하는 것처럼 객체 배열도 배열에 대한 주소가 존재한다. 

저 위 tv 객체 배열은 배열에 대한 주소만 가지고 있고 그 배열 안에 참조값을 지닐 수 있는 참조변수 2개를 선언할 수 있다.

 

 

 

 

        Tv[] tv = new Tv[2];
        tv[0] = new Tv();
        tv[1] = new Tv();

 

이 코드야 말로 객체 배열을 완전히 완성시킨 거다.

Tv 데이터(참조값)를 담을 수 있는 배열을 선언하고 배열 index마다 다른 인스턴스를 생성시켰다.

 

위 코드를 그림으로 표현해 보겠다.

 

 

 

 

 

tv[0].price = 1_500_000;

 

코드를 단계별로 분석하면

1. Tv[0] => 배열 주소(0X001) 즉, 0X001[0].price = 1_5000_000;

2. 0X001[0] = 0X00 참조값을 참조하고 있음 0X00.price = 1_500_000;

3. 0X00 인스턴스의 price 멤버 변수에 값 대입

 

 

 

 


 

 

객체 배열을 사용하여 리펙토링

 

        for(int i=0; i<tv.length; i++){
            System.out.println("모델코드: "+tv[i].modelCode+" 가격: "+tv[i].price+" 사용자 별점: "+tv[i].userScore);
        }

        /*case2*/
        for (int i=0; i<tv.length; i++){
            Tv t = tv[i];
            System.out.println("모델코드: "+t.modelCode+" 가격: "+t.price+" 사용자 별점: "+t.userScore);
        }

        /*case3*/
        for(Tv t : tv){
            System.out.println("모델코드: "+t.modelCode+" 가격: "+t.price+" 사용자 별점: "+t.userScore);
        }

 

 

 

 

 

 

 

'Java > OOP' 카테고리의 다른 글

절차 지향 프로그래밍VS객체 지향 프로그래밍  (1) 2024.11.20
[Java] Argument로 참조값을 보내면?  (0) 2024.11.16
[Java] 기본형vs참조형  (4) 2024.11.15
[Java] 객체 사용 방법 (OOP)  (0) 2024.11.11
[Java] 객체와 class_OOP  (2) 2024.11.10
'Java/OOP' 카테고리의 다른 글
  • [Java] Argument로 참조값을 보내면?
  • [Java] 기본형vs참조형
  • [Java] 객체 사용 방법 (OOP)
  • [Java] 객체와 class_OOP
oneH
oneH
  • oneH
    Hello WeonHyeok!
    oneH
  • 전체
    오늘
    어제
    • 분류 전체보기 (50)
      • CSS (1)
      • Javascript (5)
        • JS자료구조,알고리즘 (1)
      • Java (22)
        • OOP (9)
      • JSP (1)
      • Computer Network (2)
      • 이론 컴퓨터 (2)
      • Project (0)
      • Algorithm&Data Structure (11)
      • 데이터베이스 (3)
      • Spring,SpringBoot (1)
      • Git & GitHub (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    object
    선형 큐
    Java
    컴퓨터네트워크
    복사
    덱
    선택자
    이진검색
    큐
    폰노이만 아키텍쳐
    OOP
    프로토콜
    math
    Algorithm
    JS
    Git
    MySQL
    컴퓨터구조
    컴퓨터 네트워크
    SQL
    자바
    티스토리챌린지
    Stack
    OSI7계층
    Selector
    combinators
    오블완
    스택
    컴파일
    JavaScript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
oneH
[Java] 객체 배열
상단으로

티스토리툴바