디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

뉴비들은 봐라. 알려줄께 ㅇㅇ - 변수 선언 편

좍이(59.7) 2011.02.20 08:58:51
조회 453 추천 0 댓글 24

프겔에 잘난 척만 하는 뉴비들만 득실득실해서 이런 수준 높은 글에 관심을 가질 놈은 별로 없겠지만,

주말 아침에 스스로 공부해볼겸, 시부려본다.

괜히 아는 체 해서 똥만 싸지말고, 아는 것만 시부리자.

C언어에서 char에 문자가 저장된다고 배웠어도, 그건 진실이 아니다...

문자로 해석할 뿐이지.

제대로 아는거 아니면 뉴비한테 시부리지 말자.

세상에 똥이 가득찬다.


뭐, 잡설은 이만하고, 강의를 시작하도록 하겠다.



변수 선언에 대한 언어의 스펙은 크게 2가지 관점에서 2가지 종류의 견해가 있다.


1-1. 명시적으로 변수가 선언되어야만 한다

# 선언되지 않은 변수를 사용하면  컴파일러가 에러를 내는 언어. 대표적으로 C계열 언어, 등등등

1-2. 묵시적으로 변수가 선언될 수 있다

# 선언되지 않은 변수를 사용하면 컴파일러가 알아서 변수를 선언해주는 언어. python, rupy, ocaml 등등등


2-1. 정적 타입 체킹

# 컴파일 타임에 변수의 타입을 체크하는 언어. 변수타입과 사용방식이 상이하면 경고&에러를 낸다. 대표적으로 ocaml, 등등등

2-2. 동적 타입 체킹

# 런타임에 변수의 타입을 체크하는 언어. 인터프리터 언어들이 대개 이런데, 에러가 있으면 실행하다 죽곤 한다. python, rupy 등등등


프로그래밍 언어(이하 PL)의 세계에서 변수 선언을 어떻게 해야하는가는 

언제나 뜨거운 감자였다.

난 개인적으로 (1-2, 2-2)를 선호하지만, 어떤 타입 선언이 더 좋으냐?에 대해선

영원히 논의해도 답이 나올리가 없는 논제이기 때문에 넘어가도록 하겠다.

뭐, 제각기 장단점이 존재하기 마련이고 말이지.




자, 그럼 1번 관점에 대해 공부해보도록 하자.

1-1. 명시적 변수 선언. 즉 C언어 같이 변수를 꼭 선언해야하는 것의 장점은 컴파일러에게 꼭 사용해야할 변수를 알려줄 수 있다는 것이다.

선언하지 않고 사용하면, 이걸 사용자의 실수로 판단해서 컴파일러가 경고&에러를 내줄 수 있다는게 장점이지. 물론 100%는 아니다.

단점은 "귀찮다"라는 것이다.


1-2. 묵시적 변수 선언. 즉, python 같이 변수를 직접 선언하지 않아도 사용할 수 있는 것이지.

장점은 "편하다"라는 것이다.

단점은 거지 같은 사용자가 거지 같이 쓰면 거지 같이 된다는거지.

거지 같이 써도 컴파일러가 경고 & 에러를 내어줄 기준이 없으니까, 개념없는 놈이 쓰면 버그의 천국을 양산하게 된다.

하지만 대개 고치기 어려운 버그를 양산하진 않아. 어려운 버그는 이런 문법적 수준의 버그가 아니라, 논리적 버그니까.


명시적 변수 선언과 묵시적 변수 선언은 서로 대비되지.

"버그가 보다 적은" 프로그램을 짜는데는 얼핏 보기에 명시적 변수 선언이 유리해보이지.

하지만 꼭 그렇진 않아.

명시적 변수 선언에 비해서 묵시적 변수 선언은 그 단점을 해소할 강력한 방법들을 가지고 있거든.

변수 선언에 신경을 덜 씀으로써, 로직에 더 관심을 가져줄 수 있다는 관점도 있고.

그 방법은 2-1과 정적 분석기로 대표되는데...


그럼 2번 관점을 공부해보도록 하자.

2-1. 정적 타입 체킹. 간단히 생각하면, 프로그램을 실행하기 전에 "타입"을 검사하는거야.

int에 정수값이 들어갔는지, double에 실수값이 들어갔느지, 이런걸 검사하지.

"정적 타입"이라는 말은 타입이 고정되어 있다는 말이기도 해.

int로 선언된 타입을 double로는 사용할 수 없다는 뜻이지.


C언어 같은 경우엔 약한(weak) 타입 체킹에 해당해.

