• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

참조형데이터 저장에 관한 질문

18.07.06 08:28 작성 조회수 206

1

참조형데이터 저장에서 컴퓨터는 왜 각 프로퍼티의 값을 나누어서 저장하는 건가요??

{

a:@1056

}

이렇게 저장하는 것보다

{

a:1

}

이렇게 바로 저장하는게 효율적이지 않나요?

답변 2

·

답변을 작성해보세요.

5

이렇게 될 수밖에 없는 이유를 이해하기 위해서는 컴퓨터의 메모리 구조를 살펴보아야 할 필요가 있을 것 같습니다.
메모리는 0 또는 1만 저장할 수 있는 'bit'가 최소단위입니다. 이것이 8개 모이면 1byte가 되는데, 1byte로 표현할 수 있는 수는 2^8, 256개입니다. 1byte라는 저장공간에는 0부터 255 이내의 숫자만을 표현할 수 있는 거죠. 2byte이면 2^16, 4byte이면 2^32 까지의 숫자를 표현할 수 있게 될 것입니다.
byte가 커질수록 한 번에 표현 가능한 숫자 또는 문자의 범위는 넓어지지만, 그만큼 하나의 값을 표현하기 위해 필요한 메모리 영역이 늘어나게 되며, 엄청나게 큰 숫자를 반복해서 써야 하는 경우가 아닌 일반적인 상황에서는 확보해 둔 영역의 대부분이 쓸모 없이 낭비가 될 뿐이겠죠. 따라서 효율성 및 전체 메모리 용량의 한계 등을 고려하여, 표현 가능한 값의 한계를 적정한 선으로 제한할 수밖에 없게 됩니다.
또한 여러 개의 값을 하나의 메모리 영역 안에 동시에 저장할 수 있다고 하더라도 다른 문제가 있습니다. 각각의 값을 '어떻게' 구분하고, 어떤 프로퍼티에 어떤 값이 들어가 있는지를 컴퓨터가 어떻게 파악할 수 있을 것인가 하는 점입니다. 예컨대 객체 Obj를 위해 확보한 하나의 메모리공간을 8byte라고 가정해 봅시다. 이 내부에 a프로퍼티에 4byte, b프로퍼티에 4byte를 할당하도록 룰을 정한다고 하면, 이후에 c프로퍼티를 추가하면 어떻게 해야 할까요? Obj의 영역을 12byte로 늘리면 될까요? 그렇다면 c프로퍼티를 추가하기 전에 이미 Obj 바로 뒤에 다른 변수 d가 메모리를 차지하고 있었다면 어떻게 해야할까요? d를 4바이트 뒤로 밀고, Obj를 12byte로 늘리는게 나을지, Obj를 빼서 맨 뒤로 옮긴 다음 12byte로 늘리는게 나을지... 혼란스럽네요.
전자의 경우에도 불필요하게 쓰고 지우고 수정하는 작업을 거쳐야 했고, 후자의 경우에도 지우고 쓰고 수정하는 작업을 거치게 되었군요. 뿐만 아니라 후자의 경우 Obj가 저장된 메모리 위치마저 바뀌어버려, Obj를 참조하는 다른 변수들에 대해서도 주소값 수정해 주어야 할 것입니다. 사용자 입장에서 효율적인 구조가 컴퓨터 입장에선 엄청난 비효율을 야기하게 되는 셈이지요.
이렇게 하는 것보다는, 애초부터 모든 값을 각각 따로따로 구분하여 주소값을 fix하여 정해주고, 해당 변수나 프로퍼티에 값을 할당할 때에는 그 주소에 있는 메모리만 바꾸도록 하는 편이 컴퓨터 입장에서 안전하고 효율적일 것입니다.
말이 길어졌네요. 실제 메모리와 관련한 컴퓨터공학 기초이론을 학습해보신다면 좀더 잘 이해하실 수 있으리라고 봅니다. 제가 깊게 설명드릴 영역은 아닌 것 같아 이쯤에서 답변 마칠까 합니다.

0

정말 상세하고, 이해가 쏙쏙되는 답변 감사합니다. 이유를 알게 되었을때, 소름이 돋아 강의를 듣기 참 잘했다는 생각을 했습니다. 답변 정말 감사합니다.