'컴퓨터/프로그래밍'에 해당되는 글 37건

  1. 2009.02.20 간단한 웹 서버 제작에 들어가기 앞서서
  2. 2009.02.16 간단한 웹 서버 제작 계획중?!
  3. 2008.09.30 HTML의 table 테그에 관해서 (4)
  4. 2008.09.08 Chrome 때문에 일거리 늘어나버렸네 -_-;;
  5. 2008.05.27 자바스크립트로 페이지 이동 팁 (2)
  6. 2007.11.14 Windows와, Linux에서 Java의 속도차이? (2)
  7. 2007.10.04 한번쯤 짜 보고 싶은 프로그램... (2)
  8. 2007.09.10 졸업을 앞둔 대학생 입장에서 바라본 좋은 프로그래머가 되려면 열심히 배워야 하는 중고등학교 교과 과목 (6)
  9. 2007.07.28 객체지향적인 프로그래밍이란 것은 무엇일까? (4)
  10. 2007.05.06 스레드를 이용한 병렬처리 프로그래밍 – 2

간단한 웹 서버 제작에 들어가기 앞서서

이전 글 (간단한 웹 서버 제작 계획중?!)에 이어서...

지금 또 다른 고민이 생겼습니다. 그것은
자바의 Servlet 인터페이스들을 상속 받아 작성하느냐 마느냐인데...
아무래도 Servlet 인터페이스들을 상속받아 만들면 JSP까지는 아니더라도 Servlet을 사용 가능하게 됩니다.(우와, 우와~)
그런데 아무래도 본래의 취지와는 많이 다르게 복잡해질 가능성이 높더군요 -ㅅ-;;;
상속받는걸 포기하고 모두 제가 만들면 아무래도 좀 난이도가 많이 낮아진 상태에서 만들 가능성이 높긴 한데...

음... 고민입니다 -ㅅ-;;
Trackback 0 Comment 0

간단한 웹 서버 제작 계획중?!

몇일 전(이래봤자 14일), 남들 초콜릿 나눠주고 받던날 집에서 조용히 프로그램을 하나 짜고 있었습니다.(어이...)
브라우저에서 서버쪽으로 데이터를 요청했을 시 몇가지 정보를 모아서 서버측에 전송을 합니다. 그래서, 이 정보가 일할 때 필요하기도 하고, 보고 싶기도 해서 요청한 브라우저로 다시 보내는 프로그램을 짜고 있었습니다.
그리고, 다 완성~ 했는데...

잠시 고민하니깐 조금만 더 손을 보면 웹 서버 프로그램 하나 만들수도 있겠더군요 -ㅅ-;;;
그래서 심심풀이로 아주 간단한 웹서버 프로그램을 하나 만들 예정입니다.
사용할 언어로는, 늘 그랬듯이 Java 6.0
구현 범위는, 데이터 형에 대한 Content-Type 분류 지원, 파일 업로딩, 끝... 응?
뭐, 서버 스크립트 지원이나, 버추얼 호스트 이런건 간단한 부류에서 한참 벗어난 기능이고~
언제까지나 초보자도 소스 봐도 "어? 별거 없네?" 라고 할 정도로 간단한것을 목표로 하고 있습니다.

그리고 다 만들었을 시 소스를 공개 할지는... 잘 모르겠습니다 ㅎㅎ 허접하게 만든 코드를 올려도 될지 망설여 지기도 하고 보여주기 싫기도 하고 해서 결과는 나중에 봐서 ^^;

그럼, 앞으로 나올 프로그램 많이 기대해 주세요 ^O^
Trackback 0 Comment 0

HTML의 table 테그에 관해서

대부분의 사람들이 HTML 코드를 작성하다 table속성에 항상 삽입하는 값 3가지를 이야기 해 보자면
border, cellpadding, cellspacing 이렇게 3가지가 될 것이다. 다음과 같이

<table border="0" cellpadding="0" cellspacing="0">


그런데, 요즘에 CSS로 저런 속성들을 정해주는 것이 더 깔끔해서 이리 저리 알아본 결과 CSS에 다음과 같은 코드들을 추가하면 위에 것과 동일하다는 것을 알게 되었다.

table{

       border-spacing: 0px;

       border-collapse: collapse;

}

 

