안녕하세요. 다시 시작하는 "투명 나비" 입니다
마지막 진도에서는 일반화 컬렉션(Generalization Collection)까지 배웠습니다.
리스트 (List<T>)는 필요에 따라 크기가 동적으로 증가하는 개체 배열을 나타내고,
딕셔너리(Dictionary<TKey, TValue>)는 키의 해시 코드에 따라 구성된 키/값 쌍의 컬렉션을 나타내고,
큐(Queue<T>)는 FIFO(선입선출) 방식의 개체 컬렉션을 나타내고,
스택(Stack<T>)은 LIFO(후입선출) 방식의 개체 컬렉션을 나타냅니다
위 4개가 전부 일반화 컬랙션에 해당합니다
이번시간에는 조금 다른 변수(Variable) 에 대해서 자세히 알아 보도록 하겠습니다.
변수는 모든 프로그래밍 언어에서 기초가 되는 개념입니다.
변수(Variable)
변수에 개념은 "변하는 수" 입니다.
(유튜브 "스타디 코드" 체널 내용중)
저는 이 설명이 가장 적절 하다고 생각 합니다.
C#에서 변수는 정보를 담을 수 있는 상자입니다.
컴퓨터는 0과 1(전기가 들어온다, 안온다)만 인식이 가능합니다.
그리고 0과1들을 여러방식으로 섞어서, 우리가 사용하는 언어를 표현합니다.
예를 들면 'a'는 ASCII에서 1100001으로 표현 할 수 있습니다.
그리고 자료형(Data Type)에 나와 있듯이, 여려가지 타입으로 이루어져 있습니다.
이렇게 여러 정보를 담을수 있고, 그 정보가 변할 수도 있다 내용입니다.
모든 코딩은 Low-Level에서 결국 숫자로 표현 되니,
변 - 변할수 있는, 수 - 숫자 인것 같습니다.
변수를 사용하는 이유는 내가 원하는 데이터(information)를 계속 사용하기 위한게 큰 거 같습니다.
그래서 몇일 뒤에 다시 코딩을 해도, 내가 알아보기 쉽게 이름을 짓는 것도 중요합니다.
포스팅 마지막 쯤에 조금 더 자세히 예시도 넣어 설명드리겠습니다.
변수의 기본 형태
변수는 "선언"과 "초기화" 로 이루어져 있습니다.
선언은 내가 이런 타입에 변수를 쓸꺼다 라고 알려주는것에 가깝습니다.
데이터 타입 + 변수이름 ( + " ; ")으로 이루어져 있고,
초기화는 변수(라는 이름의 상자)에 어떠한 값을 넣어두는것 와 가깝습니다.
(초기)값으로 이루어져 있습니다.
위 예시는 선언과 초기화를 한줄의 코드로 작성한 것입니다.
여러가지 상황에 따라 선언과 초기화를 같이 하기도 하고, 따로 하기도 합니다.
변수는 코드 위치에 따라 여러가지 부르는 이름이 다릅니다.
(변수가 정보를 얼마나 오래 담고 있는 냐에 따라 구분 됩니다.)
1. 전역변수(Global Variable) 또는 필드(Fields)
2. 지역변수 또는 로컬변수(Local Variable),
3. 매개변수(Parameters) 로 구분될수 있습니다.
전역변수는 클래스안, 함수 밖에 존재합니다.
지역변수는 함수안에 존재합니다
매개변수는 함수에서 받는 정보에 존재합니다.
변수는 사용되는 문맥이나 역할에 따라 구분하지만,
구분하는게 크게 의미는 없는거 같습니다.
선언과 초기화 사용 구분법(개인적인 경험)
선언만 하는 경우는 보통 클래스 내부에 전역변수로 사용하는 경우가 많은 것 같습니다.
게임으로 비유하면 캐릭터 hp가 되겠네요.
데미지를 받으면(함수 호출시) hp가 줄어드는데, 줄어든 hp를 전역변수로 가지고 있어야,
hp 회복이나, 다시 데미지를 받는 경우(여러 hp값이 변동되는 함수 호출시) 다시 hp 값이 변동되고,
변동된 hp를 게임화면에 계속 보여주기도 해야 합니다.
이렇게 하나의 정보(변수)를 여러곳에서 사용할때 선언만 사용합니다.
초기화를 사용하는 경우는 2가지가 있습니다.
먼저 Default 값(초기값)으로 지정하는 되는 경우
초기화를 하지 않고, 선언만 하는 경우 변수에 들어가는 최초 정보(값)입니다.
자료형에 따라 다른 값들이 저장됩니다. int는 숫자 0, string은 "", bool 은 False값을 갖습니다.
직접 초기화 하는 경우
내가 원하는 값으로 계속 변경(업데이트)하는 경우 사용합니다.
대부분 함수 내부에서 지역변수로 사용합니다.
변수의 장점
지금까지 변수가 어떤것이고, 어떻게 사용되는지 기초적인 부분을 배웠습니다.
조금 더 나아가 개념적 장점에 대해 설명드리겠습니다.
모든 코드는 결국 0과1로 컴퓨터가 이해?합니다.
그래서 기본 자료형(DataType)을 뿐만 아니라,
자료들의 모음인 "배열", 이후에 포스팅할 함수, 클래스 등의 모든 정보를 담을 수 있습니다.
변수이름도 가지고 있는 값을 부르는 별명 같은 겁니다.
실제 여러가지 정보들을 카테고리화 해서 한 변수에 넣고,
동시에 여러 작업이나 정보를 간단하게 사용할수 있게 해줍니다.
이러한 방법이 더 나아가면 "디자인 패턴, 알고리즘" 등으로 조금 더 전문적으로 세분화 됩니다.
변수의 단점
장점이 단점입니다.
변수는 내용물이 계속 변하기에 변수입니다. 하지만 값이 변하지 않아야 하는 상황도 생깁니다.
기준을 예로 들면 파이(π)는 3.14로 정해져 있고, 각 고유의 이름들도 변하지 않습니다.
이럴때 값이 계속 변하는 변수를 사용하는것은 적절치 못합니다.
물론, 초기값을 주고 값을 변경 안하는 사용방법도 있지만,
실제 메모리내부에서 변수가 어떻게 작동하는지, 또 팀단위 프로젝트시 원하지 않는 값으로 변수가 바끼는 경우도 있습니다.이러한 경우를 보완하기 위해 많은 방법들이 만들어 졌습니다.
번외 : 변수이름 잘짓기
위에 설명했듯이, 우리가 변수를 사용하는 이유는 앞으로도 해당 정보를 계속 쓰고, 업데이트 하기 위함입니다.
그래서 변수 이름만 봐도 무슨 정보인지 아는게 중요합니다.
변수 이름을 지을 땐 첫째로, 변수가 사용되는 목적을 설명하는 의미 있는 이름을 사용하는게 좋습니다.
숫자의 경우 num을 많이 쓰는데, number(숫자)의 줄임말입니다.
잠시 사용하는 경우 temp를 붙이기도 합니다. tempNum 이런식으로 말이죠
이름짓는 방식은 유명한 방식중 캐멜 표기법(camelCase) 방식이 좋습니다.
문자와 문자 사이에 첫글자는 대문자로 쓰는 방식입니다.
낙타혹과 닮았다고 해서 지어진 이름으로 알고 있습니다.
위에 tempNum이 그 예입니다. .
대학교에서 배울때, 이렇게 적으면 과학적으로 가독성이 올라간다고 배웠습니다.
또, 회사마다 코딩 적는 규칙들이 따로 있는걸로 알고 있습니다.
제가 평소에 좋아해서 자주 보던 포프TV에서 개설한 POCU 아카데미 수업을 들었을때,
김포프님이 주셨던 "C# 코딩 스텐다드"가 저는 좋은 예인것 같습니다.
제가 공유해도 되는지 몰라서, 공유는 못하지만, 인터넷에서 찾으면 아마 구하실수 있을겁니다.
하나를 예로들면 bool 타입의 자료형을 쓸때는 변수 이름에 is를 붙이는 방식입니다.
isReady이런 식으로 변수이름을 붙이면, 이 변수의 값이 true 또는 false인걸 알 수 있습니다.
잡담
개인적으로 오랬동안 포프TV를 봤던 나름 애청자?입니다.
코딩, 게임개발, 현업, 면접 등에 대한 자신의 생각을 말하는 영상인데,
저와 생각이 비슷하고, 논리적이게 내용을 전달하는게 참 좋았습니다.
여러 재밌는 영상들 "프로그래머가 수학을 못하면", "쥬니어 회사생활 살아남기"시리즈 등 많은 영상들이 있으니 한번씩 보시면 좋을 것 같습니다. 제가 정리하는 글들도 포프TV에서 영향을 많이 받았습니다.
https://www.youtube.com/watch?v=yMQncICQFYs
https://www.youtube.com/watch?v=0fvLIcLP2r8
투명나비의 후기
이번 포스팅도 7시간 넘게 오랬동안 작업했네요.....
더 좋은 방법, 설명, 그림 등을 고민하고 만드는데 블로그가 쉽지 않은것 같습니다.
그래도 하다보면 포스팅 하는 시간이 짧아질것이라는 희망에 걸어보겠습니다.
언제 수익신청하나... 앞으로 18개 글은 더 올려야하는데....
그래도 이렇게 또 하나 끝났습니다.
변수에 대해 생각보다 적을게 많다보니, 더 쓰고 싶은데..
다른 포스팅에 다른 내용들과 함께 더 설명할 예정입니다.
다음 포스팅은 변수의 단점에 대해 보완하는 "상수(기초)" 편을 올릴 예정입니다.
인터넷에서 여러 자료를 참고해서 제 입맛 데로 만들었기 때문에, 누락된 부분이나, 간략하게 설명한 부분도 있습니다.
만약 틀린 부분이나 추가해야 하는 부분을 알려주시면 빠르게 수정하겠습니다.
(물론 응원 댓글?은 더욱 좋아합니다.ㅎㅎㅎ)
참고
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/statements/declarations
https://www.youtube.com/@PopeTV
'C# 코딩 기초' 카테고리의 다른 글
C# 기초 05.1 – 상수(Const) (0) | 2024.04.11 |
---|---|
C# 기초 블로그 업데이트 순서 (0) | 2024.04.05 |
C# 기초 03.2 - 스택(Stack)과 힙(Heap) (0) | 2020.01.01 |
C# 기초 03.1 - 박싱(Boxing)과 언박싱(UnBoxing) (0) | 2019.12.17 |
C# 기초 04 - 일반화 컬렉션(Generalization Collection) (0) | 2019.12.07 |