Notice
Recent Posts
Recent Comments
Link
반응형
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- C#
- 오블완
- 디지털트윈
- list clear
- dropdown
- Unity
- 최소신장트리 mst
- 유니티 sparkmain(clone)
- 드롭다운
- Simulation
- 트리구조
- navisworks api
- removeAll
- sparkmain(clone)
- 습관형성 #직장인자기계발 #오공완
- 최단거리 알고리즘
- 깊이탐색
- 크루스칼
- articulation body
- unity korea
- 티스토리챌린지
- dfs
- 유니티
- unity sparkmain(clone)
- sparkmain(clone) 무한생성
- 행동트리
- 너비탐색
- readonly
- raycast
- GetComponent
Archives
- Today
- Total
낑깡의 게임 프로그래밍 도전기
정적라이브러리와 동적라이브러리의 장단점 본문
반응형
정적 라이브러리와 동적 라이브러리는 각각 고유한 장단점을 가지고 있어 특정 상황에 따라 적절하게 선택해야 합니다.
정적라이브러리 .lib : 빌드과정도중 링크단계에서(런타임 이전) 실행파일과 연결이된다.
동적라이브러리 .dll : 프로그램 실행도중(런타임 이후) 참조
정적 라이브러리 (Static Library)
장점
- 성능 향상: 정적 라이브러리는 컴파일 타임에 프로그램에 포함되기 때문에, 실행 시간에 라이브러리를 로드할 필요가 없어 실행 속도가 빠릅니다.
- 독립성: 정적 라이브러리를 사용하는 프로그램은 외부 라이브러리에 대한 의존성이 적어, 배포 시 별도의 라이브러리를 함께 배포할 필요가 없습니다. 이로 인해 배포가 간편해집니다.
- 호환성: 특정 버전의 라이브러리에 고정되기 때문에 라이브러리 업데이트로 인한 호환성 문제를 피할 수 있습니다.
단점
- 파일 크기 증가: 정적 라이브러리는 프로그램 파일 크기를 증가시킵니다. 여러 프로그램에서 동일한 라이브러리를 사용할 경우, 각 프로그램마다 라이브러리를 포함해야 하므로 디스크 공간을 더 많이 차지하게 됩니다.
- 유연성 부족: 라이브러리의 수정이나 업데이트가 있을 경우, 프로그램을 다시 컴파일해야 합니다. 이는 유지보수에 어려움을 줄 수 있습니다.
- 중복: 동일한 라이브러리를 여러 애플리케이션에서 사용할 때, 각 애플리케이션에 라이브러리가 포함되어 중복이 발생합니다.
동적 라이브러리 (Dynamic Library)
장점
- 파일 크기 절감: 동적 라이브러리는 프로그램 실행 시 필요할 때 로드되므로, 실행 파일 크기가 작아집니다. 여러 프로그램이 동일한 라이브러리를 공유할 수 있어 디스크 공간을 절약할 수 있습니다.
- 유연성: 라이브러리를 수정하거나 업데이트할 때, 프로그램을 다시 컴파일할 필요가 없습니다. 라이브러리를 교체하는 것만으로도 최신 기능이나 버그 수정을 적용할 수 있습니다.
- 메모리 절약: 동일한 라이브러리를 여러 프로그램이 동시에 사용할 경우, 운영체제가 라이브러리를 메모리에 한 번만 로드하고 이를 공유하므로 메모리 사용 효율이 높아집니다.
단점
- 성능 저하: 실행 시 라이브러리를 로드해야 하므로, 정적 라이브러리에 비해 초기 로딩 시간이 길어질 수 있습니다.
- 의존성 문제: 프로그램 실행 시 필요한 라이브러리가 존재하지 않거나 버전이 맞지 않을 경우 실행에 문제가 발생할 수 있습니다. 이로 인해 'DLL 지옥'이라고 불리는 문제를 경험할 수 있습니다.
- 보안 문제: 동적 라이브러리를 통해 악성 코드가 주입될 가능성이 있습니다. 외부에서 동적 라이브러리를 교체하는 방식으로 보안 취약점을 악용할 수 있습니다.
결론
정적 라이브러리와 동적 라이브러리는 각각의 장단점을 가지고 있으며, 프로그램의 특성, 배포 방식, 성능 요구 사항 등에 따라 적절한 방식을 선택하는 것이 중요합니다. 일반적으로 중요한 성능이 요구되거나 배포의 간편성을 중시하는 경우 정적 라이브러리를, 유연성과 메모리 사용 효율성을 중시하는 경우 동적 라이브러리를 사용하는 것이 좋습니다.
추가
DLL 지옥(DLL Hell)
DLL 지옥(DLL Hell)이란 윈도우 운영체제에서 동적 라이브러리(DLL: Dynamic Link Library) 파일들이 충돌하거나 호환성 문제를 일으키는 상황을 말합니다. 주로 다음과 같은 문제들이 포함됩니다:
- 버전 충돌: 서로 다른 애플리케이션이 동일한 이름의 DLL 파일을 필요로 하지만, 각 애플리케이션이 필요한 DLL의 버전이 다를 경우 발생합니다. 한 애플리케이션이 다른 애플리케이션의 DLL 파일을 덮어씌우거나 업데이트하면서 충돌이 발생할 수 있습니다.
- 파일 손상: DLL 파일이 잘못되거나 손상된 경우, 이 파일을 필요로 하는 모든 애플리케이션에 영향을 미칠 수 있습니다.
- 의존성 문제: 특정 DLL 파일이 다른 DLL 파일에 의존하는 경우, 해당 의존성을 충족하지 못하면 애플리케이션이 제대로 실행되지 않습니다.
- 중복 설치: 동일한 DLL 파일이 여러 버전으로 시스템에 설치되어 있을 때, 어떤 버전을 사용할지 결정하는 과정에서 문제가 발생할 수 있습니다.
DLL 지옥의 원인
- 공유된 DLL: 여러 애플리케이션이 동일한 DLL 파일을 공유할 때, 하나의 애플리케이션이 DLL 파일을 업데이트하거나 변경하면 다른 애플리케이션에 영향을 줄 수 있습니다.
- 레지스트리 설정: 윈도우는 DLL 파일에 대한 정보를 레지스트리에 저장합니다. 잘못된 레지스트리 설정은 DLL 파일을 제대로 찾지 못하게 할 수 있습니다.
- 설치 및 제거 문제: 애플리케이션을 설치하거나 제거할 때, DLL 파일을 올바르게 관리하지 않으면 문제가 발생할 수 있습니다. 예를 들어, 애플리케이션을 제거하면서 다른 애플리케이션이 사용하는 DLL 파일을 삭제하는 경우입니다.
DLL 지옥 해결 방법
마이크로소프트와 개발자 커뮤니티는 DLL 지옥 문제를 해결하기 위해 다양한 방법을 도입했습니다:
- 윈도우 파일 보호 (Windows File Protection): 윈도우 2000과 이후 버전에서는 시스템 파일이 임의로 변경되지 않도록 보호합니다.
- 사이드 바이 사이드 어셈블리 (Side-by-Side Assemblies): 윈도우 XP와 이후 버전에서는 동일한 DLL 파일의 여러 버전을 동시에 설치하고 사용할 수 있게 합니다. 이로 인해 각 애플리케이션이 자신에게 필요한 버전을 사용할 수 있습니다.
- 애플리케이션 로컬 DLL: 애플리케이션의 실행 파일과 동일한 디렉토리에 DLL 파일을 두어 해당 애플리케이션만 그 DLL 파일을 사용하도록 합니다.
- .NET 어셈블리: .NET 프레임워크에서는 어셈블리라는 개념을 도입해, 버전 관리를 쉽게 하고 의존성 문제를 줄였습니다.
- 패키지 관리자: 최근에는 NuGet 같은 패키지 관리자를 사용해 DLL과 그 의존성을 관리함으로써 문제를 예방합니다.
이러한 방법들을 통해 DLL 지옥 문제를 크게 줄일 수 있었지만, 여전히 구버전 소프트웨어나 특수한 상황에서는 문제가 발생할 수 있습니다.
반응형
'Unity C#' 카테고리의 다른 글
| Unity C# : Lock (잠금) 메커니즘 / 동기화 메커니즘 (0) | 2024.05.30 |
|---|---|
| Unity Bounds로 오브젝트의 경계와 중심 구하기 (0) | 2024.05.28 |
| Unity C# List 초기화 Clear와 RemoveAll 차이 (0) | 2024.05.20 |
| Unity 커맨드 패턴(Command Pattern) (0) | 2024.05.20 |
| Unity 특정 시점으로 돌아가는 기능 : 타임 리와인드, 타임트래블 (0) | 2024.05.20 |