안녕하세요 삽잡이입니다.
이번 시간에는 닷넷에서 제공하는 어셈블리에 대해서 알아보려고합니다.
그 전에, 어셈블리를 이해하기 위한 Component라는 개념에 대해서 알아보겠습니다.
여러분은 객체지향에서의 재사용이라고 하면 어떤 생각이 먼저 나십니까?
이 재사용도 맞습니다.
하지만, 제가 언급하고자하는 재사용은 다른 것입니다.
바로, '코드 재사용'과 '바이너리 재사용'입니다.
코드 재사용은 '소스코드 수준'에서 상속, 포함등을 통해
코드를 재사용할 수 있다는 의미의 재사용입니다.
그리고 바이너리 재사용은
코드를 컴파일하여 생성된 '바이너리'수준에서 재사용할 수 있다는 의미의 재사용입니다.
이번시간에는 바로 바이너리 수준에서의 재사용을 알아보고자합니다.
우선, 바이너리 재사용의 개념은 기존의 '컴포넌트'개념으로부터 출발합니다.
이 컴포넌트의 개념 또한 Software 이전에 Hardware의 Component로부터 시작됩니다.
하드웨어를 보면 마더보드, 비디오 카드, CPU, 램 카드 등
각각의 하드웨어들을 Component라고 부릅니다.
그런데 이 컴포넌트는 자기 스스로 독립적으로 존재하면서도
이 컴포넌트는 완제품으로써 존재합니다.
또한 서로가 합쳐져서도 완제품으로써 존재해야합니다.
이 말은 즉, 하나의 큰 틀안에서 각각 완제품으로써 자신의 독립적인 역할을 수행하지만,
이 들을 모두 합쳐서 하나가 된다 이겁니다.
(뭔가 좀 추상적으로 말했나요...)
하드웨어 관점에서 해당 컴포넌트들은 독립적이면서도,
만약 이상이 생기거나 교체를 하고자할 때 같은 규격이라면
즉, 인터페이스 호환이 가능하다면 언제든지 교체할 수 있습니다.
다른 것을 가져다가 써도 상관이 없다는 것입니다.
뭐 하나가 이상이 생기게 되면 전체를 갈아치울 필요 없이 부분적으로 바꾸면 되지요.
이런 개념이 Software Component을 만들어냅니다.
소프트웨어 컴포넌트는 이미 만들어진 완제품 즉, 바이너리 코드로써
독립적인 기능을 수행하는 소프트웨어 모듈입니다.
소프트웨어의 완제품은 바이너리 코드인데 이는 '기계어'를 뜻합니다.
기계어로 만들어진 실행파일로써 라이브러리 자체를 말하지요....
기존에 소프트웨어는 이렇게 독립적으로 사용되는 부분들을 모아서 동작하지 않았습니다.
그런데 이 소프트웨어 컴포넌트 개념이 등장함으로써 새로운 바람이 불게 되지요.
코드들을 컴파일하고나면 바이너리가 만들어지게 되는데,
바이너리 수준에서 재사용을 해보자는 바람이 불게 된 것입니다.
이를 통해 기존 프로그램에 바이너리를 가져다 사용하게 됨으로써
다시 컴파일 할 필요 없이 이미 만들어진 제품을
업그레이드 및 확장할 수 있게 됬습니다.
바이너리를 가지고 또 다른 바이너리를 만들어 낼 수 있다는 것입니다.
이를 바이너리 재사용이라고 하지요.
기존 코드에서는 상속을 해서 고치고 수정하여
컴파일을 한 뒤 바이너리로 만들어야했었습니다.
플렛폼 자체에서 지원하는 것이 아니라 윗단에서 수행하고자 했으니
매우 불편하고 비효율적이었습니다. 물론, 버그의 위험성도 컸구요...
예를 들어서 이런 것입니다.
예전 소프트웨어 개발때에는 A라는 기능을 똑같이 개발하기 위해서는
바이너리를 그대로 가져다 쓰는 것이 아니라 코드를 가져다 써야됬었다는 것입니다.
닷넷에서는 사실 컴포넌트라는 개념이 없습니다.
왜냐하면, 자체적으로 컴포넌트를 지원해주기 때문입니다.
즉, 개념 자체가 닷넷의 어셈블리에 들어가있다는 것입니다.
닷넷은 만들어지게 되면 .dll이나 .exe로 만들어지게 됩니다.
이 .dll, .exe 어셈블리는 언제든지 컴포넌트로 사용될 수 있다 이겁니다.
이 녀석들을 기반으로 또 다른 바이너리를 만들 수 있게되지요.
이와 같은 이유로 컴포넌트 개념이 이미 닷넷에 들어가있다고 말하는 것입니다.
다시 말씀드리지만,
Component의 핵심 중 하나가 바로 '재사용성'입니다.
그 중에서도 바이너리 재사용은
다시 컴파일 할 필요 없이 이미 만들어진 놈을
확장, 상속 필요 없이 어떠한 소프트웨어의 기능으로 확장시킬 수 있다는 것입니다.
이를 바이너리 재사용이라고 말하며,
닷넷 어셈블리에는 이미 개념이 들어가있다는 '반복'을 재차하고 있습니다...
이번 시간은 여기까지 하도록 하겠습니다.
이상 삽잡이였습니다!
'삽질의 현장 > - .NET' 카테고리의 다른 글
#070_닷넷(.NET)_.Net Framework 기본 - 어셈블리 (공유 어셈블리) (0) | 2015.11.10 |
---|---|
#069_닷넷(.NET)_.Net Framework 기본 - 어셈블리(assembly) (1) | 2015.11.07 |
#067_닷넷(.NET)_.Net Framework 기본 - LINQ 내부 표현 방식 (0) | 2015.11.06 |
#066_닷넷(.NET)_.Net Framework 기본 - LINQ의 역할 (사용자 정의형) (0) | 2015.11.06 |
#065_닷넷(.NET)_.Net Framework 기본 - LINQ의 역할 (기본형) 2 (0) | 2015.11.06 |