강사님, 질문 하나 더 드립니다!
참조 강의 마지막 영상에 기존에 있던 참조를 끊어버리는 코드를 보여주셨는데요. 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);
}
}이해에 도움되셨길 바라겠습니다 😊
감사합니다.
자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?
0
136
2
static이 뭐였는지 기억이 안나요 ㅜㅜ
0
112
2
Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의
0
70
1
사고력 키우는 법이 어떤게 있나요?
0
92
2
getter setter
0
101
2
섹션9. 66 메소드 오버로딩 시 질문이 있습니다.
0
78
1
안녕하세요 갑자기 프로그램 에러가 떠서 안되네요
0
75
2
변수 이름짓는법
0
114
2
intelli J 실행오류
0
114
2
혹시 이건 수학적 사고가 부족한 걸까요?
0
152
2
영상이 재생이 안됩니다.
0
167
3
이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.
0
115
2
응용이 어렵습니다.
0
203
2
IntelliJ가 보이지 않습니다.
0
182
3
JDK 버전 문의
0
128
2
BlackBox 파일 내에서 메소드 정의
0
136
1
동기화
0
120
2
Iterator 문의
0
104
1
코드 순서 문의
0
139
1
클래스 메소드
0
149
2
Quiz_05 관련 질문드립니다 !
0
117
2
다운로드가 안됩니다
0
165
2
다형성
0
119
2
HashMap
0
80
2





