안녕하세요!
오늘은 어플 개발하는 중에 계속 ArrayList를 for문으로 반복하는 와중에서
마지막 객체가 전체리스트를 덮는 현상이 일어나더라고요.
그래서 처음에는 주소값이 달라서 그런걸까 하고 4시간 정도 헤맨결과
알게되었습니다.
제가 만든 클래스에서 변수의 이름이 static이였다는 것이였습니다.
그렇습니다.
자바에서 static변수란 여러 주소값으로 주어져도 변수의 값은 변하지 않습니다.
일반 변수와 static 변수가 두개가 선언 되어있다고 가정하였을때
클래스를 한번 살펴보겠습니다.
public class 클래스 { private 변수 변수이름1; private static 변수 변수이름2;
public 변수 get클래스1(){ return 변수이름1;}
public 변수 get클래스2(){ return 변수이름2;} |
이제 메인 클레스로 가서 내용을 보겠습니다.
클래스 클래스이름1 = new 클래스 클래스 클래스이름2 = new 클래스 클래스 클래스이름3 = new 클래스
클래스이름1.set클래스1(변수 A); 클래스이름1.set클래스2(변수 B);
클래스이름2.set클래스1(변수 C); 클래스이름2.set클래스2(변수 D);
클래스이름3.set클래스1(변수 E); 클래스이름3.set클래스2(변수 F); |
이렇게 되어있다고 할 때 결과는
클래스이름1.get클래스1 == A 클래스이름1.get클래스2 == F
클래스이름2.get클래스1 == C 클래스이름2.get클래스2 == F
클래스이름3.get클래스1 == E 클래스이름3.get클래스2 == F |
이렇게 나오는 이유는 static이라는 키워드가 걸린 변수에서 어떠한값이 메모리에 씌워질시
프로그램이 종료될때까지 메모리의 값이 유지된다는 특성이 있기때문입니다.
그렇기때문에 새롭게 주소를 변경하더라도 변수에 이미 씌워져있기때문에
마지막으로 쓰여진 값이 나타나게됩니다.
클래스에서 변수의 값을 공유하고 싶을때 쓰면 좋겠죠?
이것때문에 죄없는 코드만 여러번 바꿔봤네요.
다음에도 알찬 정보를 가져오겠습니다. 감사합니다.
혹시 궁금하신점있으시다면,
댓글 남겨주세요.
'코딩' 카테고리의 다른 글
순서도 기호(Flowchart shape)와 설명 (0) | 2021.06.04 |
---|