Java

자바 - 객체참조

becky(지은) 2023. 8. 27. 23:19




객체참조

 

    //참조형
    //c2 = c1 ;  c2가 c1의 풍선(값)을 가리킨다. c1과 값을 공유한다

        System.out.println("____________");
        Camera c1 = new Camera();
        Camera c2 = new Camera();
        c1.name = "카메라1";
        c2.name = "카메라2";
        System.out.println(c1.name);
        System.out.println(c2.name);
        
        c2 = c1;  //c2가 c1의 값을 grab!!! c2와 c1이 값을 공유
        System.out.println(c1.name);
        System.out.println(c2.name);
        
        c2.name = "고장난 카메라"; //c2만 바뀌어도 c1 값이 바뀜. 왜냐? 값을 공유하니까!
        System.out.println(c1.name);
        System.out.println(c2.name);
        System.out.println("____________");
        changeCamera(c2);
        System.out.println(c1.name);
        System.out.println(c2.name);
        System.out.println();
        
        c2 = null; // 풍선 손 놓기!
//        System.out.println(c2.name); // NullPointerException 오류 뜨면서 출력 불가


        public static void changeCamera(Camera camera){
             camera.name = "잘못된 카메라";
            }


//카메라1
//카메라2
//카메라1
//카메라1
//고장난 카메라
//고장난 카메라




c1과 c1가 같은 풍선(값)을 잡고 있다
= c1과 c2가 같은 값을 공유하고 있다

결국 c1과 c2는 같은 객체를 참조하므로 하나의 객체의 속성을 변경하면 다른 객체의 속성도 변경되는 것을 확인할 수 있습니다. 
이는 객체 참조의 특징으로 인한 결과입니다.



        // 4종류의 베이비 객체를 만든다
        Baby superBaby = new Baby();
        Baby pyschoBaby = new Baby();
        Baby attentionBaby = new Baby();
        Baby adhdBaby = new Baby();

        // 부모 객체를 만든다
        Parent parent = new Parent(); // 기본 부모
        Parent superBabyParent = new Parent(superBaby); // 슈퍼베이비 Lv0 부모
        ElementaryParent elementaryParent = new ElementaryParent(superBaby); // 슈퍼베이비 Lv1 초딩부모
        MiddleParent middleParent = new MiddleParent(superBaby); // 슈퍼베이비 Lv2 중딩 부모
        UniversityParent universityParent = new UniversityParent(superBaby); // 슈퍼베이비 Lv3 대딩 부모


                            superBaby.levelUp(superBaby);
                            //레벨별로 기능을 나눔
                            if(superBaby.getLevel() == 1){
//주의!                                superBabyParent = elementaryParent;
//                                superBabyParent 에 존재하지 않지만, elementaryParent에 는 존재한 속성 이 있어, 그 속성이 새로 superBabyParent에 생겨나는 건 아니지? 이미 기존에 존재하는 속성에 대한 값만 elementaryParent;로 대체됨


                            } else if (superBaby.getLevel() == 2) {

                            } else if (superBaby.getLevel() ==3) {

                            }
                            superBaby.printBabyTotalScore();//아이의 점수를 불러온다
                            superBabyParent.showUserProfile(); //유저의 상태(돈,시간)를 보여준다
                            superBabyParent.keepDoing();
                            userStayPick = scan.nextInt(); //계속 살거냐고 질문함
                        }