Toolkit은 어떻게 정의되나요?

QuietJoon의 이미지

최근에 본 포스팅에서, 프레임워크보다는 툴킷처럼 만드는 것이 좋다는 이야기를 잠깐 읽었습니다.
그 포스팅만 읽고서는 그런가보다 했지만, 정작 툴킷이 정확히 어떤 것인지 영 모르겠더군요.
툴킷과 프레임워크의 차이를 알아야지 납득을 할 수 있을 것 같은데....
(지금 만들고 있는 방식이 아마도 프레임워크 방식일거 같은데.... 잘 모르니까 뭐라고 할 수가...)

툴킷으로 이것저것 검색해봐도 GUI 툴킷이나 공격용 툴킷에 관한 이야기만 나오고,
툴킷이란 어떤것인가에 대한 설명을 찾기가 어렵네요.
프로그래밍은 둘째 치고, 검색은 그나마 부족하지 않은 만큼 할 줄 안다고 생각했었는데, 여전히 많이 부족한가 봅니다.

아시는 것을 가르쳐 주시거나, 잘 정리된 글을 아시면 가르쳐 주셨으면 합니다.

P.S.
정보학 전공이라, 그렇게 프로그래밍 실력 자체가 중요하지는 않지만,
이쪽에서 만든 알고리즘을 다른 연구팀에게 보여줄 일이 생기니까 좀더 신경써서 만들고 싶네요.

잘 부탁드립니다.

JuEUS-U의 이미지

저도 자세히는 모르는데,
일단 toolkit은 이름에서도 보이듯이 tool(도구) + kit(키트),
도구는 그냥 도구고, 키트는 필요한 공구리가 세트로 나온다고 해야하나,
하여간에 특정 목적을 수행하기 위해 필요한 도구를 한큐에 제공하는게 툴킷이라고 생각합니다.

반면에 framework는 철저하게 소스코드 의존하는,
(좀 틀리지만, 비교하자면) 확장된 형태의 라이브러리라고 볼 수 있다고 생각합니다.

익명 사용자의 이미지

GUI 툴킷은... GUI 에 관련된 라이브러리를 포함한 도구들 모음.
프레임워크는... 뼈대, 골격, 구조를 만들어주는 것으로 생각하시면 됩니다.

ruby on rail 는 웹 뼈대를 만들어주는 프레임워크입니다.
GLADE 는 GUI 뼈대를 만들어 줍니다.

디렉토리와 파일들이 자동으로 생성될 겁니다.

unsouled의 이미지

본문에서 말한 툴킷이라는 용어는 아마 '필요할 때 가져다 쓸 수 있는 라이브러리'라는 뜻으로 쓰인것 같습니다.

라이브러리와 프레임워크의 차이는..

라이브러리는 내가 짜는 소스에서 가져다가 쓰는 것이고,
프레임워크는 내가 짜는 소스를 프레임워크에 끼워 맞춘다고 보면 됩니다.

제 생각에는 협업등을 할 때,
사용하는 사람들의 코드를 적절하고 비슷한 퀄리티로 유지하기 위해서는 프레임워크가 유리하고,
범용적으로 사용할 때는 라이브러리가 유리한 것 같습니다.

OOP 적인 관점으로 봤을 때, 지금 짜고 계신 코드가 템플릿 메소드 패턴처럼 하위에 세부 구현을 맡기는 형식이라면..
프레임워크 식으로 짜고 있을 확률이 높습니다.

semmal의 이미지

"프레임워크보다는 툴킷처럼 만드는 것이 좋다"

프레임웍이 툴킷보다 나쁜 게 아닙니다.
목적이 확실하다면 프레임웍을 배우는데 필요한 비용이, 툴킷을 배우고 조립하는 비용보다 더 적습니다.
하지만 프레임웍에서 제공하는 이상의 기능을 만들어내야 해야한다면(프레임웍에서 제공하는 목적과 애초에 맞지 않다면),
확실히 툴킷을 쓰는 것만 못할 수는 있습니다.

툴킷은 그냥 JuEUS-U님이 말씀하신데로 생각하시면 됩니다.
unsouled님의 설명처럼 그냥 라이브러리라고 말하기에는,
라이브러리 형태로 제공되는 프레임웍과 헷갈리니 그렇게 구별한듯 합니다.

------------------------------
How many legs does a dog have?

yielding의 이미지

좋은 설명들이 많은데 GoF Design Pattern 에 깔끔한 설명이 있어 사족을 달아봅니다.

"A Toolkit is a set of related and reusable classes designed to provide useful, general-purpose functionality."

대표적인 예로 C++의 IO Streams를 들수 있습니다. 충분히 확장이 가능하도록 설계되었으나 general purpose로 쓰기에 전혀 부족함이 없는 대표적인 Toolkit입니다.
STL의 vector, stack, queue등도 마찬가지 예라 하겠습니다.

"A framework is a set of cooperating classes that make up a reusable design for a specific class of software."

대표적인 예라면 MFC, Cocoa 처럼 상속/message passing 등의 OO 기법을 통해 디자인을 재사용 하도록 설계된 라이브러리가 framework이라고 할 수 있겠습니다.

semmal님 말씀처럼 framework이 잘 설계가 되었다면, 혹은 설계된 framework의 범위 안에서 개말을 할 수 있다면 framework은 정말 유용합니다.

하지만 framework보다 toolkit을 만들라는 말이 나온 이유는 잘 설계된 framework을 사용하는 것은 쉬워도 제대로 framework을 만드는게 쉽지 않아서 입니다.
(toolkit도 제대로 만들기가 쉽지는 않겠지만... --;)

Ralph E. Johnson의 Object-oriented Programming and Design이라는 article을 보면 "First Rule of Framework Design" 이 재밋게도

"Don't." "Buy one, instead"

입니다.

Life rushes on, we are distracted

sihoo.1_hi의 이미지

심카드 틀킷은 카드를 낄때 낄때대와 같이 실행됍니다 그리고 그앱은 사용중지 할수없음니다
그리고 심카드보호를 쓸경우 껀다키면 심카드가 사용을 못합니다 그리고 처음할때는 piq인가
그거를 그 LG 어디점가서 이것좀 봐달라고 하시면돼요 그리고 그걸입력하면 풀리고
다음부터는 자기 쓴 비밀번호를 입럭하시면돼요