GJ, Generic Programming?

김용욱_의 이미지

많은 사람들이 소프트웨어 생산성이 문제라고 말을 합니다. 아마도 그렇기 때문에 소프트웨어 공학이란게 있는 것이고 객체지향과 컴포넌트 프로그래밍등의 다양한 개념들이 나오는 것이겠지요.

그런데 최근에 GJ(http://www.cis.unisa.edu.au/~pizza/gj/)에 대해서 논의가 많다고 들었습니다. 이해를 잘못하지 않았다면 이것이 다른 사람들이 말하는 Generic Programming을 도입할려는 시도가 아닌가 생각합니다.

소프트웨어를 만들때는 개발 과정의 생산성과 프로그램 자체의 퍼포먼스등 여러가지 요소들이 중요한 것은 분명합니다. Generic Programming에 대한 자료들을 국내 웹 검색에서는 별로 보이지 않더군요. Generic Programming이 하나의 선택이라면 그것을 살펴볼 필요는 있다고 생각합니다.

Generic Programming에 대해서 장단점과 앞으로의 소프트웨어 공학에 대해서 자세히 알고 싶은 분들의 첨언을 부탁드립니다.

댓글

익명 사용자의 이미지

generic이란 정의는 보통 명확한 한 type으로부터 하나 이상의 type이 적용될수 있는걸 말하죠. 그러므로 일반적인 array, record의 type constucter도 generic하다 할 수 있습니다.
그런데 우리가 자주 쓰는 일반적인 strongly typed object-oriented 언어들에서는 필요이상으로 type을 constraint하고 있는게 문제입니다. 클래스들의 별 필요없는 부분들까지 끼어들어 재사용성을 떨어뜨리고 있는데요. 즉, 예를들면 부모로부터 상속되어서 호출되지(invoked)도 않는 메소드들이 여전히 존재하고 있다는 얘깁니다. 해결책으로 많이 쓰는 언어에서는 일반적이지않은 functional parameter란 기법을 씁니다.

사정이 이러니 마냥 좋아보이는 STL도 이 대가를 피해갈 순 없겠죠. data sturctures와 algorithms을 분리한 멋진 설계관점을 가진 STL도 C++에만 있는 독특한 feature인 templete에 너무 많이 의존하고 있습니다. 이로인해 constrainted class의 constraints들이 제대로 보이지 않는데다, constraints violation이 막상 일어났을땐 그 정확한 위치를 모를수도 있습니다.

더 재밌는걸 원하는 분들에겐 Leda라는 언어를 추천해 주고 싶군요.

익명 사용자의 이미지

generic programming. 의외로 많은 분들이 잘 모르고 계시네요. 저도 많이 아는것은 아니지만 제가 아는 한도에서 말해 볼께요. 저도 어깨넘어로 듣고 약간 배운거라서 말하는게 두서가 없을겁니다.
generic programming이란것은 소프트웨어를 얼마나 더 재사용하게 할 것이냐에서 나온 개념으로 기존 객체지향 개념에서 조금더 발전한 개념입니다. design pattern이라고 들어보셨죠? 이것도 비슷한 개념인데 유명한 design pattern 책의 머리말을 요약해서 읽어볼께요. 제가 번역해서 좀 매끄럽지 못할겁니다.

이 책은 객체지향의 기술이나 디자인을 소개하지 않는다. 이 책은 독자가 객체지향에 대해서 충분히 능숙하다고 가정한다.
당신은 types, 다형성, 상속, interface에 대해서 아주 잘 알고 있다.
객체지향 소프트웨어를 만드는것은 힘들다. 그리고 재사용 가능한 객체지향 소프트웨어를 만드는것은 훨씬 더 힘들다.

뭐 대충 이런 내용인데요. generic programming은 기존 객체지향 개념에서 더 재사용할수 있도록 하는 기법이라고 할까? 뭐 그런것 같아요. 예를들면 STL은 철저히 디자인패턴에 입각해 설계된 것인데요. MFC의 CList는 단지 한곳 밖에 못쓰지만 STL은 iterator, algorithm, container 이렇게 3분야로 나누어 보다 훨씬 유연하게 사용할 수 있도록 만들었어요. 이런것을 generic programming이라고 하죠

김용욱_의 이미지

제가 제대로 이해했는지 모르겠기에 아랫분의 글에 실력있는 사람의 리플이 달리길 기대했습니다. :)

