본문 바로가기

개발일지

항해99 3일차 개발일지

팀에서 매일 개발일지를 쓰라고 했는데... 

제출하는게 아직은 의무가 아니다 보니, 스스로 우선순위에서 뒤로 두는 것 같다. 일단 개발일지이고, 생각보다 빠른, 3일차를 마주하게 된 오늘이다. 하루 적게는 10시간 많게는 16시간 컴퓨터 앞에 앉아서 코딩을 연습하다 보니, 체력은 어찌 버티긴 하지만(재수생이던 시절에도 이렇게 1년을 보냈는데, 지금이라고 못할리 없지 않은가..), 정신적으로 생각보다 피폐해지는 느낌이 드는 건 어쩔 수 없는 듯 하다.

 

앞서 사전 학습기간에 미리 강의를 들어놓아서 그런 지, 정식으로 항해99가 시작한 이후로는 복습하는 시간을 가지게 되었다. 그런데 말만 복습이지, 내용이 진행될 수록 난이도가 (개인적으로 보기에) 쑤욱 올라가는 느낌이라, 강의를 다시 듣지 않으면 머리에 들어가지 않을 정도라고 나는 느낀다. 그래도, 이렇게 개발일지를 쓰면 조금이라도 스스로 보템이 되지 않을까 싶은 마음 (반 정도는 강제라는 느낌 과 함께) 어제 저녁과 금일에 배운 것을 중심으로 내용을 적고자 한다.

 

 

3주차, 데이터 타입과 종류.

일단 이 부분은 이론적으로 암기할 수는 있어도, 막상 왜 이렇게 데이터가 분리가 되는 지, 실제 코딩에서 어떻게 적용해야 할 지는 깊게 알아보지 않아서 머릿속에 쏙 박히지는 않는다. 컴퓨터에 들어가는 데이터를 두 가지로 나눈다면 '기본형 데이터' 그리고 '참조형 데이터'로 나눌 수 있는데, 일단 내 머릿속에는 간단하게 이렇게 분리를 했다.

 

기본형 var a = "1"
참조형 var b = {c: 10, d: 20}

 

참조형 데이터는 일종의 집합처럼 그러니까 우측의 value(값)을 여러 개를 가진다.

재미있는 점은, 얘들이 컴퓨터에 메모리로 저장이 될 때는, "=" 사이의 모든 값이 한 곳에 저장되지 않고, 좌측인 변수명을 저장하는 칸과, 우측의 변수를 저장하는 칸이 따로 할당된다는 것이다. 대신, 변수명을 저장한 칸에 변수를 저장한 칸의 '주소값'을 할당하여 컴퓨터에서 알아볼 수 있게 한다는데.. 이정도로 배웠지, 실제 어떻게 작동하는 지 그 메커니즘을 알아보는 그 깊은 곳 까지는 가보지 않았다.

 

위에서 말하는 거는 기본형을 설명하는 거고.. 참조형은 이 보다 더 복잡하게 메모리에 저장을 한다.

  변수 명 저장 공간 별도 할당 공간 변수 값 저장 공간
참조형 데이터 구조 var b <c, d의 주소> c <10의 주소> 10
d <20의 주소> 20

 

이렇게 '별도 할당 공간'이 생기는 데, 튜터님이 설명하시길.. 이런 방식에서는 데이터를 '복사' 하는데 주요 문제가 발생한다. 일단 데이터를 '복사'하는 것 자체는 문제가 아니다. 이게, 말로 설명하기는 좀 복잡한데, 새롭게 복사를 하더라도 그 값이 같으면, var c(복사된 데이터의 변수 명)은 똑같은 c,d의 주소를 가지고, 별도 할당 공간의 c, d또한 동일한 10, 20의 주소를 가진다.

그런 데 var c의 어느 값을 수정할 경우, '주소'또한 바뀌게 되면서... 오리지널 데이터도 바뀌게 된다.

 

아무튼, 이러한 문제점을 해결 하기 위해서는 '얕은 복사' 혹은 '깊은 복사'라는 두 가지 메서드를 이용해서 데이터를 '직접, 일일이'복사하는 방식을 이용하는데 코드를 대략 요약하자면 다음과 같다:

 

 

var copyObject = function (원본 데이터){

       var 복사될 데이터 = {}

       

       for( var 속성 in 원본 데이터){

              복사될 데이터[속성] = 원본 데이터[속성];

       }

       return 복사될 데이터;

};

 

 

일단 for ~ in 구문을 통해 원본 데이터 속 속성을 하나하나 살펴본다고 한다. 문제는 다음인데, 솔직히 나도 정확히 어떻게 돌아가는지 이해는 아직 못했다. 보통 데이터[속성]이렇게 해서 해당 속성을 불러올 수 있다는 것은 이해하므로, 원본 데이터[속성]은 원본 데이터의 모든 속성을 쓰윽 훑어보는 건 이해를 하지만, 아직 복사될 데이터가 [] 인 빈 상태에서, 저렇게 적어놓은 것이 속성까지 만들게 해주는 건지... 

 

이후 복사된 데이터를 return하여 함수 바깥으로 꺼내주면 된다. 위의 것은 '얕은 복사'이고 '깊은 복사'는 여기서 더 복잡해진다.

 

 

머리 아프다.. 일단 오늘 개발일지는 여기까지로..

 

 

 

<혹시나 제 블로그에 오신 코딩에 모르시는 분들이라면, 이 내용을 이해 못하는 건 당연할 수 밖에 없다고 생각합니다. 아무래도 개발일지로 쓰는 글 이다 보니.. 무엇보다 저 또한 이 개념을 이해하는데 머리가 아팠네요.>

 

'개발일지' 카테고리의 다른 글

항해99 5주차 개발일지  (1) 2024.01.07
항해99 4주차 개발일지  (1) 2024.01.01
항해99 3주차 개발일지  (0) 2023.12.24
항해99 2주차 개발일지  (1) 2023.12.17
항해 99 첫 개발일지  (1) 2023.12.10