캐스팅이 가능하면 묵시적으로 캐스팅 해버리지.

경고는 낼지언정 오류를 내진 않아.

그리고 런타임에 오작동을 일으키지.


ocaml 같은 경우엔 강한(strong) 타입 체킹이라고들 하지.

묵시적인 캐스팅을 하지 않아.

변수가 처음 사용되었을 때, 타입이 정해지고,

이후론 타입의 변경이 허용되지 않지.



정적 타입 체킹의 장점은 역시 컴파일 타임에 미리 버그를 발견할 수 있다는거지.

단점은 유연성이 부족하다는 것 정도.

C계열 언어는 좀 어중간한데, 약간의 유연성을 첨부한 정적 타입 체킹이라고 생각하면 얼추 맞아.


2-2. 동적 타입 체킹. 실행 중에 타입을 체크하는 언어.

동적 타입은 타입이 런타임 중에도 바뀔 수 있어. 타입이 없는건 아니지만...

모든 변수를 void 포인터로 캐스팅해서 사용한다고나 할까?


이런 언어는 잘못 사용하면 아주 위험해.

정적 타입 체킹 언어에선 컴파일 타임에 가볍게 잡아주는 버그들이 실행중에 불쑥불쑥 튀어나와서

프로그램을 죽이곤 하지.

하지만 이건 프로그래머의 재량 문제이기도  하고,

자신을 제한하고, 정적 분석기 등을 도입하면 거의 해소할 수 있지.

동적 타입 체킹의 장점은 유연한 사고를 프로그래밍에 보다 강력하게 적용할 수 있다는거.

단점은 다이아몬드로 쓰면 다이아몬드가 나오지만, 똥으로 쓰면 똥이 나온다는거.




어떤 변수 선언 & 타입 체킹 방식을 선호하는가는 사람마다 다르고, 취존해야할 필요성이 있어.

------------ 이하는 내 개인적인 견해 ------------

하지만 C언어는 까고 가야겠다.

C언어는 명시적 변수 선언을 고수함에도 불구하고, 어설픈 묵시적 캐스팅을 허용함으로써

불편하면서도 버그 양산의 소지만 잔뜩 열어놓았지...

포인터야, 뭐, 기계 관점에서 훌륭한 도구이긴 하지만...

명시적 변수 선언을 고수할 거였으면, 묵시적 캐스팅도 허용 안 했으면, 상황이 훨씬 나았을텐데...


타입 체킹은 정적 분석기를 도입함으로써 대부분의 문제점을 잡아낼 수 있지만,

C언어의 묵시적 캐스팅으로 발생하는 메모리 버그 같은건,