흠.. 전 functional language에서 따온게 아닐까 생각했는데 그렇게 볼수도 있는가 보네요. 하긴 저도 형 검사를 엄격히 하는 구조적 프로그램과의 반대적인 부분 밖에는 잘 모릅니다. :) (하긴야 형 검사를 덜 엄격히 해서 유연성을 가지는 것은 functional이나 oop나 마찮가진것 같기도 하네요.)

생각외로 많은 사람들의 리플이 없어서 아쉽기도 하고 국내에 자료가 별로 없어 아쉽습니다. 이런 주제를 제가 아닌 실력있는 분께서 이끌어 가셨으면 뭔가 더 좋은 논의가 있지 않았을까 싶은데요.
--
L.I.T

L.I.T

익명 사용자의 이미지

제너릭 플밍이 아직 생소한데...
누구 제너릭 플밍에 대해 개요를 설명해
주실 분 없나요?

익명 사용자의 이미지

축하해요, Generic program의 세계에 들어오신 것을 말이에요.

먼저 http://oopsla.snu.ac.kr/~sjjung/stl/gen_9895.htm
에 가보세요. 여기에는 Generic program에 대해 설명이 되어 있습니다.

저도 아직 초보이긴 하지만 간단하게 말합니다. 끝내줌다.

익명 사용자의 이미지

초보 주말 프로그래머 임다.
취미로 플밍을 하고 있슴다.
아직 배우는 중이지요.

지가 초보라서 그런지
GENERIC 플밍 이라는 단어는 생소 하내요.

검색엔지에 찾아 보니 자세한 설명은 찾아
보기 어렵고

링크사이트 내용으로보면
자바에 템플릿을 더한것 같기도 하고
자세한 내용은 잘모르겟군요.

템플릿은 사용하기는 좀 까다롭지만
융통성이 좋은것 같고

또한 연산자 오버로드 라든가
VBASIC 에서 사용하는 디폴트 파라미터
같은것도 GENERIC 플밍의 범주에 포함 되는것
이라면

GENERIC 은 플밍하는데 편리한 기능인것
같군요.

Togheter.

익명 사용자의 이미지

음.... 글세요.
중요한 것은 소프트웨어 공학이 발전하면,
발전할 수록
코딩한다는 것은 노가다 개념으로 발전할 것이고,
더더욱 중요시 되는 것은 기획, 계획, 관리등과
같은 일들이 주요 사항이 될 것 같네요.

그런데,
"개발기간하기 쉽고 유지보수가 용이한 언어일 수록,
퍼포먼스의 문제가 생기고, 퍼포먼스를 살리는 프로젝트 일수록 좀더 까다로운 언어가 사용되는 경향이 강하다"는 법칙을 깨어야 아주 성공적인 프로그래밍 언어가 될것 같습니다.

머, 쉬운 언어일 수록 개발회사들이 프로그래머보다
더 이익일 것 같습니다.

그러나 불행하게도 장기적으로 보면, 개발회사들은 과당 경쟁에 의해 이익을 많이 낼 수 없다는 것은 자명합니다.

그럼 다른일 해야죠.

어째거나 한국은 좀 너무 언어논쟁이 심화되지 않나 생각합니다.
그냥 요구사항과 환경에 맞게 언어를 선택해서 적용하면 되는 것이고, 새로운 언어가 개발되었다고 하면, 그걸 공개적으로 그 장점과 단점을 파악하여, 테스트 해보면 됩니다.

마치 최신 언어를 알면 무슨 뛰어난 프로그래머가 되는 것 처럼 보이는 것 같기도 합니다.

그런데 이글을 보니까 마케팅 차원에서 글을 쓴 것 같기도 하고....

김용욱_의 이미지

아직 20대 초의 학생입니다. :)

당연히 마케팅 차원의 글이 될수가 없지요. 최신 언어보다는 정말로 도움이 되는 것이라면 받아들이고 싶은 개인적인 욕심입니다. C++의 템플릿이라는 것은 저에게는 거의 환상적인 신세계였죠. 당연히 자료형에 맞추어서 프로그래밍해야 된다고 생각했으니깐요. 아직 저도 Generic Programming에 대해서 모릅니다. 아니 솔직히는 거의 모릅니다. 그게 정말로 도움이 되는 개념이라면 그것의 장, 단점들을 저보다 앞서간 사람들로 부터 듣고 저도 활용하고 다른분들도 활용했으면 좋을것이라고 생각해서 글을 적었습니다.
--
L.I.T

L.I.T

익명 사용자의 이미지

저는 개념이 잘 안 잡혀있는지라 다음과 같은 의문이 떠 오르는군요. 아시는 분은 대답좀 해주시기 바랍니다.