td, th{

       padding: 0px;

}


XHTML 1.0에서 확인 해 봤는데, HTML 4.01이하는 테스트… 하기 귀찮아서 안했지만 -_-;;
뭐, 새로 만드는 사이트들이라면 대부분 XHTML로 작성할 테니 큰 문제 없을 것 같다 ㅎㅎ

Trackback 0 Comment 4
  1. 얼뿌 2008.10.08 23:19 address edit & del reply

    http://trio.co.kr/
    요기 HTML, JavaScript, CSS 배우기 좋다.
    http://trio.co.kr/webrefer/csex/cxexp.html
    요기서 예제 봐봐

    여러 스타일 만들어놓고 class="이름" 요거만 바꿔서 정해줘도 된다네 ^^
    스크립트로 ID.style.xxxxx = "값"으로 동적으로 수정도 가능하고...

    • Favicon of https://blog.myhyuny.com BlogIcon 화현 2008.10.09 09:43 신고 address edit & del

      ... 설마 내가 그것도 모를까 ㄱ-
      너무해 ㅠㅠ

      근데 위 사이트 괜찮네 ㅎㅎ 나중에 w3c 문서나 봐봐야겠다 ㅎ

    • 얼뿌 2008.10.10 00:18 address edit & del

      글에서 보이는건 그렇잖아
      웹에는 관심이 없었는줄 알고...
      내가 성급했다 쏘리~ ^^;

      풀뿌리같이 당장 보이는 관심가는 것만 배웠던 난
      내 수준의 글이라 반가워서 그만 --a...

    • Favicon of https://blog.myhyuny.com BlogIcon 화현 2008.10.11 22:16 신고 address edit & del

      ㅋㅋㅋ
      아직 C언어 하는건가? ㅎㅎ

Chrome 때문에 일거리 늘어나버렸네 -_-;;

웹 개발을 하다 보면 접속한 사람이 어떤 브라우저로 접속하는지를 조사해서 DB에 넣어둘 때가 있습니다.
물론 Google의 Analytics라던가, 다음의 Web Inside같은걸 사용하면 편하긴 한데...
카운터를 달다 보니 괜시리 넣고 싶달까요? ㅎㅎ
뭐 어째튼, 그래서 브라우저의 종류와 중복 카운터 방지용으로 IP까지 DB에 저장하는 프로그램을 짜서 홈페이지에 넣어뒀었습니다. 그런데~
Google의 Chrome이 출시가 된 지라 이리 저리 테스트 하다가 카운터 테스트 까지 해 보니...
어라?
로그에 Chrome이 나오질 않네요 -_-??
그래서 이리 저리 조사해 본 결과...

그 전에
간단하게 어떻게 접속자의 브라우저 종류를 알 수 있는지 알려 드리자면.
브라우저에서 서버로 페이지를 요청할 때 서버쪽으로 보내는 값 중에 하나가 Agent라는것이 있습니다. 이것을 이용하면 브라우저의 종류, 운영체제, 브라우저 이름, 버전 등을 알 수 있는데요.
우선 Mozilla 4.0 기반의 Internet Explorer 7.0을 보면
사용자 삽입 이미지
위와같이 Agent값이 나옵니다. 아래의 Type과, OS, Browser는 그 안의 데이터를 추출한 결과물이죠 ㅎㅎ
다음으로 FireFox 3.0

사용자 삽입 이미지
IE와는 다르게 맨 뒤에 나옵니다.

다음으로 Safari
사용자 삽입 이미지
네, FF와 마찬가지로 맨 뒤에 나오네요 ㅎㅎ

그래서 IE와, Opera를 제외하고는(제외 하는 이유는 나중에) 맨 마지막에 브라우저의 이름이 나와서 맨 마지막에 있는 /가 들어가는 문자를 브라우저 이름으로 정했는데...
오늘의 주인공 Chrome은
사용자 삽입 이미지
맨 뒤에 Safari가 붙더군요 -_-;;;;
사실 브라우저의 이름을 정하는 순서가
맨 앞의 글자 ->괄호 안의 글자 중 브라우저 -> 맨뒤의 / 들어간 문자
순이라 IE만 신경쓰면 거의 모든 브라우저를 소화할  수 있었는데 이놈의 Chrome때문에 또다시 예외처리를 넣어줘야할 판입니다 ㅠㅠ

