본문 바로가기

별걸다하는 IT/프로그래밍언어

[Java/C/C++] 변수 선언, 초기화 방법과 변수 명명 규칙, 카멜(Camel) 파스칼 표기법

[ Java / C / C++ 프로그래밍 완전정복 목차 ]

안녕하세요~! 오늘도 말랑이몰랑이 블로그를 찾아와주신 방문자님들 반가워요!!

저번 시간에 '변수가 무엇인가'에 대한 포스팅을 진행했었죠!

▼[공통,Java,C,C++등]프로그래밍에서 변수(variable)란? 자료형이란? 데이터 타입 종류 및 크기

 

프로그래밍에서 변수(variable)란? 자료형이란? 데이터 타입 종류 및 크기

[C언어, C++언어 완전 정복! 강의 목차 링크] C, C++, C#, Java, Python 등등.. 다양한 언어가 있는데요. 프로그래밍 공통은 이러한 언어들에서 공통적으로!! 나오는 개념을 정리하는 카테고리예요. 공통적으로 다..

jhnyang.tistory.com

이번 시간에는 그 포스팅에 이어서 변수 선언 및 초기화 방법 그리고 변수 표기법 등에 대해 알아보려고 합니다.

바로 고고씽~

변수 선언과 초기화

변수 선언이란

저번 포스팅에서 변수 선언에 대해서 아주 간단히만 언급하고 자세히 구분을 두지는 않았었는데요~!

간략하게 복습하자면, 내가 사용할 데이터를 저장하기 위해 메모리를 잡는다고 했고 이걸 변수를 선언한다 라고 표현한다고 했어요~! (기억이 안나시는 분들은 전 포스팅을 보고 오기~)

int num; //num이라는 이름의 변수를 선언 
int length; //length라는 이름의 변수를 선언

요것이 변수를 선언한 코드입니다.

정리: 이렇게 변수를 선언하면 메모리의 빈 공간에 변수 타입에 알맞은 크기의 저장 공간이 확보되고 앞으로 이 저장공간은 '변수이름'을 통해서 사용하게 됩니다.

변수 초기화란

근데 이렇게 하면 안에 값이 들어있지 않잖아요? 사용 못하지 않나요?!

맞아요 ㅎㅎ 변수를 선언하고 그 변수를 사용하려면 그 전에 반드시 값을 넣어주는 작업이 필요합니다. 아직 데이터가 안들어있으니까요~! 값을 넣어주는 작업을 초기화 (initialization)이라고 합니다.

num = 3; length = 10;

여기서 사용된 '='은 대입연산자라고 해서 'num이라는 공간에 3이라는 데이터를 대입하겠다' 라는 뜻입니다.

 

쓰레기값 발생 이유

변수 초기화가 꼭 필요한 이유는,, 맨 처음 메모리를 할당 받았을 때 그 공간이 0이라고 생각하면 안돼요. 메모리는 운영체제도 쓰고 A프로그램도 쓰고 B프로그램도 쓰는,, 공유자원이기 때문에 쓰레기값이 들어가 있을 수 있기 때문입니다. 즉 남들이 쓰다가 남은 데이터들이예요. ㅎㅎ 그래서 초기화를 하지 않고 사용하게 되면 요런 남아있는 데이터 때문에 쓰레기값이 산출됩니다.

 

초기화를 하지 않고 사용하면 어떻게 되는지 확인해볼까요?

#include <stdio.h>
int main(void)
{
	int num1, num2;
	printf("num1: %d, num2: %d \n", num1, num2); //기본적인 출력함수 
	return 0;
} //C & C++
package test;
public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num1, num2;
		System.out.printf("num1: %d, num2: %d \n", num1, num2); //기본적인 출력함수 
	}
} //JAVA 자바

 

비주얼스튜디오 에러

 

에러가 떴어요!!

이와 같은 일을 방지하기 위해서 이클립스나 비주얼스튜디오는 초기화를 하지 않으면 "The local variable num may not have been initialized"에러가 뜹니다. (자바, C, C++동일!)

 

