공통

변수 선언하기

iseohyun 2022. 1. 3.

목차

    1. 컴퓨터가 연산을 하기 위해서는 공간을 확보해야 한다.

      컴퓨터는 2가지 동작 "복사하기"와 "더하기"으로 모든 일을 처리합니다. 이 2가지 일을 처리하기 위해 가장 기본적으로 해야할 일이 복사하거나 작업을 할 공간을 확보하는 일입니다. 선언하기는 공간을 확보하는 방법을 제시하고 있습니다.

    저장 공간을 확보하기(=변수 선언하기)는 2가지 의미가 있습니다.

    1. 저장공간에 이름을 지어준다.
    2. 저장하는 방식을 약속한다.

      이름을 지어주는 이유는 이름이 있어야 그 공간을 활용하기 쉬워집니다. 사람 이름 정하는 것이나 마찬가지 입니다. 거기 키175되는 잘생긴 남자분 이라고 부르는 것보다, 홍길동씨라고 하는 것이 협동의 시간을 줄여주겠지요?
      둘 째, 저장 방식을 약속하는 방법은 데이타 타입(Data Type)을 명시하는 것으로 해결됩니다. 미래에 어떠한 용도로 사용한다는 것을 미리 말해 주는 것입니다. 이렇게 미리 말해주면 사용할 때마다 어떠한 용도인지 이야기 하지 않아도 됩니다. 물론 사용할 Data type을 나중에 변경 할 수도 있습니다. 우리는 이것을 Typecast(타입캐스트)라고 합니다.


    2. 모든 데이터는 숫자로 표현이 가능하다.

      컴퓨터는 모든 데이터를 숫자로만 저장합니다. 하지만 세상에는 숫자 말고도 여러가지 데이타가 있습니다. 예를 들어 날짜를 숫자 하나로 표현 할 수 없습니다. 하지만 날짜를 연, 월, 일로 쪼개면 숫자 3개의 모임으로 나타낼 수 있습니다. 그림을 예로 들어보겠습니다. 그림이라는 것은 점의 모임입니다. 점이라는 것은 3가지 색의 모임(빨강, 파랑, 녹색)이고, 각 색은 정수로 표현 할 수 있습니다. 즉, 세상의 모든 정보는 숫자들의 조합으로 나타낼 수 있습니다. 현재의 코딩기술은 숫자들을 조합해서 그림이라는 단위를 만들어내었습니다.

      이 번 강의에서는 숫자들을 조합하여 새로운 단위를 만드는 것은 포함하지 않습니다. 그 전에 우리는 조합의 근원이 되는 기본 단위들에 대해서 이해해야 합니다. 우리는 이런 기본 단위를 기본 자료형(Primitive type)이라고 합니다.

      기본 자료형을 정의하는데 앞서 컴퓨터에게 알려주어야 하는 내용은 크게 2가지가 있습니다. 얼마나 큰 저장공간을 어떤 내용으로 저장하는지 입니다. 내용의 종류는 "정수" / "소수" 가 있고, 크기는 "1bit" , "1byte", "2byte", "4byte", "8byte"가 있습니다.

    타입(↓) / 크기(→) 1bit 1byte 2byte 4byte 8byte
    정수형 C : bool
    Java : boole
    an
    C : char
    Java : byte
    C : short
    Java : short / char
    C : int, long
    Java : int
    C : long long
    Java : long
    소수형 - - - C/Java : float C/Java : double

    ※ C와 Java가 char에서 차이가 나는 이유는 글자를 영문만 지원하는가(C), 한글도 지원하는가(Java)의 차이입니다.
        [링크 : 한글과 영문의 글자 차이]
    ※ C에서 long이 4byte인 이유는 만들어진지 오래되었기 때문입니다.
    정수와 소수는 저장공간의 차이입니다 [링크 : 숫자를 저장하는 방식]

    더보기
     지금도 컴퓨터의 발전속도가 빠르지만 과거에는 더 빠르게 발전을 했습니다. 한 번에 처리 가능한 단위를 word라고 합니다. 이 word의 단위가 8bit에서 32bit가 되기까지 십수년 밖에 걸리지 않다보니 integer(int; 정수)의 크기가 컴퓨터마다 크기가 달라지는 경우가 발생했습니다. 즉, 애초에 int는 4byte가 아니고 2byte였습니다. 그러다가 32bit가 보편화 되고, int는 기본적으로 4byte를 사용하게 됩니다.
    메모리 크기와 프로그램의 크기가 증가하면서, 2^32승(= 4G byte)이상을 다루기 위해서 컴퓨터는 2번 작업을 해야 했습니다.
    64bit컴퓨터는 백만 Tbyte까지도 커버가 가능하니, 아무래도 한 동안 64bit를 사용 할 것 같습니다.

    3. 애 이름 잘 못 지어주면, 평생 놀림받는다.

    변수의 용도를 결정했다면, 이제 작명을 해야합니다. 작명 규칙은 아래와 같습니다:

        1. 영문자(대소문자), 숫자, 언더스코어(_), 달러($)를 이용하여 자유롭게 작성합니다.
        2. 숫자로 시작할 수 없습니다.
        3. 공백을 포함할 수 없습니다.
        4. 예약어(reserved words)는 사용할 수 없습니다.
           ※ 예약어는 언어에서 특수한 목적으로 사용하기로 약속한 단어입니다.

        5. (권고) 너무 길게 작성하지는 않습니다. 알아보기도 어렵고, 에러가 나는 경우도 있습니다.
        6. (권고) 가급적 소문자로 시작하고, 단어사이에 '_'또는 단어 첫문자를 대문자로 만듭니다.

    변수의 작명은 생각보다 아주아주 중요한 작업입니다. 어떻게 작성하느냐에 따라 소통의 시간이 기하학적으로 줄어듭니다. "할 수 있다."와 "해도 된다."는 확실한 온도차이가 있습니다. "하지 말아야 할 짓"을 해서 동료를 괴롭히지 말도록 합시다.

    변수명 작성의 예를 들면, 다음과 같습니다.

    의미 변수명 비고
    집에 있는 사람 수 numPeople - 궁금 한 것은 수 number. 중요한 정보가 가장 앞에 오도록.
    - 과거에는 접두어로 데이터 타입을 명시 했는데, 현재는 툴이 좋아져서 굳이 변수명에 기재하지 않아도 됨
    - 과거는 uNumPeople (부호없는 ~) 이런 형태였음. 이름은 szName;;
    해당 기능이 있는지? isSupport - is, has를 접두어로 붙이므로써 OnOff인지 알려줌
    - (피해야할 상황) 구체적인 기능이 있다면 기능명을 변수명에 추가하는 것도 좋겠지만, 함수명이라던가, 파일명에 이미 기재가 된 내용이라면 가급적이면 간결하게 작성할 것.
    - 변수명은 구조의 문제(변수의 생명주기)로 해결해야지, 구체적으로 쓴답시고 길게만 작성하면 나중에 관리도 어렵거니와 오히려 오해의 소지
    로드킬 후 자동 신고까지 카운트다운 cntdnLoadkill
    LoadKillCount (?)
    - 알고 싶은 정보를 먼저 적지 않으면, (아래 예시와 같이) 로드킬을 세고 다니는 이상한 경우가 발생함
    - 많이 사용되거나 줄여야 할 필요가 있을 때, 자음 중심으로 생략
    예) Index -> idx, manager -> mngr, counter -> cnt, down -> dn
    반복되는 수 i, j, k ... - 크게 의미 없이 반복되는 수는 전통적으로 i, j 등을 사용하여, 코드에 해당 문자가 등장하면 읽는 사람도 해석하지 않아도 되므로 시간을 많이 절약함

    4. 이름을 지어주었다고, 태어난 것은 아니다. 선언의 방법과 의미

    타입을 작성하고, 이름을 뒤이어서 씁니다. 예를 들면 다음과 같습니다.

    예 (자료형 변수명) 해석
    int i; 정수(int)형태의 i라는 친구
    float height; 소수(float)형태의 height(높이)라는 친구
    long lightLv; 긴 정수(long)형태의 lightLv(밝기 정도)라는 친구

     변수의 선언은 실질적으로 그 변수를 사용하기 이전까지는 아무런 동작을 하지 않습니다. 선언만 하고 사용하지 않으면, 컴퓨터는 컴파일 할 때, 해당 변수를 아얘 빼버립니다.
     만약 사용하는 변수라고 해도, 디버깅을 할 때, 해당 변수를 선언하는 라인은 수행하지 않는 것을 확인 할 수 있습니다.왜냐하면, 선언이라는 것이 실제로 어떤 행동을 하라는 명령이 아니기 때문입니다. 그냥 예고장 입니다. 컴퓨터는 "복사하기"와 "더하기" 이외의 작업은 수행하지 않습니다.

    '공통' 카테고리의 다른 글

    printf  (0) 2022.01.06
    컴퓨터 구조  (0) 2022.01.04
    포탄 그래프 코딩하기  (0) 2022.01.02
    코딩언어(프로그래밍) 선호도  (0) 2021.12.17
    알고리즘  (0) 2021.12.16

    댓글