아놔

그래서 지금 Chrome을 예외처리 해 줘서 수집을 해 줄지 말지 고민중입니다 -_-
앞으로 하는거 봐서 맘에 들면 해 주는거고 맘에 안들면...
Safari로 처리되게끔 하는 수 밖에요 ㅋㅋㅋ

참고로 맨 앞의 문자를 브라우저 이름으로 정하는 첫번째 순서로 넣는 이유는
사용자 삽입 이미지
Opera 때문이였습니다 ㅎㅎ
Trackback 0 Comment 0

자바스크립트로 페이지 이동 팁

보통 게시판에서 게시물을 지우거나, 댓글을 지울 때 자바스크립트 창을 띄워 “림하 지울꺼삼?”과 같은 간단한 맨트로 지울 것인지 묻는 경우가 많습니다.
이것을 자바 스크립트 코드로 표현하면

<script type="text/javascript" language="javascript">

<!--

function del(num){

              if(confirm('삭제 하시겠습니까?'))

                    location.href = "delete.jsp?id=" + num;

}

-->

</script>

<a href="#" onclick="del(1);">삭제</a>

이런 식으로 하면 되는데… 문제는 저 함수의 재사용 성이라던가, #기호 사용에 따른 화면 위치 이동 등… 여러 자잘한 문제가 남아 있습니다. (서버 스크립트 문제 중 대표적으로 PHP에서는 HTTP_REFERER가 기록이 되지 않더군요)
그래서 이리 저리 고민하다가 혹시? 하는 생각에 이렇게 하니 더 간단해 지고 위의 문제들이 모두 해결되더군요 ^^

<script type="text/javascript" language="javascript">

<!--

function del(){

              return confirm('삭제 하시겠습니까?');

}

-->

</script>

<a href="delete.jsp?id=1" onclick="return del();">

어때요? 참 쉽죠? ^O^
submit을 할 때 onsubmit=”return function();” 이런 식으로 하면 함수의 리턴 결과에 따라 submit이 작동되는 여부가 결정되던 것이 기억나 적용하니 매우 만족스럽게 작동 하더군요 ^^
여튼, 위 코드에 문제가 있으면 댓글로 알려주세요 ㅎㅎ

덧) 위 코드는 Internet Explorer 7.0, Firefox 2.0, Opera 9.27, Safari 3.1 에서 모두 테스트 해봤습니다. 안심하고 사용하세요 ^^

Trackback 0 Comment 2
  1. kaspy 2012.04.15 02:25 address edit & del reply

    잘참고합니다^^!!

  2. 2012.07.24 17:24 address edit & del reply

    비밀댓글입니다

Windows와, Linux에서 Java의 속도차이?

결국 이렇쿵 저러쿵 해서 제가 짠 프로그램의 테스트용으로 우분투 i386버전을 깔았습니다. 물론 그래픽 드라이버는 안잡고요 ㅎㅎ

그래서 JDK & JRE 1.6과, eclipse를 설치를 해서 돌려보는데 이게 왠걸? 너무 너무 부드럽게 잘 돌아가는 것입니다. 마치 윈도우에서 Visual Studio .NET 돌리는 느낌?
하도 이상해서 예전에 제가 짰던 홀수 마방진 프로그램으로(참고로 J2SE 1.4기준으로 바꿨습니다.) 테스트를 하는데

사용자 삽입 이미지

162ms... ㄷㄷㄷㄷㄷㄷㄷ


참고로 예전 글에서 x64의 수행 결과가 187ms가 나왔었는데 32비트 리눅스가 훨씬 빠르네요 -_-;;
프로그램을 1.4에서 돌아가게 컴파일 했겠다, JRE 버전도 올랐겠다, 다시 한번 윈도우에서 테스트를 하는데…

사용자 삽입 이미지

32bit 버전 : 189ms


사용자 삽입 이미지

64bit 버전 : 187ms ㄱ-


-_-;;;;
어떻게 64비트는 더 느려지고 32비트는 더 빨라졌냐… ㄱ-
뭐, 어째튼 역시 아무리 멀티 플랫폼의 자바라고 하더라도 유닉스&리눅스 환경이 더 잘 맞나 봅니다. 이 프로그램을 솔라리스에서 돌려보고 싶어지네요 ㅎㅎ

