상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - 루아에서 `table.copy`는 어떻게 구현하나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
루아에서 `table.copy` 함수를 <a href='https://sangseek.com/sangseeks/구현/ko'>구현</a>하는 것은 테이블의 깊은 복사(deep copy) 또는 얕은 복사(shallow copy)를 수행하는 방법을 이해하는 데 도움이 됩니다. 기본적으로, 루아의 테이블은 참조 타입이기 때문에, 단순히 테이블을 할당하면 원본 테이블의 참조만 복사됩니다. 따라서 원본 테이블을 수정하면 복사된 테이블에도 영향을 미치게 됩니다. 이를 방지하기 위해서는 테이블의 내용을 복사해야 합니다. 아래는 루아에서 `table.copy` 함수를 구현하는 방법에 대한 예시입니다. 이 예시는 얕은 복사와 깊은 복사를 모두 지원하는 방법을 보여줍니다. 얕은 복사 (Shallow Copy) 얕은 복사는 테이블의 최상위 레벨의 키와 값을 복사합니다. 즉, 중첩된 테이블은 복사되지 않고 원본 테이블의 참조가 유지됩니다. ```lua function table.copy(source) local copy = {} for k, v in pairs(source) do copy[k] = v end return copy end ``` 깊은 복사 (Deep Copy) 깊은 복사는 테이블의 모든 레벨을 재귀적으로 복사합니다. 이 방법은 중첩된 테이블도 새로운 테이블로 복사하여 원본 테이블과의 참조를 끊습니다. ```lua function table.deepCopy(source) if type(source) ~= "table" then return source -- 테이블이 아닌 경우 그대로 반환 end local copy = {} for k, v in pairs(source) do copy[table.deepCopy(k)] = table.deepCopy(v) -- 키와 값을 재귀적으로 복사 end return copy end ``` 사용 예시 이제 위에서 정의한 `table.copy`와 `table.deepCopy` 함수를 사용하여 테이블을 복사해 보겠습니다. ```lua local original = { a = 1, b = { x = 10, y = 20 }, c = 3 } local shallowCopy = table.copy(original) local deepCopy = table.deepCopy(original) -- 원본 테이블 수정 original.b.x = 100 print(original.b.x) -- 100 print(shallowCopy.b.x) -- 100 (얕은 복사이므로 원본과 참조 공유) print(deepCopy.b.x) -- 10 (깊은 복사이므로 독립적) ``` 주의사항 1. 순환 참조 : 깊은 복사를 구현할 때, 순환 참조가 있는 테이블을 복사하려고 하면 무한 루프에 빠질 수 있습니다. 이를 방지하기 위해, 이미 복사된 테이블을 추적하는 방법을 사용할 수 있습니다. 2. 메타테이블 : 메타테이블이 있는 테이블을 복사할 때, 메타테이블도 복사해야 할 필요가 있습니다. 이 경우, 메타테이블을 따로 처리하는 로직을 추가해야 합니다. 3. 성능 : 깊은 복사는 성능에 영향을 미칠 수 있습니다. 복사할 테이블의 크기와 깊이에 따라 성능이 저하될 수 있으므로, 필요한 경우에만 깊은 복사를 사용하는 것이 좋습니다. 이와 같이 루아에서 테이블을 복사하는 방법을 이해하고 구현하면, 다양한 상황에서 유용하게 활용할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기