당신이 이미 적어도 하나의 프로그래밍 언어와 친숙하다면,
당신은 어떤 프로그래밍 언어이던 인간이 읽을 수 있게 설계되었다는 것을 알 겁니다.
이것들 중 대부분은 함수, 키워드, 연산자들을 표현하기 위해 라틴 문자 기호를 사용합니다.
하지만, 이건 기계가 이해 할 수 있는 언어가 아닙니다.
이러한 이유 때문에 우리가 인터프리터, 컴파일러, 어셈블러를 사용합니다.
따라서, 기계어 창조 과정을 쉽게 만들기 위해서,
우리는 언어적인 명령을 작동 시킬 수 있게 해 주는 상위 레벨 인터페이스가 필요 한 겁니다. (ex - java, c++)
이러한 인터페이스는 프로그램 자체적으로 0 또는 1로 변환됩니다.
-Programming code- 프로그래밍 코드
FOR i OF 1..n
PRINT i
-Machine code- 기계 코드
10000100101010101010011...
같은 원리로 당신에게 고 차원 언어의 기능과 메서드를 제공하는 이미 존재하는 코드를 재사용하고 싶을 때,
이에 대해 스스로 한 번 더 작성하는 것이 아니라, 이를 적용 할 수 있는 겁니다.
우리는 여기에서 지루한 복사-붙이기 에 대한 이야기를 하는 것이 아니라,
유용한 프로그래밍 라이브러리에 대해 말하고 있습니다.
고-차원 이 의미하는 것은 각 펑션(기능)이 당신을 위해 저-차원의 라이브러리들을 조율하고 있다는 걸 의미합니다.
예를 들어, 상상 속의 기능 WRITE_DATA
는 물 밑에서 파일을 열고, 데이터를 쓴 뒤, 마지막엔 파일을 닫습니다.
WRITE_DATA
라는 기능이 있다면, 백그라운드 환경(물 밑)에서 데이터에 관한 작업을 실시한다 라는 의미.
What is a library - 라이브러리란 무엇인가
프로그래밍 라이브러리 (programming library) 는,
사용하기에 아주 잘 정의된 재사용적 이며, 재분배적 인 컬렉션을 의미합니다.
라이브러리는 당신에게 고-차원의 기능과 메서드를 제공합니다.
그렇다면 우리는 라이브러리가 내부 구현 과정에 있어,
더 친숙해지게 해 주는 문서를 가지고 있음을 예측할 수 있습니다.
familiar( 친숙 ) 보다는 구현 과정을 가이드 해 준다고 생각하면 편합니다.
당신은 라이브러리를 마치 블랙 박스처럼 대해야 합니다. :
당신은 인터페이스의 문서를 가지고 있지만, 구현에 대해서 알 필요는 없습니다.
알고리즘을 공부하기 위해서라면 내부 동작 방식에 대해서 잘 알아야만 합니다.
여기에 말하는 바는 굳이 바로 어렵게 내부 동작 방식에 대해서 알 필요는 없다는 겁니다.
그저 프로그래밍 언어가 당신이 기계 코드와 작업하는 것을 떼어내는 것 처럼,
라이브러리 또한 저-차원 연산자와 함께 작업하지 않게 떼어내 줍니다.
직역하면 독립, 혹은 외딴, 이란 의미이지만, 의역 시 훨씬 더 정확한 의미가 됩니다.
위의 의미는 프로그래밍 언어를 공부함에 있어 굳이 기계어 및 깊은 구현 코드를 알 필요는 없다는 겁니다.
따라서, 당신이 떠올릴 수 있는 것은:
일관되지 않은 무더기 기능들이 라이브러리가 될 수 있을까요?
당연합니다만, 누군가가 사용 할 것 처럼 보이진 않네요!
사용성 측면에서 우리가 찾은 중요한 메인 기능들을 비춰 봅시다.
좋은 라이브러리란 :
- 한 지식의 영역에 속합니다. 예를 들어, 파일 읽기 및 쓰기가 있으며, 더 이상의 기능은 없습니다.
- 문서를 제공합니다.
- 해당 기능을 반영하는 각각의 오브젝트의 이름이 깔끔해야 합니다.
- 악의적인 코드를 내부에 가지고 있으면 안 됩니다.
- 테스트를 가져야 합니다.
- 프로그래밍 언어의 코드 스타일을 따릅니다.
Bad library | Good library |
---|---|
FUNCTION DO_SOMETHING | FUNCTION OPEN_FILE |
FUNCTION F | FUNCTION CLOSE_FILE |
CLASS C | CLASS DIRECTORY |
NO TESTS | TESTS |
/No Doc/ | /* DOCUMENTATION */ |
이제 당신이 고른 라이브러리가 잘 쓰였는지, 아닌지 이해할 수 있게 되었습니다.
어떻게 이것을 정확하게 쓸 수 있을까요?
Standard and third-party libraries - 표준과 서드파티 라이브러리
여러 유형의 라이브러리가 있습니다만, 이것들을 어디서 찾을 수 있을까요?
프로그래밍 언어 구현은 주로 당신이 컴퓨터에 설치한 소프트웨어이며,
대부분의 구현은 표준 라이브러리를 따릅니다.
standard library (표준 라이브러리)는 안정적이며 개발 과정에 필요한 본질적인 모듈의 컬렉션을 표준에 맞췄습니다.
보통, 표준 라이브러리들은 평범한 유틸리티들로 구성되어 있는데,
이는 파일 시스템 작업, 네트워크 커넥션 만들기, JSON 파일 파싱하기 와 같이 평범합니다.
그리고 표준 라이브러리들은 프로그래밍 언어 상세의 일부분입니다.
표준 라이브러리는 당신이 필요한 모든것을 거의 대부분 지원 할 수 있습니다.
예를 들어, 당신은 데스크톱 어플리케이션 혹은 웹 크롤러를 만들고 싶어합니다.
하지만, 표준 라이브러리는 이것에 대해 편리한 도구를 주지 않습니다.
이러한 경우, 인터넷을 통해 Github 와 같은 사이트에서 서드 파티 라이브러리를 찾을 수 있습니다.
third-party library (서드 파티 라이브러리)는 고-차원 모듈들의 컬렉션입니다.
프로그래밍 언어의 표준 라이브러리와는 별개로 말이죠.
이러한 라이브러리 (서드파티) 는 종종 오픈 소스입니다.
당신의 프로그램에 라이브러리를 포함시키기 위해서, 그에 대한 키워드와 이름을 사용해야만 합니다.
만약 당신이 서드파티 도구를 사용한다면, 문서를 통해 찾아야 하고,
처음으로 당신의 컴퓨터에 어떻게 설치하는지 알아내야 합니다.
해당 프로그램의 저자들은 해당 라이브러리에 대한 정보를 README 파일에 제공합니다.
따라서, 이제 당신은 라이브러리에 대한 모든 기초를 배운 것 처럼 느낄 수 있습니다.
아마 당신은 이러한 것을 통해 질문을 가지고 있을 수도 있습니다 :
당신 스스로 코드를 작성하는 것이 더 효율적이지 않을까?
그것에 대한 대답은 : 많은 경우, 그렇습니다.
Why use libraries - 왜 라이브러리를 사용할까?
라이브러리들은 모든 프로그래밍 문제들에 있어 만능 해결책이 아닙니다.
모든 라이브러리들이 코드 제품에 사용 될 정도로 성숙하지 않습니다, 게다가 일부는 버그가 있습니다.
만약 문제의 영역이 너무 좁다면, 심지어 해당 문제를 풀 수 있는 라이브러리가 존재해도 찾기가 힘듭니다.
당신의 문제에 라이브러리가 존재한다고 가정 해 봅시다.
모든 케이스들을 지원 할 순 없지만, 그럼에도 불구하고 사용해야 할 여러 이유를 줄 수 있습니다.
- 제품의 개발 시간과 종료 시간을 줄여 줍니다.
보조 소프트웨어를 만드는 것이 아니라, 어플리케이션의 로직을 구현하는 것에 초점을 맞출 수 있습니다. - 라이브러리의 개발은 커뮤니티에 의해 주도됩니다.
많은 사람들이 라이브러리를 지원하며, 라이브러리가 오픈 소스라면, 이에 가담 할 수 있습니다. - 만약 라이브러리가 유명하다면, 많은 회사와 프로그래머들이 사용합니다.
이는 라이브러리가 다른 사람에 의해 테스트되고 활용되어 왔다는 것을 의미합니다.
그리고 당신의 팀에 새로운 개발자가 해당 라이브러리를 알 겁니다. - 라이브러리들은 문서를 가지고 있습니다.
내부 구현에 대해서 배울 것 없이 그저 바로 튜토리얼을 읽고 사용하기 시작하면 됩니다.
라이브러리의 주요한 목적은 사람들이 같은 일을 두 번 하는 것을 방지하기 위함입니다.
당신은 이 규칙을 따를 수 있으며 어떠한 다른 문제로 인해 산만해 지지 않고 당신의 소프트웨어를 만들 수 있습니다.
만약 당신의 코드가 라이브러리를 사용한다면,
프로그램을 중단하지 않고도 언제든지 라이브러리 함수를 자신의 함수로 대체 할 수 있습니다.
당신이 원하는 대로 컨트롤 할 수 있습니다.
Conclusion - 결론
여태까지 배워 온 내용들을 요약 해 봅시다.
본질적으로, 라이브러리는 특정 상황에 맞게 만들어진 이해 가능한 인터페이스를 갖춘 코드 모음입니다.
라이브러리들은 표준적일 수도 있으며, 서드 파티일 수도 있습니다.
당신의 코드를 작성하는 것 대신 서드 파티 라이브러리를 사용하는 것은 많은 경우에서 합리적입니다
간단하게 말해서, 이는 시간과 노력을 아껴주기 때문입니다.
게다가, 유명한 라이브러리들은 보통 아주 잘 테스트되어 있습니다.
그리고 만약 해당 라이브러리가 오픈 소스라면, 오픈 소스를 지지하는 커뮤니티에 참여 할 수 있습니다.
Words to Remeber
verbal : 언어적, 언쟁, 준동사, 말의, 말만의, 축어적인
tedious : 지루한
in terms of : ~측면에서
malicious : 악의 있는, 적의 있는
standardized : 표준화된, 표준에 맞추다, 표준화핟, 표준으로 삼다
hardly : 거의 ~ , 애써서, 고생하여
apart from : ~와는 별개로.
auxiliary : 보조자, 조조함, 보조의, 예비의
compilation : 모음, 편집
reasonable : 합리적인, 사리를 아는, 도리에 맞는
Moreover : 게다가
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introduction to Git' 카테고리의 다른 글
Files - 파일의 의미와 정의 (1) | 2024.05.13 |
---|---|
What are bugs - 버그란 무엇인가? (0) | 2024.05.11 |
Units of information - 정보의 단위 (0) | 2024.05.09 |
Parameters and options - 파라미터와 옵션 (0) | 2024.05.08 |
Command line overview - 명령 줄 개요 (0) | 2024.05.08 |