[C#] 라이브러리

임수정·2024년 6월 27일
0

📝 Learning Log

목록 보기
10/47
post-thumbnail

📍 라이브러리란?

라이브러리는 프로그래밍에 사용할 수 있게 미리 만들어져있는 함수나 변수들의 집합

따라서, 라이브러리를 사용하면 코드를 재사용하기 쉽고 이미 구현되어 있는 기능을 쓸 수 있어서 개발 시간을 단축시킬 수 있는 장점이 있음

라이브러리는 링크(link) 될 수 있도록 보통 컴파일된 형태의 목적 코드로 존재하고, 미리 컴파일 되어 있어 컴파일 시간이 단축됨

프로그램 컴파일 시 Linking(링킹) 단계에서 라이브러리가 제공하는 코드를 복사하여 실행파일에 넣는 방식의 라이브러리를 의미

Linking(링킹)

  • 여러개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고, 실행될 수 있는 한 개의 파일을 만드는 작업
  • 하나의 프로그램에서 다른 프로그램의 라이브러리를 사용하는 일은 매우 빈번함, 이러한 경우 프로그램이 정상적으로 실행되기 위해서 다른 프로그램의 라이브러리를 가지고 와야함
  • 링킹이란, 컴파일 이후 실행하기 이전에 작성한 프로그램이 사용하는 다른 프로그램의 라이브러리를 가져와 연결하는 것을 의미

📖 정적 라이브러리의 장점

① 컴파일 시 필요한 라이브러리를 프로그램 내에서 가지고 있기 때문에 이식성이 좋음
② 런타임 시 외부를 참조할 필요가 없어 속도가 빠름

컴파일(Compile)
컴퓨터는 인간의 언어를 이해할 수 없음
그렇기에 인간은 고급언어로 프로그래밍 한 후 저급 언어로 변경을 해줘야하는데, 이때 이루어지는 과정이 컴파일(Compile)

즉, 컴파일이란 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꾸어주는 것!

빌드(Build)
소스 코드 파일을 컴퓨터에서 실행 할 수 있는 독립적인 형태로 변환하는 과정과 그 결과
컴파일은 고급언어를 컴퓨터가 이해할 수 있는 저급 언어로 바꿔주는 과정 중 하나일뿐 전체적인 것 과정을 의미하는건 X

즉, 빌드라는 변환 과정의 큰 틀 안에서 동작하는 하나의 과정을 컴파일이라고 하고 여러 과정이 합쳐진 것을 빌드라고 함

또한, 빌드 과정을 도와주는 도구가 Build Tool
실제 코딩을 하고 완성되면 run을 실행하여 결과를 화면에서 볼 수 있는데 이때 Build Tool에 의해 모든 빌드과정이 자동으로 실행되어 우리는 컴파일, 빌드라는 개념을 크게 생각하지 않음

런타임(Runtime)
운영체제 위 또는 운영체제 자체에서 실행되면서 특정 프로그래밍 언어가 구동될 수 있는 환경
프로그램이 서버에 올라가서 실행되는 시간 == 런타임

  • 런타임 환경
    • 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신
    • 런타임 환경 == 프로그래밍 언어가 구동되는 환경

📖 정적 라이브러리의 단점

① 라이브러리를 가지고 있는 만큼 프로그램의 크기가 커짐
② 같은 라이브러리를 가진 여러 프로그램을 실행할 경우 코드가 중복되어 메모리를 낭비
③ 라이브러리 변경이 필요할 때, 변경된 라이브러리만 재배포하는 것이 아니라 프로그램 자체를 다시 재배포해야함

링커가 라이브러리를 복사하지 않고 해당 내용의 주소만 가지고 있다가 실행파일에서 라이브러리의 기능을 사용할 때 해당 주소를 통해 필요한 내용을 가져오는 방식의 라이브러리를 의미

링커(Linker) : 컴파일을 완료한 파일도 곧바로 실행할 수 없다. 왜냐하면 프로그램은 기계어 코드 외에도 운영체제가 요구하는 코드를 추가적으로 가져야하기 때문! 목적파일을 실행파일로 바꾸기 위해서 이 실행파일이 운영체제의 요건에 맞도록 형태를 조금 바꾸고 스타트업(start up)이라는 추가 코드를 가져아한다. 목적파일에 이러한 처리를 하여 실행파일로 바꾸는 동작을 링크(Link)라고 하고, 링크를 해주는 프로그램을 링커(Linker)라고 부른다.

DLL을 구현한 후 컴파일하면 *.lib파일, *.dll파일 두개의 out파일 생성

*.lib : 링크할 때 필요
*.dll : 실행할 때 필요, window 운영체제에서만 사용 가능

📖 동적 라이브러리의 장점

① 정적 라이브러리와 비교했을 때 실행 파일에 라이브러리를 포함하지 않기 때문에 실행파일 크기가 작음
② 여러 프로그램이 하나의 메모리에 있는 동적 라이브러리를 공유하여 사용할 수 있기 때문에 메모리 자원을 효율적으로 사용 가능
③ 라이브러리에서 수정할 부분이 있다면 실행파일을 새로 컴파일 할 필요 없이 동적 라이브러리만 다시 컴파일하여 재배포 가능
④ 언어 형식이 다른 여러 프로그램을 지원하고, 함수의 호출 규칙만 준수한다면 다른 언어로 작성된 여러 프로그램에서 동적 라이브러리 함수 호출 가능

📖 동적 라이브러리의 단점

① 동적 라이브러리를 사용하는 경우 실행파일은 동적 라이브러리가 필요하기 때문에 외부의존도가 생겨 이식성이 낮음
② 매번 프로그램 영역에서 라이브러리가 저장된 주소로 이동하는 과정이 필요하고, 이때 성능저하가 발생될 가능성이 있음

profile
언어는 거들 뿐...

0개의 댓글