디시인사이드 갤러리

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

갤러리 본문 영역

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

좍이(59.7) 2011.02.20 08:58:51
조회 452 추천 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/03 - -
공지 프로그래밍 갤러리 이용 안내 [71] 운영자 20.09.28 35344 62
2708986 흠냐롱 저분 피에로님 맞나요? 헬마스터갤로그로 이동합니다. 17:20 0 0
2708985 흠냐롱 흠냐롱갤로그로 이동합니다. 17:11 5 0
2708984 오늘 재벌처럼 돈 많이 쓰고 옮 ☆단비☆갤로그로 이동합니다. 17:10 9 0
2708983 리얼미터에서 여론조사 3번왔다 [8] 헬마스터갤로그로 이동합니다. 17:01 22 0
2708982 디도스라는게 개인 컴퓨터로 하는건 의미없음? [1] 방가갤로그로 이동합니다. 16:56 16 0
2708981 프론트 스킬 그만올리고 백 공부 시작해야겠다 [5] 프갤러(106.240) 16:52 44 0
2708980 파이썬 프로젝트 뭐 하는게 좋을거 같음? [8] 프갤러(14.39) 16:49 30 0
2708979 최저시급을 나라에서 보존해주는 법 생기면 ㅋㅋ [1] ☆단비☆갤로그로 이동합니다. 16:40 37 0
2708978 근데 고졸들한테 쿠팡도 감지덕진데 왜자꾸 취업할라고 발광함? [2] 프갤러(223.38) 16:39 31 0
2708977 ur fav young korean mathematician [1] 슬라보예지젝갤로그로 이동합니다. 16:38 14 0
2708975 노코드툴 난 좆도 비전 없다고 생각함. [1] 프갤러(175.208) 16:28 28 0
2708974 어떻게 해야 빨리 개발 할 수 있을까요? [1] 프갤러(165.132) 16:18 35 1
2708973 웹개발만 아니면 사실 it 유관분야 취업 매우쉬움 [3] 프갤러(115.21) 16:16 84 0
2708972 여유로워 [8] 멍청한유라ㅋ갤로그로 이동합니다. 16:16 52 0
2708971 헤라킷이다 마모되어서, 플라스틱이 경화가 떨어져서, 도리스아(119.195) 16:16 7 0
2708970 c++이랑 코틀린 잘아시는 고수 선생님들 코드 질문점.. [8] ㅇㅇ(125.242) 16:15 65 0
2708969 si sm이 어려운건 [1] 프갤러(115.21) 16:12 37 0
2708968 싸피 여기 뭐 그냥 다 대기업 얘기만 하냐 맨날 [1] 프갤러(112.150) 16:10 41 0
2708967 프로그램 만들어서 먹고 사는게 힘든 이유 [1] HKSJng(121.134) 16:10 35 1
2708966 나 프라 왔당 ㅎㅎ [4] 딱국(118.235) 16:06 39 0
2708964 나 고졸인데 삼성들어옴 [2] 프갤러(223.38) 16:03 63 0
2708963 진지하게 지금 노코드툴 개발 이런거 하는게 낫지않음 ?? [1] 프갤러(112.150) 16:02 32 1
2708962 뻥튀기 그냥 악으로 버텨 [2] 클갤(118.235) 15:58 32 0
2708961 html 의미론적 태그 많이 중요함?? [10] 프갤러(125.246) 15:57 61 0
2708960 어제 알바 뛴거 16만원 들어옮 [6] ☆단비☆갤로그로 이동합니다. 15:56 36 0
2708959 취업 안되면 비주류 분야로 개발취업하면 길은 많지않음 ?? [2] 프갤러(112.150) 15:56 47 0
2708958 이번에 크림 바꿨는데 ㄷㄷ [1] nxboyj(121.154) 15:49 10 0
2708957 Rx Chat Gpt - 음성 인식 부분 처리 됐음 [1] 프갤러(121.172) 15:44 28 1
2708956 이거 ai 가 글쓴 거임? ☆단비☆갤로그로 이동합니다. 15:38 22 0
2708955 하드웨어 지식 쓰는 개발자 없음? [9] 프갤러(61.84) 15:35 64 0
2708954 [잡정보] Coding 의 과정에서 중요한 것은?.. [3] +abcd3421갤로그로 이동합니다. 15:32 23 0
2708953 본인도 피부과 진료완료♥+ [3] 헬마스터갤로그로 이동합니다. 15:31 36 0
2708952 요즘도 국비충들 많음? [1] 프갤러(112.155) 15:29 41 0
2708951 병원 진료 끝나고 귀가 중 ☆단비☆갤로그로 이동합니다. 15:29 15 0
2708948 it판 개판났네 ㅋ 프갤러(211.234) 15:22 91 2
2708947 정처기따면 서합률 올라가냐 [2] ㅇㅇ(110.70) 15:22 39 0
2708946 취업 아무거나 간다는 애들 그 아무에 자바 스프링은 무조건 포함임 ?? [1] 프갤러(112.150) 15:15 44 0
2708945 aws mfa 없이 접속방법 없음? 프갤러(106.247) 15:11 13 0
2708944 여행지에서 최후의 만찬 직촬 노럐갤로그로 이동합니다. 15:11 22 0
2708943 분자 분모를 변수명으로 써야하는데 [10] ㅇㅇ(211.36) 15:10 49 0
2708942 그냥 뻥튀기를 가지마 [2] 프갤러(115.21) 15:06 59 0
2708941 뻥튀기로 들어갈바에 그냥 다른 IT 직무 들어가는게 낫지않냐 ... [1] 프갤러(112.150) 14:59 48 0
2708940 전임자가 싸질러놓은 코드로 유지보수해야하는데 [16] 프갤러(223.62) 14:48 104 0
2708939 뻥튀기 요령- 프갤러(121.172) 14:47 32 0
2708938 경험 없이 판단하지 말라 by 나님 ♥여래신장냥덩♥갤로그로 이동합니다. 14:46 27 0
2708937 컴고수들아 왜 bash쉘은 bash쉘이라 부르는거임? [3] ㅇㅇ갤로그로 이동합니다. 14:45 44 0
2708936 뻥튀기 진짜 어떻게 버티는거냐? 말이 안되는데?? [10] 프갤러(1.211) 14:33 109 0
2708935 C/C++ vs 자바 vs C#, 어느게 좋냐? 순수 언어로 봤을 때 [3] 프갤러(59.16) 14:32 68 0
2708934 나 피에로 질문 받는다 [10] 흠냐롱갤로그로 이동합니다. 14:30 86 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2