참고로 테스트 한 컴파일러 버전도 같이 공개합니다~~.

사용자 삽입 이미지

Ubuntu 7.10 + JRE 1.6.0_03 32bit

사용자 삽입 이미지

Windows Vista + JRE 1.6.0_03 32bit

사용자 삽입 이미지

Windows Vista + JRE 1.6.0_03 64bit


그래픽만 해결 되면 개발은 리눅스에서 해야지 ㅎㅎ
Trackback 0 Comment 2
  1. 틀렸습니다 2007.11.19 19:34 address edit & del reply

    vista 64bit 에는 64bit 자바까셔야죠 (x86)에 깔린걸 보니 32bit 자바 까셨네요^^
    64bit 자바깔고 다시해보세요~

    • Favicon of http://www.myhyuny.net BlogIcon 화현 2007.11.20 01:27 address edit & del

      본문을 제대로 안보셨군요. 틀린건 그쪽입니다.

한번쯤 짜 보고 싶은 프로그램...

요즘들어 가끔 생각하는 것 중에 몇몇 프로그램을 짜 보고 싶다는 생각이 종종 듭니다.
예들들면~

Java 컬렉션들을 C++로 컨버팅 한다던가, (-_-;;)
XML을 이용해서 간단한 DBMS를 만든다던가, (ㄷㄷㄷ)
테더툴스를 JSP로 컨버팅 하기라던가 (완전 돌았구나... ㄷㄷ)

뭐, 대충 이런것들 입니다. ㅎㅎ
그런데 진짜로 할지는 모르겠습니다. -_-;
Trackback 1 Comment 2
  1. Favicon of http://signpen.net/blog BlogIcon 싸인펜 2007.10.04 22:29 address edit & del reply

    '태터툴즈를 JSP로 컨버팅하기' 이건 저도 하고싶어요~~

    얼마전에 제 블로그에도 부끄러워서 맨 밑에 짧막하게 적었었는데요.
    좀 실력 있으신 분들이 주축이 되어서 나서주시면 열심히 참여할 의사가 있거든요.

    화현님!! 하시게 되면 저도 꼭 불러주세요~

    구체적인 것들은 생각해보지 않았지만, JSP버전 태터툴즈.. 매력있을 것 같아요~

    • Favicon of http://www.myhyuny.net BlogIcon 화현 2007.10.05 00:32 address edit & del

      허허, 제가 가장 망설여 지는게 테더툴스를 JSP로 컨버팅 입니다 ㅠ.ㅠ
      아무래도 절차지향에 가까운 PHP를 객체지향인 JSP로 컨버팅을 하는 작업이라, 잘못하면 데이터베이스 구조를 제외하고 전부 다시 만들어야 할 가능성이 높을것 같거든요 ㅠ.ㅠ
      음, 그리고, 테더툴스 업데이트에 대해 대처도 고민거리고... 하여간 어떻게 보면 가장 어려운 작업이라 쉽게 손을 못대겠습니다 ㅠ.ㅠ

졸업을 앞둔 대학생 입장에서 바라본 좋은 프로그래머가 되려면 열심히 배워야 하는 중고등학교 교과 과목

아따, 제목 길다 ㄱ-
어째튼...

다들 아실지 모르겠지만, 프로그래밍... 정확히 개발자, 그 이상을 목표로 두고 공부를 하고 있는 저 입니다만, 제 입장에서 본 중요한 교과과목을 꼽으라면... 아무리 생각해도 이것인것 같습니다.

모든 과목

... 농담 아닙니다.
혹시나 간추려 달라고 하신다면... 딱 세가지만 꼽아보죠

국어, 영어, 수학

웬 뜸금없이 국영수냐? 라고 하실지 모르겠지만, 제 입장에서 보면 맞는것 같습니다.
왜냐하면~

