Javascript/Jquery

$.extend() 를 이용한 배열안에 있는 객체 깊은복사

미스터황탄 2015. 12. 14. 18:50

Node 를 이용한 개발환경에서 서버 사이드단에  데이터를 가져오다 보면 배열 복사를 해야할때가 빈번하다.

간단한 예제로 배열 복사에 대해서 이야기 하고자 한다.

arr2 =arr1 을 통해 얕은 복사가 이루어지게 되고 arr2 는 arr1 을 참조 하게된다.

이경우 arr2 에 있는 객체가 arr1 에 있는 객체를 참조하고있기때문에 다음과 같이 

arr2 객체의 value 값을 바꾸게 되면  arr1 도 따라서 같이 바뀌는것을 확인해볼수있다.

arr2 과 arr1 에 참조가 발생되게 하지않으려면 다음과 같이 push를 이용하는 방법이 있다.

 

이렇게 구현하는것은 Array 안에 들어있는것이 바로 객체이기 때문이다.

객체는 참조가된다. 그래서 새로 객체명을 정의하고 그안에 벨류값을 꺼내와서 넣었다.

If 를 하지않으면 총 9번이 돌아서 9개의 객체가 생성되기때문에 if 를 걸어줘야한다.

보다 좋은 방법이 있을까? 있다.! Jquery 에 extend 를 활용하면된다.

 

훨신 간결하지않은가 ?

 파리미터는 타겟이 없으므로 {} 하였고 , 기준이될 배열 객체 , 복사될곳에 배열 객체 을 파라미터에 넣어서 구현해줬다.

extend 는 첫번째 파라미터를 생략할수있는데. 깊은복사인지 얕은 복사인지를 설정할수있다.

깊은복사가 기본값이기때문에 생략해서 파라미터를 3개 사용하였다.

깊은복사와 얕은 복사에 대한 내용은   http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=18&MAEULNO=8&no=1289&page=29 

잘나와 있으니 참고하시길 바란다.

내가 생각하기에 진정한 문제에 대한 고민은 1차적인 해결책을 찾고난 뒤 부터 라고 생각한다.

이렇게 하는것이 현상황에서 최선인가? 이게 최선이라면 나온 해결책으로 문제를 해결하고 더이상 고민하지 않는다.

하지만 현상황에서 이것이 최선이 아니다라면, 더 효율적인 방법을 고려해 봐야한다.

책을 통해서 그리고 사람을 통해서 말이다.

기술은 공유되어야 비로서 가치가 있다고 믿고있고 이를 실천하고자 노력한다. 내주변엔 적어도 이런 사람들로 가득차길 소망한다.

오늘도 고민해본다.. 이것이 최선인가 ?!?