본문 바로가기

(비정기) Dlbo's Post

자유에는 그만큼의 책임이 따른다.

프로그래밍 포스트 치고는 뭔가 오묘한 제목이지요?

요즈음 이것저것 해보다가 갑자기 든 생각이라 포스트로 구성해 보았습니다.

------------------------------------------------------------------------------------------

자유에는 책임이 따른다고 하지요?

같은 밥솥으로...
사용자 삽입 이미지

.... 요런 밥을 탄생시킬 수도 있고,

사용자 삽입 이미지

요런 밥이 나올 수도 있습니다 -_-;

밥 하는 사람의 책임에 따른 문제이지요.

프로그래밍 또한 같습니다.

프로그래밍의 자유도, 즉, 사용할 언어의 자유도에 따른 책임은 스스로 져야 한다는 것이지요.

어셈블리언어의 어셈블러는 아주 기초적인 문법만 체크할 뿐, 데이터와 코드의 구분도 잘 안해줍니다.

(MASM의 구분니모닉은 예외로 칩시다 =ㅁ=)

이리 하여 프로그래머의 자유도를 거의 무한에 가깝게 보장해 주는 대신,

엄.청.난 길이의 코드와 -_-

한끗 삑날때마다 컴이 어디로 튈 지 모르는 위험-_-한 상황을 연출할 수 있지요.

사용자 삽입 이미지

.... 그런 면에서 이분은 나름 잘 버티고 있지요? -_-;

반면, 자바와 C#을 봅시다.

프로그래머의 편의는 엄청나게 제공합니다.

객체지향적인 형태로 객체들을 조합하기만 하면 금방 쉽게 프로그램이 구성이 되지요.

사소한 익셉션 조차도 try-catch와 내장 익셉션 기능을 이용해 처리가 가능하고,

이런 문제가 발생하더라도 시스템에 무리가 가지 않는, 그야말로 프로그래머의 책임을 엄청나게 덜어주는

사용자 삽입 이미지

같은 친구이지요 -_-;

이렇게 프로그래머의 책임과 수고를 덜어주는 대신,

Java와 C#의 프로그래머의 자유도는

사용자 삽입 이미지

...

프로그래머의 수고를 덜어주기 위한 객체지향의 기본 원칙들이

프로그래머의 자유를 제한하고 있습니다.

분명히 Java와 C#은 디버깅이나 코딩에 있어서, 그 뿐만 아니라 프로그램의 개발 속도나 생산성,

유지 비용 및 타 팀원과의 협동에는 매우 유리할 수 있으나,

그로 인해 스스로의 발을 어느정도 묶어버리게 되어버린 다는 것이지요.

자, 그럼 우리의 히어로 C와 C++을 볼까요?

C는 절차지향 언어이고, 하이레벨 언어이면서, 동시에 로우레벨 시스템의 컨트롤에 관여할 수 있습니다.

C++영감탱이는 객체지향을 표방한 절차지향 + 객체지향의 짬뽕 언어이면서,

C언어의 형태를 고대로 쓸 수도 있고, Java나 C#을 어느정도 흉내내서 쓸 수도 있으며,

자신만의 독창적인 신기한 형태의 객체지향을 구현할 수도 있지요.

그런데...

사용자 삽입 이미지

C와 C++은 타겟 프로그램을 어디에서 돌릴 목적으로 컴파일/링크/어셈블리 하느냐에 따라

자유도가 달라집니다.

가령 예를 들면, 윈도우즈 어플리케이션으로 컴파일 한 친구는 메모리 내부의 비디오메모리 번지에

접근하려 할 경우,

사용자 삽입 이미지

라는 OS의 강력한 경고를 받지만 -_-;;

커널 수준에서 제어할 목적으로 만들었다면,

사용자 삽입 이미지

요래도 뭐 문제삼지 않습니다 -_-;

왜냐,

시킨놈 마음대로니까요 -_-;

시킨놈이 알아서 처리할꺼라고 굳게 믿는거지요.

시키는 사람이 사태에 대해 잘 알건 모르건 신경 안쓰는 겁니다.

사용자 삽입 이미지

-_-;;

뽑던 말던... 뽑아서 보던 말던... =_=;;

고로, 프로그래머의 자유도는 사용하는 프로그래밍 언어의 자유도와 같다고 할 수 있고,

사용할 수 있는 프로그래밍 언어의 갯수이며,

프로그래머가 가진 지식의 양에 비례하고,

"프로그래머의 책임 정도에 달렸다"

라고 할 수 있지요.