728x90
반응형
객체
=> 상태와 행위가 존재함
(개체(entity)와 개체들에 관련된 연산을 제공하는 메서드들의 모음을 나타냄)
원시 타입(primitive type)을 제외하면 자바 언어의 다른 모든 변수들은 참조 타입이다.
객체는 참조 타입
이다. 라는 말은 정확히 무엇을 의미하는 것일까?
원시 타입은 int i = 42로 변수가 선언되었을 때, 42라는 값이 메모리에 할당된다.
그러면 프로그램은 나중에 int j = i 라는 형식으로 i에 의해 표현되는 값이 j에 할당되었을 때 메모리의 다른 위치에 같은 값을 할당한다.(일단 할당하고 나면 i는 j의 값에 영향을 미칠 수 없다.)
그렇다면 객체 타입은 어떻게 동작할까
자바에서 new ArrayList(20)같은 구문은 데이터를 저장하는데 필요한 영역을 메모리에 요구한다.
List myList = new ArrayList(20)구문으로 생성된 객체를 변수에 할당할 때 myList는 할당된 메모리 위치를 가리킨다.
만약 동일한 속성으로 생성된 객체에 myList를 할당하면 (List yourList = myList) yourList는 같은 메모리 위치만 가리킬뿐 값을 메모리의 다른 위치에 할당하지 않는다.
즉, 한 인스턴스에 변경이 생기면 다른 인스턴스가 접근했을 때 영향을 미치게 된다는 뜻이다.
원시 타입
=> 값 복사참조 타입(객체)
=> 메모리 위치 복사
@Test
public void objectMemoryAssignment(){
List<String> list1 = new ArrayList<>(20);
list1.add("entry in list1");
assertTrue(list1.size() == 1);
List list2 = list1;
list2.add("entry in list2");
assertTrue(list1.size() == 2);
}
728x90
반응형
'그 외 ... (정리해야함) > 질문과 답변' 카테고리의 다른 글
메서드와 변수에 사용되는 static 키워드의 역할은 무엇인가? (0) | 2019.05.02 |
---|---|
final 키워드는 객체 참조에 어떤 영향을 미치는가? (0) | 2019.05.02 |
Queue 와 Deque는 무엇인가? (0) | 2019.05.02 |
배열과 리스트의 관계를 알아보자. (0) | 2019.05.02 |
이진 검색(binary search)은 어떻게 구현하는가? (0) | 2019.05.02 |