카테고리 : 기타
2008/02/08   윈도우즈용 perl을 다운 받을 수 있는 사이트 [4]
2008/01/16   OOP의 3대 요소 [1]
2007/09/28   SQL에서의 ifnull(X,Y) 함수
윈도우즈용 perl을 다운 받을 수 있는 사이트
http://strawberryperl.com/
이름이 재미있내요. 학교에서 컴파일러를 배울 때, 바닐라(Vanilla)라는 것을 들었던 것 같은데. 그 때 그 바닐라의 의미는 아무것도 없는 것이라고 들었습니다. 아이스크림을 그냥 만들면 바닐라 맛이 된다고 그 교수님이 그랬는데, 정말인지 모르겠군요.

 어째든 perl 프로젝트중에 perl을 윈도우에서  동작하게 하는 바닐라라는 것이 있고, 여기에 여타 다른 패키지를 묶어 넣은 것이 저 strawberry입니다. 기존에는 ActivePerl을 사용해서 이용했다고 합니다. 이 stawberry의 특징은 비상업용이라는데 있습니다.
솔직히 저 말이 뭔지 모르겠어요. (오픈소스쪽은 라이센스가 너무 복잡해서 이해하기가 어려워요. )

 요즘 어떤 새로운 언어를 배울지 고민중인데 이 기회에 perl이나 배울까 합니다. (C#, 루비, perl 사이에서 고민이 조금 되내요. 웬지 다른 것보다 언어자체는 perl이 가장 쉬워보이내요. 기존에 학교에서 숙제 때문에 접해보기도 했고...)
by nahanmil | 2008/02/08 22:45 | 기타 | 트랙백 | 덧글(4)
OOP의 3대 요소
다시 생각해 보니  OOP를 3개의 요소로 정의할 수 있다는게 참으로 말이 된데는 것 같다.
===================================================================

오늘 갑자기 지하철 타고 집에 오는 길에 이것에 대해 고민을 해봤습니다. 요즘 회사에서 객체지향에 대해 공부하다 보니 여기에 대해서 조금씩 정리가 되기 시작했습니다. 이 느낌을 살려 이 때 정리해 두어야 겠다는 생각이 들어서 이 글을 씁니다.

 일반적으로 OOP의 3대 요소를 캡슐화(encapsulation ), 다형성(polymorphism ), 상속성(Inheritance)이라고 합니다.
 우선 캡슐화에 대해 설명해 보겠습니다. 사실 전 이 캡슐화라는게 OOP의 3대 요소에 들어 있다는데 의문입니다. 제 생각에는 캡슐화라는 용어보다 abstraction(추상화)이라는 용어가 더 절적하다고 생각합니다. (자바를 배운 사람이라면 abstraction 이라는 단어를 듣자마자 자바 키워드 abstract 생각날 것 입니다. 근데 그것만 연결하지 말고 생각해주기 바랍니다. 우리말 그대로 추상화라고만 생각해 주세요. )  
 추상이라는 단어 자체가 너무 추상적이라서 어렵게 느껴질 수도 있습니다. 우리가 보통 추상이라고 하면 그 자체의 본질에 대해 성찰하는 것을 의미합니다.  이 단어를 소프트웨어 공학에 적용해 본다면 겉으로 보이는 성질에 대해서만 성찰한다고 생각하면 됩니다. 더 쉽게 설명하자면 public 과 private를 분리해서 public 만 보겠다라고 생각하면 됩니다. 그리고 추상화의 도구를 캡슐화 라고 합니다.  캡슐화 의미 자체로는 private 인터페이스를 의미한다고 생각하면 됩니다. 이렇게 private 을 만들면 상대적으로 public 인터페이스는 줄어들게 됩니다. 그 결과 우리는 그 본질에 대해서 더 다가 갈 수 있습니다. 그래서 캡슐화를 추상화의 도구라고 생각할 수 있습니다.  

 다음은 상속에 대해서는 소스 재사용을 의미한다고 생각하면 됩니다. 상속 자체의 의미는 upcasting을 통한 다형성 이용이라는 의미도 있지만 여기서는 다형성을 3번째 요소로 보았기 때문에 소스 재사용을 의미합니다. 상속은 다른 말로 "Is a" 또는 "is a(an)" abstraction 이라고도 합니다. 이 개념에 대비되는 개념으로 "has a" 라는 용어가 있는데, 정식 용어는 아니고 더 정확한 용어로는 composition이라고 합니다.

 마지막으로 다형성은 C++의 virtual 키워드 연결됩니다. (자바에서는 자동으로 virtual 이기 때문에 이 개념이 기본적으로 들어 있습니다. 그러나 이 동작은 시간이 걸리는 연산인데 C++은 "no use, no pay  라는 개념이 있기 때문에 사용을 원치 않을 때 제거할 수 있습니다. )  또 interface 상속이라는 말도 이 다형성에 대한 개념입니다. 인터페이스만 맞으면 어떤 객체의 method든지 가리지 않고 사용하겠다는 개념입니다. 다시말해 method 이름과 형식이 같고 어떤 조건(자바에서 인터페이스만 상속하거나 C++이나 자바에서 parent class 가 그 method의 인터페이스를 정의하고 있을 때)을 만족하면 그 객체에 맞는 method를 알아서 부르겠다는 의미 입니다.
by nahanmil | 2008/01/16 23:20 | 기타 | 트랙백 | 덧글(1)
SQL에서의 ifnull(X,Y) 함수
 지금 졸업 작품 때문에 프로그램을 작성중이다. SQLite를 DB로 사용하는데, 검색에 맞지 않을 경우 아무 결과를 리턴하지 않아서 골치를 썩고 있었다. 그냥 -1 이라도 리턴해 주면 좋을텐데, 그냥 가마니 있는 것이다. 그래서 어제부터 이것에 대해 찾아보았다.. 해결책은 ifnull(X,Y) 이라는 함수였다.

 이 함수는 MySQL 에서도 동일하게 작동하는 것으로 보인다. (MSSQL에서는 ISNULL(X,Y) 를 대신 사용해야 하고, 오라클에서는 T NVL(X,Y) 라는 함수가 동일한 작동을 하는 것으로 보인다. )
 어째든 이 함수는   X부터 시작해서 Null 이 아닌 인수를 리턴한다. 만약,  X, Y 모두 Null 이면 Null 을 리턴한다.

 말이 어려울 수 있으니 예를 들겠다.
 ifnull(1,2)  는 가장 앞에 있는 1을 리턴하고 ifnull(null, 2)는 null 이 아닌 2를 리턴하고 ifnull(null, null)은 null을 리턴한다.
ifnull 은 2개의 인수만 갖지만 ccoalesce(X,Y,...) 라는 함수는 여러 인수를 가질 수 있다. 동작은 ifnull 함수와 유사하다.

by nahanmil | 2007/09/28 00:43 | 기타 | 트랙백
<< 이전 다음 >>