국어
혼자 프로그래밍 하신다면 뭐 할 말은 없지만, 아마 대부분의 사람들은 회사에 들어가게 되서 사람들과 같이 개발을 하게 될것입니다. 그러면 문제가 되는것이 바로 대화와, 문서입니다.
아무리 실력이 있어도 상대방이 요구하는것을 잘못 이해하거나 대화가 안통하면 말짱 꽝이죠 -_-;; 그리고 자기가 작업한 것에 대해  주석을 달고 문서화를 시켜야 하는데 글을 잘못써서 이해가 안되면 뭔가 난감하죠 -_-;;; 어떨 경우에는 자기가 써 놓고서 자기가 못알아 보는 경우도 많습니다. (대표적인게 바로 저...) 국어공부 열심히 하세요

영어
뭐, 다른곳에서도 귀아프게 들으셨을지도 모르겠지만. 영어 중요합니다. 뭐, 외국사람과 대화할 정도의 실력을 갖추라는 이야기는 아닙니다. 단지
영어 책이나 영문 사이트 읽고 해석하고 쓸 정도만 되면 됩니다...
... 그럼 다 할줄 아는거잖아! ㅠ.ㅠ
왜냐~ 한국에 있는 모든 번역서들은 기초서적입니다 -_-;; 중급 이상 올라가려면 원서나 다른 나라 번역서를 봐야 한다는 이야기인데, 뭐, 그건 그렇고
그리고 어떠한 문제가 발생을 하게 되면 보통 인터넷을 찾아보죠? 그런데. 온갖 쓰레기 답변과 깊이도 없는 그런 답변만 올라와 있는 네이버를 뒤지시겠습니까? 아니죠? 자자, 영어도 공부하세요
(그런 의미에서 영문 사이트에서 자료를 잘 찾아내시는 싸인펜님 참 부러워요 ㅠ.ㅠ)

수학
이 부분에서 의외로 많은 사람들이 의아해 할 지도 모르는데... 제가 프로그래밍을 처음에 어떻게 접근했는지 알려드리면 해답을 얻을 수 있을지 모르겠네요.
제가 고등학교때부터 프로그래밍이라는것을 접하게 됬는데 그때 잘 나가다 변수에 관해 들어갈 때 일이였습니다.

i = 1

뭐, 프로그래밍을 공부하신 분이라면 i라는 변수에 1을 대입한다는 의미로 받아들이시겠지만 저는 이것을

i는 1과 같다

로 해석했습니다. -_-;;;
네, 다분히 수학적이죠? (그래서 저는 그 때 당시 i 보다 x나, y를 더 즐겨 썼었습니다 ㅎㅎ) 그럼 다음과 같은 경우에 조금 난감하게 되는데요

i = i + 1

프로그래밍 공부하신 분이라면 i라는 변수에 들어있는 값을 1과 더해서 다시 i에 넣어라... 라고 읽으시겠지만 그 때 저는

i는 이전의 i에 1을 더한 값과 같다

뭐, 어떻게보면 비슷 합니다만, 뭔가 미묘하게 다르죠?
하여튼 이런 사고로 시작한 프로그래밍이 나중에 큰 벽이 되버리긴 했지만(객체지향 문제에서), 어째튼 중요한것은 컴퓨터는 수학을 기초로 만들었기 때문에 수학이나 프로그래밍이나 비슷하다는 겁니다.

또 다른 예로 제 동생이야기인데
고등학교때 부터 수학을 좀 잘 한다 싶더니 대학교를 전자과 쪽을 들어가 4학년이 되서 C언어를 듣게 되었습니다. 그래서 저한테 물으러 왔었는데 참 재미있는게
분명 배운지 2주밖에 안됬는데 제가 짠 프로그램을 보고 분석하고 이해한다는 것이죠 -_-;;;;
그래서 제가 어떻게 그걸 보고 해석하냐고 물으니까 하는 말이...

"수학이랑 똑같잖아"

음, 물론 객체지향으로 넘어가게 되면 위 말은 맞는 말이 아니게 되지만(그렇다고 틀린말도 아님) 어째튼 수학을 잘 하게 되면 프로그래밍에 접근하기 쉬워집니다. 특히  게임 프로그래밍이나 3D프로그래밍을 하게 되면 필수입니다. (덤으로 저는 웹 페이지 하나 만들더라도 수학은 아니더라도 산수 공식으로 꽉 채웁니다. 왜냐고요? 결국 각 위치나 배열을 정하는것은 숫자거든요)

결론은... 수학도 하세요 ^^

