본문 바로가기

(비정기) Dlbo's Post

주로 사용할 프로그래밍 언어를 고를 방법!

프로그래밍 언어는 정말 가지각색 입니다.

절차지향을 외치는 C언어,

객체지향을 외치면서 껍데기만 객체지향, 내부는 객체지향을 은근히 파괴하는 면이 있는 Java,

객체지향과 절차지향을 마음대로 왔다갔다 거릴 수 있도록 설계된 C++,

Java의 단점을 상당수 커버하기 위해 나온 C#,

머리 빠개지도록 굴려야 프로그램 하나 나오는 Assembly.



C언어의 Hello World! 코드입니다.

간략하지요?

이 C언어의 장점은 '스피드'와 '하드웨어 컨트롤링'입니다.

OS들을 보면 C언어로 만들어진 것이 많지요.

윈도우 95~98, me와 리눅스가 C로 만들어져 있습니다.

윈도우즈 me의 환상적인 부팅속도는 다들 아시지요?(제 노트북에 리눅스 깔때 시도해 봤습니다..

대략 5초면 부팅 끝나더군요 -_-;;)



개인적으로 상당히 싫어하는 Java의 Hello World! 코드입니다.

뭔가 상당히 길지요?-_-;;;

객체지향을 표방하는 Java 언어라 아예 main함수가 클래스에 묶여있습니다.

언뜻 보면 객체지향을 정말 잘 쫒아가는 듯한 언어이지만....

내부 구성은 좀 심히 복잡합니다.

"단순함의 반복이 빠르고 유지보수하기 좋은 프로그램을 만든다" 라는 객체지향과 절차지향의

공통 원칙을 가볍게 무시해주는 것들이 상당히 많거든요.

가령 예를 들자면... Inner Anonymous Class(무명 내부 클래스)가 대표적이지요.

Java는 정말 말로 표현하기 놀라울 정도로 개발속도가 빠르지만,

JVM에 의존해 코드가 작동해야 하는데다가, 저런 면이 있어서 상당히 불안합니다.

게다가 객체지향적인 설계가 생각보다 만만한 것이 아니거든요. -_-;

개발속도도 숙련된 MFC 프로그래머가 숙련된 Java의 Swing 등의 프로그래머보다

더 좋거나, 비슷비슷한 경우가 많음을 고려해보면 그리 쓸만한 언어는 아닙니다.

다만, 웹쪽 개발에 특화되어 있어서인지 국내에서 Java사용 프로그래머의 비중은 엄청납니다.

외국에서도 Java가 대세라고 다들 그러는데... 제가 아는 외국 친구들은 C++이나 C#만 쓰더라구요.

뭐... 진실은 가봐야 아는법이고;



C++의 Hello World 소스코드입니다.

C++은 제가 거의 '예찬'하는 언어입니다. -_-)_b

클래스를 지원하며(저기 cout도 클래스 비슷한거에요~),

이로 인해 객체지향을 구현할 수 있습니다.

포인터의 사용이 C언어만큼 자유자재라 Java처럼 어떤 구조를 만들 때 한정된 형태에 묶일 필요가

없습니다. 동시에 절차지향적 프로그래밍도 가능하기 때문에 원하는 형태로 언제든 프로그래밍이

가능합니다. C언어에 비해 stack이나 que, tree 등도 라이브러리에서 지원해줄 정도로 라이브러리가

풍부합니다.

다만....

완벽한 객체지향형이 아니기 때문에 클래스 하나만 수정해도 프로그램 전체를 빌드해야 합니다.

-_-a...;;

추후 MFC등을 이용하면 Java보다 더 빠르거나, 비슷한 수준으로 어플리케이션을 쉽게 개발 할 수 있으며

C처럼 시스템을 직접 컨트롤 하는것도 가능합니다.



C#의 Hello World! 코드입니다.

Java와 거의 같지요?

C#은 Java의 단점을 커버(Java에서 쓸데없이 빼버린거 도로 집어넣고, 라이브러리 강화)하면서

만든 언어입니다만...

닷넷플랫폼 기반 언어이기 때문에 사용에 제한이 있습니다.

Java의 경우 JVM만 돌아가면 만사 OK이지만,

C#은 윈도우 아니면 안돌아가는 '닷넷플랫폼'! 입니다.

크헬헬헬 -_-;

section     .data                          

msg     db          "Hello, world!",0xa    
len     equ         $ - msg              

section     .text                          

        global _start

_start:

        mov     edx,len
        mov     ecx,msg
        mov     ebx,1
        mov     eax,4  
        int     0x80    
        mov     ebx,0  
        mov     eax,1
        int     0x80

자!~

우리의 미친 어셈블리용 Hello World 코드입니다.

-_-

어셈블리는 원래 윈도우나 리눅스 등의 어플리케이션을 만들라고 만들어진 언어가 아닙니다.

초창기 OS도 없던 컴퓨터에서 돌리기 위해 기계어와 1:1로 매칭된 프로그래밍 언어이지요.

덕분에 기계를 완벽하게 직접 컨트롤하는게 가능합니다만

CPU마다 다른 기계어때문에 CPU마다 어셈블리 코드는 다릅니다.

ㅋㅋㅋㅋㅋㅋ

인텔의 CPU들과 AMD는 윈도우가 돌아가지요?-_-?

얘들은 IA-32라는 인텔의 아키텍쳐 셋을 따르기 때문에 기계어가 같습니다.

내부 처리 로직만 다르지요.

참고로 이 어셈블리어로 구구단 짜려면 머리 깨나 깨질겁니다 ㅋㅋ







프로그래밍 언어들은 이렇게 특성이 다양합니다.

여기 소개한 언어들 외에도 basic, pascal등등 수많은 언어가 존재하며, 정말 가지각색의 특성을 가집니다.

물론 최고의 프로그래머는 언어에 구애받지 않는 프로그래머 이지만,

한개쯤 특기영역을 가지려면 주 사용 언어는 정해두어야 겠지요?

저는 C와 C++을 주로 씁니다. 여러분도 한번 자신만의 언어를 골라보세요 -_-!