anti-pattern이란?

prether의 이미지

Design pattern이라는 용어는 꽤 들어봤어도 anti-pattern이라는 용어는 생경한 분들이 많을 겁니다. Wikipedia에 다음과 같이 정의되어 있네요.

"소프트웨어 공학에서, 안티-패턴이란 흔히 사용되기도 하는 패턴이지만 실무적으로는 비효율적인 그리고/또는 생산적이지 못한 패턴을 말한다."
(원문 URL: http://en.wikipedia.org/wiki/Anti-pattern)

잘 알려진 anti-pattern중 흥미가 가는 것 몇 개를 소개합니다.

1. God object: 하나의 클래스에 너무 많은 필드와 함수를 넣어서 너무 많은 것을 알고 너무 많은 것을 할 줄 아는 객체. 전지 전능한 object라고 비꼬는 의미에서 그러한 이름이 붙은 것으로 보임.

2. Spaghetti code: 이해하기 힘든 구조를 가진 프로그램. 예를 들어서, goto 가 남발한 code. code가 스파게티 면발같이 비비 꼬였다고 해서 붙여진 경멸적인 용어.

3. Hard code: 프로그램 소스 코드에 직접 설정 값이나 입력 값이 삽입된 code. 값들이 마치 hardware circuit처럼 고정되어 변경되지 않는다는 것에 유래된 용어.

4. Software bloat: 프로그램 새 버전이 나올 때마다 사용자에게 필요 없는 기능이 추가되거나 점점 더 많은 시스템 자원을 사용하는 경향을 이르는 용어. bloat는 부풀다는 뜻.

5. Database-as-IPC: database를 IPC(Inter-Process Communication)을 위한 message queue로 사용하는 것. 더 적절한 mechanism이 있음에도 불구하고

* wikipedia에서 CCL 라이센스를 따르라네요.

Forums: 
익명 사용자의 이미지

영어권에서 살고있는 저도, 저렇게 텍스트로 줄창 쭈욱 늘어놓기만하면 읽기조차 싫습니다.
한국인 웹사이트에 영어 원문을 quote 할 때는 약간이라도 번역까지는 아니더라도
간략한 소개정도는 한글로 씁시다.

더군다나 **강좌**게시판에 쓴다는것이
위키에서 그냥 긁어다 붙여 놓고

"Design pattern이라는 용어는 꽤 들어봤어도 anti-pattern이라는 용어는 생경한 분들이 많을 겁니다. "

"잘 알려진 anti-patterns으로는 다음과 같은 것들이 있다네요."

위 두문장 붙이고 끝?

그럼, 나도 한번..........

한국어 위키에서 그냥 긁어다가 강좌게시판에 붙여넣으면 욕먹을테니( 이게 강좌냐? )
영문게시판에서 만만한거 문서 몇개 골라다가

그냥 kldp의 강좌게시판에 copy&paste ㄱㄱ

뭐...한글문장 한,두개 붙여주는 센스~

"XXX 가 아직은 생소한 분들도 있을겁니다."
"위키페이지에 따르면 다음과 같다네요"

prether의 이미지

쓰고나서 보니 너무 성의 없어 보이네요. 수정하겠습니다.

/***************************************
Being the one is just like being in love.
***************************************/

권순선의 이미지

맨 처음에 올린 글이 어땠는지는 모르겠지만 비판이 과하군요. 답글을 쓰신 분이 그럼 좀 좋은 강좌를 한번 올려봐 주시죠?

영문이건 국문이건 간에 어쨌거나 뭐라도 올려주시는 분들이 글쓰신 분처럼 스스로 먼저 나누는 것은 없이 다른 사람을 평가하고 비판하기만 할 줄 아는 분들보다는 이 커뮤니티에 훨씬 더 많은 기여를 하는 분들입니다.

그런 분들이 계속해서 잘 활동할 수 있도록 용기를 북돋아 주고 서로 격려하고 작은 것에도 감사하는 그런 곳이 되었으면 합니다.

익명_사용자의 이미지

위의 익명 사용자입니다만, 자주는 아니더라도, 한달에 4~5번정도는 프밍게시판에 답변을 주로 쓰고,
상대적으로 자유게시판은 댓글은 자주 안달았습니다만,

감사하게도 IP블럭해주셔서, kldp 오는 시간을 줄이고 개인 오픈소스 프로젝트에 조금 더 시간을 할애하고 있습니다.

"뭐라도 올려주시는 분들이 글쓰신 분처럼 스스로 먼저 나누는 것은 없이 다른 사람을 평가하고 비판하기만 할 줄 아는 분들보다는 이 커뮤니티에 훨씬 더 많은 기여를 하는 분들입니다."

kldp에서 많이 나누지는 않더라도, patch도 올리고, 리포팅도 하면서 나눕니다.
본인의 개인 사이트에서 IP를 블럭하는거시야 권순선씨의 권한이라 할 수 있지만,
근거없이 타인을 넘겨집고 비방하기보다는

"... 글쓰신 분처럼 ..."
이런 문구는 빼고, 일반적인 비판을 하시는게 나으리라 생각합니다.

익명 사용자의 이미지

음... 해당 글이 과연 "강좌" 라는 게시판에 적합한 내용인지 의문이 드는군요... 흠

익명 사용자의 이미지

한두줄~10여줄 => 팁.
100여줄 => 고찰(?)
그 이상 => 강좌
정도가 어울릴 것 같고요. 블로그를 한번 신청해보시는 것도 좋을 것 같습니다 ^^
물론 뭐 짧다고 강좌가 아닐 이유는 없을것 같지만요.

옛날의 COBOL 혹은 FORTRAN에서 goto는 거의 밥먹듯이 사용되었기때문에 이게 상당히 코드를 난해하게 만드는 원인이되었지만,
요새만들어진 코드는 왠만해서는 goto보기 힘듭니다만, 어쨌거나...
다양한 요인이 스파게티코드를 만드는 것 같습니다.

익명 사용자의 이미지

위 까지는 이러이러 하니까 짜기 힘들더라... 라는 개념이지만
아래는 본격적 버전입니다
http://freeworld.thc.org/root/phun/unmaintain.html?repost=forPosterity

익명 사용자의 이미지

최고입니다. ^^

sangheon의 이미지

3년 전쯤에 IPC가 제대로 되지 않아 응급처치로 DB를 큐로 썼었는데 이 글을 보니 참 잘 못 된 선택이었던 것 같습니다.

--

Minimalist Programmer

snowall의 이미지

제가 주로 쓰는 패턴이군요. -_-;

스파게티는 느끼한걸 좋아합니다.

피할 수 있을때 즐겨라! http://melotopia.net/b

익명 사용자의 이미지

내용은 유익하고 좋기만 하구만...
댓글들이 왜 이모양인가요...

세상에 나 빼고 모든게 다 스승이지요.
강좌랑은 거리가 멀다거나 성의가 없다느니...

내가 읽고 배우면 강좌고
내가 성의있게 읽으면 발로써도 성의있는거 아닌가요?

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.