말이 좀 길어졌습니다. 제가  중 고등학생 이상을 대상으로, 그리고 처음 접하는 사람들을 위주로 쓰긴 했어도 요점은 "학교 공부 열심히 하세요"입니다. 프로그래밍을 하다 보면 의외로 역사의 흐름과, 생물학적 관계도, 끈기 있는 체력, 과학에서 나오는 원리, 그밖에 여러가지가 필요하게 됩니다. 그리고 가끔 손수 그림을 그리기도 하고, 음악도 선정합니다 -_-;;

혹시 대학생이시라면 교양 과목으로 철학이나 경영학을 들어두세요 도움 됩니다.

뭐, 어째튼 아직 학생 입장에서 생각한 이야기니까, 너무 얼매이지 마세요 하지만 위에서 말한 과목들이 다른 직장에서 역시 생각외로 필요하게 된다는 것을 알아두세요 ^^

아, 혹시 제가 개발자로 5년 이상 일하고 이 블로그를 계속하고 있다면 개발 X년차 로 해서 또 올리죠 ㅎㅎ

Trackback 0 Comment 6
  1. Favicon of http://stdio.tistory.com BlogIcon 머리 2007.09.10 01:35 address edit & del reply

    글 잘 읽고 갑니다. ^^

    정말 공부중이지만 뼈저리게 느끼고 있는 것들이네요.. 국어.. 주석도 주석이지만 나중에 매뉴얼 만들때나 리포트 쓸때도 많이 필요하지요.

    수학같은경우도 지금 제가 대학 1학년생이라 아직 수학을 많이 접하진 않고 있지만 나름 프로그래밍 해보면서(프로그래밍 한지는 한 10년 되었습니다.) 엄청나게 많이 쓰고 있는 분야지요. 특히 그래픽 작업할때 행렬.. 무지 많이 쓰이더군요.

    영어도 원서를 접하게 되면서 공부해야겠단 생각이 참 많이 들어요. 구글링 하면서도 외국 문서들이 참 좋은게 많은데 그럴때 영어 안되면 좀 글쵸.

    암튼 글 잘 보고 갑니다 ^^

    • Favicon of http://www.myhyuny.net BlogIcon 화현 2007.09.10 23:55 address edit & del

      에고, 잘 보셨다니 다행이네요 ^^

  2. Favicon of http://rukxer.net/ BlogIcon Rukxer 2007.09.10 16:30 address edit & del reply

    시간이 지날 수록 여러가지를 관심 가졌다는 게 잘 한 일이라고 느껴지더군. 국영수만이 아니라 되도록 많은 걸 접하면 더 좋지만, 공부할 시간까지 빼면서 접할 수는 없는 노릇이니 적당히....-___-;;;

    • Favicon of http://www.myhyuny.net BlogIcon 화현 2007.09.10 23:57 address edit & del

      역시 많은 경험이 중요한거군요

  3. Favicon of http://mydb.tistory.com BlogIcon 파도소리 2007.09.13 10:08 address edit & del reply

    국영수보다도 무엇보다 체육이 중요함니다! ㅋ


    뭐니뭐니해도 건강이 최고
    더구나 야간작업이 많은 프로그래머라면 당연히 체력이 최고

    • Favicon of http://www.myhyuny.net BlogIcon 화현 2007.09.14 00:24 address edit & del

      그건 정상적인 환경이 아니잖아!
      ㅋㅋㅋ

객체지향적인 프로그래밍이란 것은 무엇일까?

고등학교시절 C++을 알게 되면서 객체지향 프로그래밍(Object Oriented Programming, 줄여서 OOP) 에 대해 궁금증을 가지게 되었습니다.

도대체 이런 게 왜 필요하지? -_-??

일의 순서에 따라 작업을 처리하는 절차 지향적 프로그래밍 언어를 공부했던 저는 그래도 C의 신 버전이라는 착각 속에 공부를 시작했지만, 이놈에 Class에서 막히는 것이었습니다.

막힌 이유는 바로

대체 이걸 왜 써?

머리에 완벽히 절차지향으로 고정이 되어 버려서 필요성을 못 느꼈고, 게다가 엄청나게 늘어나 버리는 코딩 량의 압박에 좌절했습니다. (얼마나 늘어나는지 앞으로 보게 될 것 입니다. ㅎㅎ)