쓰레기값이 들어가 있는걸 실제로 확인해보고 싶으면 무시를 눌러서 결과를 보시면 됩니다.

 

 

선언 + 초기화

물론 변수선언과 초기화를 같이 할 수 있어요 ㅎㅎ

int num = 3;
int length = 10;

그리고 콤마(',')를 이용해서 여러 변수를 한번에 선언 및 초기화를 할 수 있습니다.

int a, b, c, d; //여러 변수 동시 선언
int x=0, y=0, z=0; //선언+초기화

변수 명명 규칙

변수 이름이라 부르기도 하고, 식별자(identifier)라고 하기도 하는데 우쨌든 이름 짓는데는 우리가 약속한 규칙이 있습니다. 

1. 대소문자가 구분되며 길이에 제한이 없습니다.

2. 숫자로 시작해서는 안돼요.

3. 변수명은 한글 안돼요 ㅠ 알파벳과 일부 특수문자, 그리고 숫자만 허용됩니다.

4. 따라서 이름 사이에 공백이 삽입될 수 없습니다.

5. 특수문자는 '_'와 '$'만이 허용됩니다.

6. 예약어를 사용해선 안됩니다. (키워드 사용 안된다는 말과 같아요)

 

어차피 이름 잘못지으면 컴파일 에러가 나긴 합니다. ㅎㅎ

앞에 369 지우라고 에러 뜨네요 ㅎㅎ

 

키워드, 예약어 종류

키워드 예약어를 사용해서 안된다는 규칙을 6번에 명시해뒀는데요. 예약어는 말그대로 프로그램에서 사용하겠다고 이미 예약해 놓은 단어라 쓰면 안되는 이름입니다. 

int int = 3;  -->WRONG

이렇게 해놓으면 int가 변수명인지, 아니면 정수를 저장하기 위해 4바이트를 할당해놓으라는 타입인지 프로그램이 구별할 길이 없잖아요? ㅎㅎ 보통 이런 것들은 에디터에서 사용하게 되면 다른 색깔로 표시되어서 쉽게 구분할 수 있습니다. 그러므로 이런 것들을 쓰면 안되는구나~ 정도로 자바의 경우만 간단히 훑고 넘어갈게요

<자바의 경우>

abstract

default

if

import

package

this

assert

do

public

goto

private

throw

boolean

transient

double

implements

protected

throws

true

break

else

byte

enum

return

instanceof

case

extends

int

short

try

char

final

long

strictfp

volatile

class

finally

native

super

while

const

float

new

switch

continue

for

null

synchronized

 

 

변수 표기법 (코딩 스타일)

많은 프로그래머들이 변수 이름을 어떻게 지을까를 고민했었고..

변수 표기법 또는 코딩 스타일이라고 해서 소스코드 작성할 때 이렇게 모두가 동일하게 좀 통일시켜서 보기 편하게 하자 한거죠 ㅎㅎ 결국 내가 짠 코드를 남이 봤을 때도 이해하기 쉽고, 유지 보수를 용이하게 하기 위해서 생긴 규칙들입니다.

 

대표적인 표기법은 네 가지가 있습니다. (종류로 따지면 더 많아요 ㅎㅎ)

● 카멜 표기법 (Camel Case)

● 파스칼 표기법 (Pascal Case)

● 스네이크 표기법 (Snake Case)

● 헝가리안 표기법 (Hungarian Case)

 

카멜표기법

그 중 가장 유명한 건 카멜 표기법이예요.

요 사진처럼 표기법이 낙타의 등모습을 닮았다고 해서 카넬표기법입니다.

시작은 소문자로 시작하지만 여러 단어가 이어지는 경우 첫 단어를 제외하고 각 단어의 첫 글자만 대문자로지정하는 방식입니다.

int colorFrame;

요런식으로요 ㅎㅎ자바, C# 등등의 언어들은 이런 카멜표기법을 권장하고 있습니다.

파스칼표기법

