| English | 의미 |
|---|---|
| program library/ˈprəʊɡræm ˈlaɪbrəri/ | 프로그램 라이브러리 |
| subroutines/ˈsʌbruːtiːnz/ | 서브루틴 |
| library routines/ˈlaɪbrəri ruːˈtiːnz/ | 라이브러리 루틴 |
| static library/ˈstætɪk ˈlaɪbrəri/ | 정적 라이브러리 |
| executable/ɪɡˈzekjʊtəbl/ | 실행 파일 |
| dynamic library/daɪˈnæmɪk ˈlaɪbrəri/ | 동적 라이브러리 |
인터넷을 파괴한 열 한 줄
- 2016년 3월 한 프로그래머가 공개 저장소로부터
left-pad라는 작은 라이브러리를 삭제했습니다. 이 라이브러리는 열 줄 길이에 불과했는데, 문자열 앞부분에 공백을 추가하는 기능이었습니다. - 몇 시간 내에 전 세계 기업들의 빌드가 실패했습니다. 수천 개의 프로그램이 그 열 줄을 처음부터 직접 쓴 적이 없습니다. 모두 이를 빌려왔고,それが working的时候是 invisible了,直到它停止工作的那一刻。
- 이것이 현대 소프트웨어가 개발되는 방식입니다. 프로그램 라이브러리는 의도된 빌딩이며, 이 수업에서는 개발자에게 무엇을并提供什么代价,以及它可以以哪两种 ways attached to a program。
프로그램 라이브러리가 무엇인지
- 프로그램 라이브러리는 사전에 작성되고 검증된 루틴, 서브루틴, 클래스 및 모듈의 집합으로, 프로그램이 자체 코드를 작성하지 않고 사용할 수 있게 합니다.
- 수학 라이브러리, 그래픽 라이브러리, 네트워크 라이브러리, 경로 탐색 라이브러리, 압축 라이브러리: 각각 필요한 모든 프로그램에게 한 번 해결해 놓은 문제 영역을 담당합니다.
- 개발 중인 소프트웨어는 일반적으로 이러한 라이브러리 루틴과 새로운 프로그램에만 특화된 코드로 구성됩니다.