어째튼 그 뒤로 Rukxer형과 함께 일했을 때, HTML의 폼의 구조와 이것을 접근하는 JavaScript의 방식을 보고 조금씩 객체지향의 구조와 필요성을 알게 모르게 느껴가고 있었고, 대학에 들어가 Java를 배우니 왜 이것이 필요한지를 느끼게 되었고, 이제 나름대로 사용할 수 있게 되었습니다. (물론 잘 하는 건 아니지만 ^^;)

뭐 객체지향에 대해 설명하라면 제가 직접 하는 것 보다 책에 써 있는 것이 더 잘 표현되어있기 때문에 생략하고~

그럼 구체적으로 어떤 식으로 작성해야 객체지향 프로그래밍이 될까요? 들어가기 전에 절차지향적으로 작성된 프로그램의 예제를 가지고 설명해 보겠습니다.

Triangle.c

제가 자주 써먹는 (아주 우려 먹어라 -_-;;) 삼각형 예제를 가장 널리 쓰이고 있는 절차지향 언어인 C로 작성했습니다. 정말 간단하죠? 그럼 이것을 객체 지향 언어로 구현하면 어떻게 될까요?

Triangle.cpp

이렇게 될까요? 아니죠~ 객체지향 언어 가지고 절차지향으로 작성한 것 밖에 안됩니다. -_-+
그래서~ 준비했습니다. 객체지향 언어인 자바로 작하였고, 객체지향적으로 설계한 삼각형입니다.

.java

… 쿨럭!! -_-;;

C로 작성한 삼각형이 24라인으로 콘솔 모드로도 한 화면에 다 표시할 수 있는 것에 비해 자바로 작성한 삼각형은 모두 다 합쳐 무려 192라인으로 무려 8배나 되는 라인 수를 자랑합니다 -_-;;

그럼 간단히 해설에 들어가면
삼각형의 정의는 [삼각형(三角形)은 세 점을 선분으로 이어 만든 도형이다. 삼각형의 세 점을 꼭지점이라 하고, 선분을 변이라고 한다.] 라고 되어있습니다. (출처 : 위키)
간단히 이야기해 3개의 점에 선이 달린 것이 삼각형이랍니다 -_-;;

그런데 중간에 도형이라는 단어가 눈에 뜨이죠? 그래서 찾아봤습니다.
도형의 정의는 [기하학에서 도형(圖形)은 점•선•면의 집합이다.] (출처 : 위키)
결국은 삼각형은 도형중 하나인 것입니다. ㅎㅎ

그런데 또다시 눈에 띄는 것 중에 하나가 선이라는 것이 있습니다. 그럼 선은 무엇일까요?
선의 정의는 [선은 줄을 말한다] 랍니다. 장난하냐? (출처 : 역시 위키 -_-;;)
음음, 그럼 다른 곳을 찾아보려다 그냥 기억 속에 있는 것을 꺼내겠습니다.
언제인지는 모르겠는데, 하여간 수학시간에 이런 말을 들은 것 같습니다. [수많은 점들이 일열로 빈틈없이 늘어서면 선이 된다.] 하여간 이거만 믿고 갑니다 ㅋㅋ

다음 점에 대한 정의로 [점(點)은 수학에서 크기를 갖지 않고 공간을 점유하지 않지만 위치 등을 지정할 수 있는 가상적인 개체이다.] (출처 : 위키)
결국 이게 마지막인 것 같네요. 개체까지 내려왔으니까요 ㅎㅎ (프로그래밍에서 개체는 곧 객체가 됩니다.)

결국 필요한 것은 점, 선, 도형, 삼각형 이렇게 4개가 되겠습니다. 그리고 그것을 구체화 시킨 것이 바로 제가 작성한 삼각형이 되겠습니다. (1개 더 추가한 것은 선과, 도형 둘 모두 점을 필요로 해서 점을 저장해 두는 개체를 만들어 둘에게 상속받게 만들었습니다. 코드 양을 줄이기 위해 -_-;;)