카멜표기법과 매우 유사한 파스칼 표기법이예요. 카멜이 맨 첫 단어는 모두 소문자로 구성했다면, 파스칼은 모든 단어의 첫 번째 글자를 대문자로 선언합니다.

int ColorFrame;

파스칼표기법은 네임스페이스, 이벤트, 프로퍼티, 클래스 네임을 지정할 때 주로 사용됩니다. 카멜표기법과 파스칼표기법을 가장 많이 사용하시게 될거예요.

스네이크 표기법

스네이크 표기법은 언더바 표기법이라고도 하는, int color_frame 이런식으로 단어 사이에 밑줄을 넣어주는 형태입니다. (C++에서 권장해서 많이 사용되고 있는 형태이죠 ㅎㅎ)

헝가리안 표기법

접두어에 자료형을 붙이는 방식입니다.

(Ex. strName, szName 등, 여기서 sz는 'NULL로 끝나는 문자열'을 의미하는 접두어입니다.)

 

마이크로소프트 개발자 중 헝가리 사람의 프로그래머가 쓰던 변수 명명법입니다. MS 내부에서 따라 사용하기 시작하던 것이 점차 전세계로 퍼져감으로써 코딩시 변수 명명의 표준이 되었습니다. 예전에야 디스플레이가 작아서 타입을 알기 힘들었는데, 요새는 화면이 커지면서 한 눈에 볼 수 있는 코드 양도 많아지고 IDE가 눈부시게 발전하면서 마우스 커서만 올리면 해당 변수의 데이터 타입을 알 수 있기 때문에 헝가리안 표기법은 권장하고 있지 않습니다.

 

WPF등 프로젝트를 할 때 컨트롤 박스 이름에서 자주 보실 수 있습니다.

txtMyName 이런식으로요 ㅎㅎ

 

cf. 참고로 여기 가면 구글에서 권장하는 C++코딩 스타일 가이드를 보실 수 있습니다.

요기는 구글에서 권장하는 JAVA 코딩 카이드입니다.

마무리..변수 이름 짓기에 관해서

그 프로그래머들 사이에서 가장 골치아픈게 변수이름 짓기라는 말이 있을 정도로ㅎㅎㅎ 근데 팩트라는거..ㅋㅋ

나중에 개발을 좀 많이 하다보면..? 변수이름 짓는 것 때문에 매우 골치아플거예요...

출처:  https://www.clien.net/service/board/park/6586198

초반에 프로그래밍 시작할때는 그냥 변수명을 a,b,c 또는 x,y,z등으로 간단하게 하니까, 이게 이렇게 중요한 일이라는걸 잘 모르죠 ㅎㅎ 저도 모름.. ㅋㅋ

그 개발을 하다보면 진짜 진짜 유사한 기능인데 중요하게 달라.. 이런 진짜 애매한 변수들이 많아요

이거를 다 구별짓는 게 너무 힘듭니다 ㅎㅎㅎ

이런 것들을 잘 지어나야, 나중에 봐도 아 이런 코드구나 이해할 수 있는 핵심이 됩니다.

저도 지금 몇년전 코드 보면 이게 뭘 위한 변수인지.. 어떤 로직인지.. 하나도 이해가 안가더라고요...ㅎㅎㅎ

모든 것들을 다 주석에 넣는 것이 아니라, 주석은 정말 필수적인 정보들로 채우고, 변수명을 알아보기 쉽게 잘 짓는게 정말 가독성 높은 프로그램을 개발하는 핵심이 됩니다. ㅎㅎ

그 변수가 하는 역할과 일이 변수명에 명확히 드러나서 나중에 보더라도 바로 이해할 수 있는 변수명이 정말 잘 지은 식별자가 되는겁니다! (참고로 저는 이름 잘 못짓습니다 ㅠㅠ )

 

참고하면 좋을 글?: 개발자를 위한 좋은 이름, 나쁜이름, 이상한 이름.

오늘은 여기까지예요 ㅎㅎ

감사합니다 :)