인프런 커뮤니티 질문&답변

흰머리오목눈이님의 프로필 이미지
흰머리오목눈이

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

참조 (Reference)

강사님, 질문 하나 더 드립니다!

해결된 질문

작성

·

223

0

 

참조 강의 마지막 영상에 기존에 있던 참조를 끊어버리는 코드를 보여주셨는데요. null 할당 후, 다시 객체의 인스턴스 변수에 값을 입력해주려면 어떻게 해야하나요?

다시 객체 생성부터 해서 진행하면 되는 것인지? 궁금해서 여쭤봅니다.

 

cam1 = null;
cam2 = null;

cam1.name = "길동이";
cam2.name = "똥개";

System.out.println(cam1.name);
System.out.println(cam2.name);

이런식으로 코드를 작성해보니,

NullPointerException

이 에러가 발생해서, 어떻게 해야할지 궁금해 여쭤봅니다!

답변 1

3

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?
아주 복잡하고 사람이 많은 곳에서 어린 아이의 손을 잡고 있는 것이라 생각하시면 되겠습니다. cam1 과 cam2 에 null 을 대입하는 것은 손을 놓는 것이죠. 수많은 인파 속에서 잡고 있던 손을 놓게 되면 금방 아이를 잃어버리게 될 겁니다.
그러면 어떻게 해야 할까요? 급히 어딘가 전화를 하거나 물건을 사기 위해 지갑을 꺼내는 등 두 손이 모두 필요한 경우가 발생한다면 잠깐 옆에 있는 사람에게 아이의 손을 잡아달라고 합니다. 그러면 아이는 내 손은 놓겠지만 옆에 있는 사람의 손을 잡고 있게 되는 거죠. 그런 다음 볼 일을 마치고 다시 옆에 있는 사람과 잡고 있는 아이의 손을 내가 잡으면 될 것입니다. 물론 실제 상황에서는 모르는 사람에게 함부로 아이를 부탁하는 것은 위험할 수 있겠죠 😅
이렇게 하기 위해서 작성하신 코드를 아래와 같이 바꾸어 보았습니다. tempCam1 과 tempCam2 가 각각 옆에 있는 사람들이라고 생각하시면 돼요. 잠시 아이의 손을 잡고 있어달라고 부탁한 뒤에 다시 이들이 잡고 있는 아이의 손을 내가 잡는 것입니다. 이렇게 코드를 바꾸게 되면 NullPointerException 문제 없이 정상적으로 동작하게 됩니다.

public class Main {
    public static void main(String[] args) {
        Camera cam1 = new Camera();
        Camera cam2 = new Camera();

        Camera tempCam1 = cam1; // 옆에 있는 사람 1
        Camera tempCam2 = cam2; // 옆에 있는 사람 2

        cam1 = null;
        cam2 = null;

        // 볼 일 보는 중

        cam1 = tempCam1; // 옆에 있는 사람 1 로부터 손을 가져옴
        cam2 = tempCam2; // 옆에 있는 사람 2 로부터 손을 가져옴

        cam1.name = "길동이";
        cam2.name = "똥개";

        System.out.println(cam1.name);
        System.out.println(cam2.name);
    }
}

이해에 도움되셨길 바라겠습니다 😊
감사합니다.

참조에 대한 내용은 이해했습니다! 친절한 설명 감사드립니다! 😁

흰머리오목눈이님의 프로필 이미지
흰머리오목눈이

작성한 질문수

질문하기