새로운 코드는 작은 부분이고, 빌려온 코드는 큰 부분입니다
컴퓨팅 개념 실험실
구체적인 예시를 그들이 시연하는 컴퓨팅 개념에 따라 분류하십시오.
프로그램 라이브러리는:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
라이브러리는 수학, 그래픽, 네트워크 등 프로그램이 직접 작성하지 않고 호출할 수 있는 준비되고 검증된 코드를 제공합니다.
준비되고 재사용 가능하며 검증된 코드의 집합은 프로그램 ______입니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
라이브러리는 시간을 절약하고 버그를 줄여줍니다.
개발자에게 주는 혜택
- 루틴들은 이미 작성되고 검증되었으므로, 개발이 빠르고 저렴합니다.
- 이들은 신뢰할 수 있습니다: 수많은 프로그램에 사용되어 거의 오류가 없습니다.
- 개발자는 해당 분야(그래픽, 암호화, 경로 탐색 등)에 대한 전문 지식이 필요 없으며, 프로그램 자체의 기능 개발에 시간을 쓸 수 있습니다.
- 프로그램은 유지보수가 용이합니다. 공통 코드가 한 곳에 존재하므로 팀원들이 병행 작업이 가능하며, 각자가 동일한 루틴을 사용할 수 있기 때문입니다.
라이브라리를 사용하는 이점은 코드가:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
라이브러리 코드는 검증되고 널리 사용되며 표준화되어 있어 재사용하면 시간을 절약하고 신뢰성을 향상시킵니다.
라이브러리 서브루틴을 사용하여 소프트웨어를 구축하는 개발자에게 주어지는 이점이 무엇입니까? 모두 선택하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
검증된 서브루틴, 전문 지식 불필요, 쉬운 유지 보수입니다. 프로그램 자체의 코드는 여전히 테스트되어야 합니다.
단점
- 이 routine(routine)이 정확한 요구사항에 부합하지 않을 수 있으며, 개발자가 이를 수정할 수 없으므로 제한된 범위 내에서 대안을 마련해야 합니다.
- 프로그램은 라이브러리에 의존하게 되므로, 버그나 업데이트 누락, 또는
left-pad와 같은 경우 라이브러리 사용 중단으로 인해 문제가 발생합니다. - 라이브리의 라이선스로 인해 프로그램 판매 및 배포 방식이 제한될 수 있으며, 사용하지 않는 routine들은 프로그램을 더 크게 만듭니다.
worked example: 레스토랑 로봇
- 레스토랑 로봇용 소프트웨어를 작성하는 팀은 테이블 간 최단 경로를 찾는 routine이 포함된 프로그램 라이브리를 사용합니다. 이 팀에게 두 가지 장점과 하나 단점을 설명하십시오.
- 장점: routine이 이미 작성되고 테스트되었으므로, 팀은 시간을 절약하고 결과의 신뢰성을 확보할 수 있습니다. 장점: 팀 자체적으로 경로 탐색 알고리즘을 이해할 필요 없이, 로봇 고유의 기능 개발에 시간을 할당할 수 있습니다.
- 단점: 이 routine이 레스토랑의 정확한 요구사항(의자 이동, 일방 통로 등)을 처리하지 못할 수 있으며, 팀은 이를 변경할 수 없으므로 routine의 한계를 우회해야 할 수 있습니다.
- 각 항목을 이 팀과 이 routine에 구체적으로 연결하십시오. 일반적인 "시간 절약"보다 "경로 탐색 알고리즘 작성 및 테스트에 소요되는 시간 절약"이라는 구체적인 설명이 더 높은 점수를 받습니다.
경로 탐색 서브루틴을 라이브러리에서 사용하는 로봇 팀의 단점은 무엇입니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
팀은 라이브러리 코드를 변경할 수 없으므로 요구 사항과의 불일치에 대해 workaround를 만들어야 합니다. 알고리즘을 이해할 필요가 없다는 점은 단점이 아니라 이점입니다.
정적 라이브러리(static libraries)
- 정적 라이브러리는 프로그램이 컴파일되고 링크될 때 executable에 복사됩니다.
- 따라서 프로그램은 독립적으로 작동하며, 실행을 위해 다른 파일이 필요 없습니다.
- 비용: 각 프로그램마다 자체 복사본을 포함하므로 executable 크기가 커지며, 라이브리 업데이트 시 모든使用该程序需要进行重新构建。
정적 라이브러리와 동적 라이브러리의 차이점은 정적 라이브러리가:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
정적 라이브러리는 실행 파일에 내장되고, 동적 라이브러리는 런타임에 로드되어 프로그램 간에 공유됩니다.
동적 라이브러리 및 DLL 파일
- 동적 라이브러리는 Windows에서는 Dynamic Link Library(DLL), Linux에서는
.so파일로, 별도의 파일로 유지되며, 프로그램이 이를 호출할 때만 **실행 시간(run time)**에 메모리로 로드됩니다. - Executable 크기가 작으며, 여러 실행 중인 프로그램이 메모리 내에서 하나의 복사본을 공유할 수 있으며, DLL을 한 번만 업데이트하면(버그 수정이나 신규 장치 지원 등)使用该程序无需重新编译。
- 메모리는 라이브리가 필요한 동안에만 사용됩니다. 비용: DLL이 없거나 버전이 잘못되면 프로그램이 실행되지 않습니다.