어떤 도구로도 제대로 잡아낼 수가 없지.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 가족과 완벽하게 손절해야 할 것 같은 스타는? 운영자 24/06/24 - -
236860 !!!!!!!!! ★형들 급함 급질문 [5] 유닉스입뉴비(211.232) 11.03.04 72 0
236859 니들 덕분에 흘겨보고 지나간 Java메모리 구조와.. 가비지컬렉터를 조사 [13] 음...(115.178) 11.03.04 415 0
236858 뒤도수 [2] SODmaster갤로그로 이동합니다. 11.03.04 83 0
236857 제 47차 보안,해킹 세미나(실제 은행해킹용 웜 분석과 웹해킹) gumpkim(125.129) 11.03.04 73 0
236856 별찍기 물결모양으로 하려하는데요 [2] asdf(203.234) 11.03.04 133 0
236855 영어 드립 [3] 개드립(121.182) 11.03.04 137 0
236854 근데 영어 못읽는건 아님... [3] 꿀레(14.33) 11.03.04 90 0
236852 영어공부 하면서 느끼는 건데, [11] Minryu갤로그로 이동합니다. 11.03.04 285 0
236850 졸작하는데 좀 고민되네. [3] ===(115.145) 11.03.04 238 0
236849 쌍용교육센터라고 알아?? [11] 쌍용(218.153) 11.03.04 268 0
236848 [내일배움카드제] 3월 국비지원 내일배움카드제(계좌제) 개설과목 안내 [3] gumpkim(125.129) 11.03.04 76 0
236847 오오오오... 테트리스 블락이 막 떨어지는군 [6] LibeRa갤로그로 이동합니다. 11.03.04 176 0
236846 프갤 눈팅하면서 느낀건데... [7] 개드립(121.182) 11.03.04 260 0
236845 프갤 눈팅하면서 느끼는 건데 [2] ㅍㅌ갤로그로 이동합니다. 11.03.04 119 0
236843 횽들 facematch 같은건 어떻게 만드나요? [2] Paradise갤로그로 이동합니다. 11.03.04 75 0
236842 디도스 공격왔엇네 [1] ㅂㅈㄷㄱ(175.193) 11.03.04 146 0
236840 형들 형들은 졸작으로 어떤걸 했엉?? 리플로 뽐점 내줘 [4] 안숭(61.100) 11.03.04 194 0
236839 난 여태까지 영어공부 제대로 한 기억이 없는데 시험보면 잘침 [7] (211.222) 11.03.04 97 0
236838 이번에 복학하면서 진짜 프로그래밍 개 ㅈ도 모르고 시작했는데 [3] 우호앙(210.115) 11.03.04 154 0
236837 밤샜는데 잘수가 없다.. [6] 꿀레(14.33) 11.03.04 136 0
236836 영어징징이들 [8] cyluss갤로그로 이동합니다. 11.03.04 165 0
236835 페북에 서식하는 프갤횽들 소환!!! [8] 은행강도갤로그로 이동합니다. 11.03.04 127 0
236833 컴파일러라는 과목에선 뭐 배움? [6] 하앍하앍(123.199) 11.03.04 149 0
236832 으아아아아아아아악 ! 영어 ! [5] LibeRa갤로그로 이동합니다. 11.03.04 98 0
236830 입갤! 횽들 잘 지냈냐능! [14] 해일리갤로그로 이동합니다. 11.03.04 131 0
236829 하앍 컴파일러란 과목이 컴공4년제 나오면 중요한거임요? [3] 빡곰갤로그로 이동합니다. 11.03.04 181 0
236828 고정닉? hideto.갤로그로 이동합니다. 11.03.04 33 0
236827 먹튀들은 검색이란것도 모르냐? [1] 일광면갤로그로 이동합니다. 11.03.04 162 0
236826 공부는 말야 어영부영 하는거야 [1] 별가사리(122.40) 11.03.04 123 0
236825 나처럼 새벽형 인간이 되라! [1] 계백(61.255) 11.03.04 87 0
236822 피방에서 파일구리 리버싱 하ㅇ는사람 봤다 [1] 3(116.34) 11.03.04 821 0
236821 자바 첨 공부하려고 하는데 책추천점! [1] 말코형갤로그로 이동합니다. 11.03.04 177 0
236820 글삭튀하는 마음 [1] blackskirts갤로그로 이동합니다. 11.03.04 85 0
236819 어느새 시간이 벌써... SODmaster갤로그로 이동합니다. 11.03.04 29 0
236815 ㅋㅋ 역시 글삭튀 [7] clique갤로그로 이동합니다. 11.03.04 182 0
236813 에듀펜이라는 동영상강의 싸이트 괜찮어?? [1] ㅇㅇ(175.195) 11.03.04 1085 0
236811 to 허허벌판 [22] SODmaster갤로그로 이동합니다. 11.03.04 208 0
236809 컴공과 장래좀요 [7] 척척밥샙갤로그로 이동합니다. 11.03.04 221 0
236804 디비쪽은 신입 안 뽑나여 으헝?'ㅅ' [5] 풀개미'ㅅ'갤로그로 이동합니다. 11.03.03 173 0
236802 횽들 C#에서 인터페이스를 써볼려고 하는데 [11] 허허벌판갤로그로 이동합니다. 11.03.03 109 0
236801 횽들 질문하나만 봐줘요 [7] qwerty(124.49) 11.03.03 86 0
236800 디씨 아파요? [5] 해일리갤로그로 이동합니다. 11.03.03 82 0
236799 프갤은 굉장히 현실적인것 같아여.ㅅ. 풀개미'ㅅ'갤로그로 이동합니다. 11.03.03 108 0
236798 [질문]tv도 공유기처럼 사용가능한가요 [7] 123(221.155) 11.03.03 61 0
236794 fps오류 [1] ㅇㅇ(210.218) 11.03.03 65 0
236792 c#책 추천 부탁드립니당 후우(175.114) 11.03.03 126 0
236791 ..아무래도 탈겔해야겠다 [1] DMW(125.138) 11.03.03 69 0
236790 횽들 질문좀.... 내바다갤로그로 이동합니다. 11.03.03 23 0
236789 SCJD 같은거 생각하고 계신 분 *빨리* 따세요 [1] 후시기바나(220.67) 11.03.03 75 0
236788 나같은 초보를 위한 winapi 안들어가져요 [1] 듣보킹갤로그로 이동합니다. 11.03.03 89 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2