Generic Programming이란 무엇인가?

Generic Programming은 OOP나 procedure Programming방식들을 포용 해야만 하는가?

만일 두번째 문장의 대답이 '그렇다'이면 (only)객체지향 언어들은 제대로 Generic Programming을 지원할수 있는가?

많은 답변 바랍니다.

익명 사용자의 이미지

충분히 지원할수 있습니다. 단지 안하는것 뿐이죠.
본문의 링크를 가보니 JAVA의 Generic 인 Pizza 더군요.
무슨이유인지는 모르겠지만 $UN사는 가만히 있고
다른곳에서 활발히 진행중이군요.

JAVA의 표준에 대해서는 모호하게 알고 있어서 뭐라고 말은 못하겠지만,
Generic 버전으로 나온다면 좋겠죠.

그러나 자바만의(?) 특징이 없어진다고 반대하는 사람도 있을까요?
C++ 닮아간다고 싫어하는 사람있을지?...
JAVA가 나올당시에 C++의 단점을 비교해서 비교하더군요...
그래서 C#이 나오길 기다린 사람도 있을거구...
개인적으로는 C#에 Generic이 추가되었으면 하는 바람입니다.
C#은 C++을 수용했지만 JAVA는 그렇지 않은면이 더 강하니까요...

김용욱_의 이미지

Sun proposes to add generic types to Java

이 문구를 보니 Generic Programming의 요소들이 도입중인것 같습니다.
--
L.I.T

L.I.T

익명 사용자의 이미지

다다음 자바버젼인가에 Generic Programming이 도입되는 것으로 알고 있습니다.

전에 선에서 나온 자바 로드맵에 나와있었던 걸로...

익명 사용자의 이미지

다음 버전 (1.5 Tiger) 부터 정식으로 지원할 것으로 알고 있습니다.
물론 지금도 본문에 나와있는 방법등을 통해 사용할 수는 있습니다.

Generic 쪽은 잘 모르지만, 자바에서 받아들이는 쪽은 특히 Collection
과 관련해서 오히려 강하게 타이핑을 요구하게 만들기 위한 것입니다.

예전부터 (String) Iterater.next(); 같은 걸 쓰거나 Collection을
메소드의 리턴타입이나 인자로 정했을 때 무언가 찜찜한 기분이 들었
는데 이런 부분이 개선될 것 같습니다.

그럼~

김용욱_의 이미지

마지막이 이상하게 끝나버렸네요. 알고 있는 분들의 첨언을 부탁드립니다. 라고 적었었는데;; 오타입니다.
--
L.I.T

L.I.T

익명 사용자의 이미지

김 용욱 씨가 청해서 GJ 토론을 보러 왔습니다. 온김에 STL에 관한 토론도 지켜봤는 데 말이죠.

분위기가 토론을 하고 싶다는 생각이 들지 않도록 만드네요. 저 혼자 생각인지 모르겠습니다만 익명 토론자(특히 STL의 경우)가 너무 많아서 꼭 귀신끼리 얘기를 나누는 것 같다는 게 제 솔직한 느낌입니다. 자기 이름과 신분을 당당히 내 걸고, 잘 알든 모르든 터 놓고 대화를 나누지 않는다면, 이런 진지한 주제로 재미난 결론을 이끌어 내기는 힘드리라 봅니다.

-- 재우
P.S: Generic Programming은 이름을 따로 두어 구분하기 어색할 정도로 오래된 프로그래밍 기법이니 웹에서 수많은 자료를 구할 수 있고, 좋은 서적도 아주 많습니다. 어떤 주제를 잡아 진지하게 의견을 교환하는 게 아니라면 열심히 연구하시는 분들의 좋은 문서를 읽는 것만 못할 겁니다.

P.S2: 딱 한번 Mac OS X에 대한 제 견해를 써올린 적이 있는데, 너무 귀신들의 글이 많아서 잘 오지 않게 되네요.

익명 사용자의 이미지

제 이름은 김재우입니다. 로긴/패스워드를 잊어버렸네요. :)

김용욱_의 이미지

바쁘신 시간을 나누워서 와주신걸 감사합니다.

역시 대부분의 분들도 Generic Programming이란게 생소한것일까요?

가르켜주신 링크는 아직 못가봤었는데 오늘 일이 끝나는데로 방문해봐야겠습니다.

제가 실력이 없으니 논의를 이끌어가지 못하네요 :)
--
L.I.T

L.I.T

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.