컴파일 시에 복사되거나, run time에 로드되어 공유됨
동적 라이브러리는 여러 프로그램이 공유할 수 있으며 한 번 업데이트하면 모든 프로그램에 적용됩니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
런타임에 로드되므로 하나의 공유 동적 라이브러리가 여러 프로그램을 지원하며, 업데이트하면 각程序를 다시 컴파일하지 않아도 모두 수정됩니다.
각 특성을 정적 또는 동적 라이브러리에 매핑하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
정적 링크는 코드를 실행 파일에 복사하여(크고 독립적임); 동적 링크는 런타임에 공유 라이브러리를 로드하여(작고 모든 것을 위해 한 번 업데이트 가능).
DLL 서브루틴을 사용하는 프로그램의 사건들을 순서대로 나열하십시오.
난이도 3/5 · 200 코인 + 오늘 첫 완료 시 소액 보너스
로딩은 실행 시점, 즉 첫 번째 호출 시에 발생하며, 하나의 복사본으로 모든 프로그램을 처리합니다.
풀이 예제: DLL 파일의 장점
- 소프트웨어 개발자가 DLL 파일을 사용함. 장점을 설명하시오. [4]
- 라이브러리 코드가 실행 파일에 복사되지 않았으므로 실행 파일의 크기가 작다.
- 메모리에 있는 하나의 DLL 사본을使用该하는 모든 실행 중인 프로그램이 공유하므로 메모리 사용을 줄일 수 있다.
- DLL을 업데이트하여 버그를 수정하거나 새로운 기기를 지원할 수 있어, 해당 DLL을 호출하는 프로그램을 재컴파일하거나 재설치할 필요가 없다.
- 라이브러리는 필요할 때만 로드되므로 루틴이 사용 중일 동안에만 메모리가 사용된다.
정적 또는 동적 선택
- 다른 것이 설치될 수 없는 기계, 임베디드 장치, 또는 단일 다운로드 파일에서 программу를 실행해야 하는 경우: 정적(static), 실행 파일이 자체적으로 완전하기 때문이다.
- 하나의 시스템에서 많은 프로그램들이 동일한 루틴을 공유하거나 루틴이 자주 변경되는 경우: 동적(dynamic), 하나의 공유 사본이 더 작고 한 번의 업데이트로 모든 것을 해결하기 때문이다.
- 상충 관계(trade-off)로 정당화한다: 자체적이지만 크기가 크고 업데이트를 위해 다시 빌드되어야 함, 혹은 작고 공유되지만 파일이 존재해야 한다는 의존성이 있음.
무엇을 설치할 수 없는 장치의 단일 파일에서 실행되어야 하는 프로그램은 동적 라이브러리를 사용해야 합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
동적 라이브러리는 별도로 존재해야 하는 파일입니다. 정적 라이브러리는 실행 파일에 복사되는데, 이는 독립적인 프로그램에게 정확히 필요한 방식입니다.
놓칠 수 있는 점
- DLL은 run time에 로드되며 컴파일 시간에는 그렇지 않다. 이 단어가 바로 채점 포인트이다.
- 개발자에게 이점이 있다: 이미 작성되고 테스트되어 있어 전문 지식이 필요하지 않으며 유지보수가 용이하다. "프로그램이 더 빠르게 실행된다"는 목록에 포함되지 않는다.
- 라이브러리는 코드이지 도구(tool)가 아니다. IDE가 도구이며, 라이브러리는 프로그램이 호출하는 것이다.
- 단점은 라이브러리 사용에 대한 단점이어야 한다: 변경할 수 없음, 적합하지 않을 수 있음, 의존성. "비용이 들다"는 일반적으로 핵심 점이 아니다.
이해했습니다
- **프로그램 라이브러리(program library)**는 프로그램이 직접 작성하는 대신 호출하는 미리 작성되고 테스트된 코드이다.
- 장점: 빠르고 저렴한 개발, 신뢰할 수 있는 루틴, 해당 분야에 대한 전문 지식 불필요, 쉬운 유지보수, 팀별 병렬 작업 가능; 단점: 적합하지 않을 수 있음, 변경 불가, 의존성
- 정적(static): 컴파일 시에 실행 파일에 복사되며, 자체적이지만 크기가 크고 업데이트를 위해 다시 빌드됨
- 동적(dynamic (DLL)): run time에 로드되는 별도 파일로, 크기가 작고 여러 프로그램이 공유하며, 한 번의 업데이트로 모두 적용됨