문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 추상화 (문단 편집) === [anchor(추상화 (컴퓨터과학))] [[컴퓨터과학]]에서의 추상화 === 컴퓨터과학에서 추상화는 어떤 종류의 대상들에 대해 그것이 가져야 할 핵심적인 특징들을 가지는 '''모델'''을 만드는 것이다. 예컨대, '[[메모리]] 공간'이라는 모델은 '초기값을 결정하는 선언 이후의 임의의 시점에 대해 특정 값을 가지며, 의도한 경우에만 그 값이 변한다'는 핵심적인 특징을 가지고 있다. 그렇다면 컴퓨터과학에서 추상화된 모델을 세운다는 것은 어떤 이점이 있는가? 우선 [[추상화 계층]](abstraction layer)의 아래쪽-구현 측면부터 살펴보면, 모델은 ''그에 해당하는 것을 구현할 때 그것이 어떤 특징들을 가지도록 만들어야 하는지에 대한 명세(specification)''가 된다. 플립플롭을 이용하건 축전기를 이용하건, 메모리 공간은 '어떤 시점에 값을 가지며, 그곳에 다른 값을 기록하지 않는 한 다음에도 계속 그 값을 유지하'도록 만들면 된다. 다음으로, 추상화 계층의 위쪽-활용 측면에서 살펴보면, 우리는 이 모델에 해당하는 것의 특징들이 어떠한지 알고 있으므로, 모델은 ''대상이 내부에서 어떻게 동작하는지의 세부사항을 모르더라도 다른 것을 만들 때 활용할 수 있게끔 하는 인터페이스(interface)''의 역할을 한다. 우리가 메모리 공간을 가지고 간단한 프로그램을 만들 때, 그 메모리 공간이 플립플롭으로 만들어진 레지스터에 있는지 축전기로 만들어진 DRAM에 있는지에 상관없이 우리는 그 메모리 공간이 '어떤 시점에 값을 가지며, 그곳에 다른 값을 기록하지 않는 한 다음에도 계속 그 값을 유지하'는 특징을 가진다는 것을 알고 있으므로 이를 활용하여 프로그램을 만들 수 있다. 심지어 그것이 일반적으로 생각하는 메인 메모리가 아니라 [[가상 메모리|디스크 같은 곳]]에 있거나 아예 네트워크상의 어딘가에 있더라도 신경쓸 필요가 없다. 마찬가지로, [[명령어 집합]] 등 인터페이스 역할을 할 머신의 모델만 잘 정의되어 있으면, 그것이 실제 기계에서 돌아가는지, 아니면 소프트웨어적으로 시뮬레이트되는지에 상관없이 우리는 운영체제를 그 위에서 돌릴 수 있다. 이런 식으로 우리가 생각하는 실제 물리적 대상이 없어도 그 모델이 명세한 특징들을 가지도록 인터페이스만 만들어 놓으면 그것을 실제 대상인 것처럼 활용 가능한 [[가상화]](virtualization)는 그 구현에 상관없이 그것을 활용할 수 있다는 추상화된 모델의 특징을 매우 잘 보여 주는 사례라 할 수 있겠다. 우리는 앞에서 설명한 추상화의 두 가지 측면을 이용하여 복잡한 구조의 어떤 부분을 만들 때 만약 그 부분이 가져야 할 특성들을 명세한 모델을 세워 놓았다면 그 세부사항의 구현과 그 부분을 활용하는 구현을 분리해 구현할 수 있다. 더 일상적인 예시를 들자면, 음악이 나오는 웹 사이트를 만들 때 웹 사이트의 개발자는 [[브라우저]]에서 제공하는 소리가 나오게 만드는 [[HTML]]테그에 음악파일을 연결해주기만 하면 된다. 웹 개발자가 사용자의 컴퓨터의 환경을 알아내어 각 운영체제에 알맞는 오디오 출력 [[API]]를 호출할 필요가 없다. 이것은 브라우저에서 내부적으로 구현되어 있고 소리가 나게 만드는 HTML태그가 실행되면 그 코드가 실행되도록 브라우저 엔진이 만들어졌기 때문이다. 그리고 브라우저의 개발자도 오디오 장치가 Realtek인지 Creative인지 Nvidia인지 아니면 아예 컴퓨터 주인이 원격 데스크톱을 사용하고 있거나 트위치에 방송을 하고 있는지 등을 신경쓸 필요 없이 운영체제의 오디오 API만 호출하면 기본 출력 장치로 소리가 나게 만들 수 있다. 운영체제 내부적으로 장치 [[드라이버]]를 참조하여 하드웨어로 오디오를 출력하는 것이 구현되어 있기 때문. 심지어는 운영체제 개발자도 추상화된 드라이버 규격만 지정해두면 그 규격에 맞추어 하드웨어 제조사(Realtek, Creative, Nvidia 등)에서 드라이버를 만들기 때문에 운영체제 개발자도 오디오 장치를 제어하는 것에 신경 쓸 필요가 없다. 또한 추상화가 세부적인 것을 개발자가 신경쓸 필요가 없게 만들어 주기도 하지만 하위 계층을 직접 사용할수 없게 만들기도 한다. 예를 들면 웹 사이트의 개발자는 오디오와 관련된 네이티브 코드를 호출할수 없고 브라우저의 개발자는 오디오 하드웨어를 제어하는 코드를 사용할수 없다. 만약 추상화가 각 계층에서 전혀 이루어지지 않았다면 웹 사이트 개발자가 하드웨어를 제어하는 민감한 코드에 접근할 수 있게 해야하므로 시스템 안정성이 떨어지고 보안상 위험해진다.[* 과거에 여차하면 블루스크린을 보았던 것도 장치 드라이버가 없어 응용 소프트웨어가 직접 하드웨어를 제어해야 했고 이 과정에서 오류가 발생하였기 때문이다.] 이렇게 추상화를 통해 [[샌드박스]] 환경을 구현하기도 한다. [[분류:예술]] [[분류:수학]] [[분류:컴퓨터 공학]]저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기