어째튼 객체지향을 이해하신 분들이라면 소스를 보면 대충 이해는 하실 겁니다. 납득은 못하실 것 같지만 -_-;;
그렇다고 결국 객체지향은 나쁘다! 라고 이야기 하는 것은 절대 아닙니다. 객체지향적으로 작성할 경우 처음에는 좀 길어질 수 있지만 잘 만든 객체 하나 덕에 나중에 더욱 편하게 프로그래밍 작업을 할 수 있는 것이 바로 이 객체지향 프로그래밍이거든요. 요즘 졸업작품을 만드는 중인데 객제지향 프로그래밍에 대해 새삼 놀라움을 느낍니다. 정말 잘 만들어둔 객체 덕에 편하게 작업하고 있거든요 ^^ (구체적으로 다향성 덕에) 어째튼 여러분들도 심심하면 한번 도전해 보세요. 절차지향적인 프로그램을 객체지향으로 바꾸는 것을요 ^^

참고]
테스트에 사용한 컴파일러 : gcc 3.4.2, g++ 3.4.2, javac 1.6.0_02

문제될만한 부분이나, 버그를 알려주시면 감사하겠습니다 ^^

덧]
웃자고 만들기 시작했는데 정신을 차려보니 경각심을 불러일으킬 소지를 지는 글로 변했다는... 쿨럭!

Trackback 1 Comment 4
  1. Favicon of http://signpen.net BlogIcon 싸인펜 2007.07.30 00:05 address edit & del reply

    최근 객체지향에 대한 재미난 이야기를 친구에게 들어서 트랙백을 남겨봅니다.
    객체는 잘게잘게 쪼개야죠^^ㅋ 그리곤 객체 하나에 너무 많은 일을 시키면 안되죠. 공감합니다~ㅋ 코드는 자세히 살펴보진 못했지만요. 자바코드... 너무 길어요..;;

    • Favicon of http://www.myhyuny.net BlogIcon 화현 2007.07.30 09:01 address edit & del

      너무 잘개 쪼개면 성능저하가 일어나긴 하지만, 역시 적당히 잘개 쪼개줘야죠 ^^
      그리고 자바코드는... 일부러 길게 만들었습니다 ㅎㅎ
      객체지향의 은닉화 때문에 저런일이... 쿨럭!

  2. Favicon of http://mydb.tistory.com BlogIcon 파도소리 2007.09.02 20:02 address edit & del reply

    형,, 아 또 이런걸.. ㅋㅋ

    • Favicon of http://www.myhyuny.net BlogIcon 화현 2007.09.02 23:22 address edit & del

      너도 이런것좀 해봐 재미있어 ㅋㅋㅋ

스레드를 이용한 병렬처리 프로그래밍 – 2

예전에 "스레드를 이용한 병렬처리 프로그래밍"이라는 이름으로 스레드를 이용, 멀티코어를 위한 프로그래밍에 대해 간단히 이야기 한 적이 있습니다. 하지만 그 때에는 단순히 "CPU를 동시에 이용이 가능하다" 까지만 이야기를 해서 이번엔 멀티코어에 맞춰 만들어진 프로그램이 어느 정도 성능에 이득이 있을까를 두고 실험을 해 봤습니다.

지난번과 마찬가지로 Java로 구현을 했습니다. 구현 알고리즘은 "홀수 마방진"(알고리즘에 따른 속도차이편의 알고리즘을 사용했음)이고, 측정 기준은 선언부와, 출력부 기타 등등을 모두 제외한 순수 연산부분만을 측정했습니다.

우선 첫 번째로 스레드가 1개(스레드가 없을 때와 동일)일 때 상황입니다.

사용자 삽입 이미지
344ms군요. 32bit에서는 405ms에 처리했었습니다.

그럼 다음으로 스레드가 2개일 때 상황입니다. 듀얼코어나 그 이상의 프로세서를 가진 컴퓨터에서라면 효과가 있겠죠?

사용자 삽입 이미지
187ms입니다. 32bit에서는 218ms에 처리했었습니다. 2배까지는 아니더라도 2배 가까이 빨라졌습니다.

이것으로 잘만 작성하면 멀티코어 CPU를 지원할 수 있다는 것이 입증이 되었습니다 ^^ 혹시 이걸 사용해보실 분은 받아가서 사용해 보세요. 혹시 버그가 있으면 말씀해 주시고요 ^^

설명서 보기

Trackback 0 Comment 0