반응형

 

 

 

 

[리뷰] C#린이, 기본 참고서로 시작하세요 C# 프로그래밍 읽어봄

wpf, uwp를 c#과 xaml을 사용해서 만들어 본적은 있으나 사실 C# 기본적인 문법에 관해서는 많이 부족한 편이었다 기존에는 기능을 구현하기 위해 스택오버플로우의 글들을 많이 참고를 했으나 사실

studyingpingu.tistory.com

 

 

시작하세요 C# 프로그래밍 챕터 3장 C# 기초 정리한 내용

 

 

 

 

닷넷 변수 종류 (크게 2가지로 나뉨)

- 값 형식 (Value Type)의 변수, 참조 형식(Reference Type)의 변수

 

값/참조 형식의 차이를 이해하기 위해서는 스택(Stack)과 힙(Heap)의 이해가 필요하다

 


 

윈도우 프로그램은 기본적으로 하나의 스레드를 갖는다

그리고, 개별 스레드마다 전용으로 사용할 수 있는 저장소가 메모리에 할당되는데,

이러한 영역을 스택이라고 한다

 

반대로, 힙은 프로그램에 필요에 의해, 메모리를 요청할 때 사용할 수 있는 저장소

닷넷에서는 CLR(Common Language Runtime)이 직접 힙을 관리한다

 

 

메모리를 사용한 후에는, 더이상 사용하지않는 다는 표현이 필요한데, 할당만 받고 해제를 하지않으면

메모리에 빈자리가 없어 프로그램 실행 중 오류가 발생하게 되기 때문이다

 

 

개발자가 스택에 변수를 선언하는 것 만으로, 스택 내의 특정 메모리 영역을 사용할 수 있게

C# 컴파일러가 자동 할당과 해제를 해준다.

따라서 스택의 메모리를 할당하고 해제하는것은 직접 하지않아도 된다

 

하지만 힙에 메모리를 할당하는 것은, 개발자가 명시적으로 요청한 것이므로 해제하는 과정이 필요하다

 

이러한 해제 과정에서 네이티브 환경과 관리 환경이 구분된다

 

 

기존의 네이티브 환경에서는 C/C++ 에서는 메모리 할당과 해제를 반드시 처리해주어야 했는데

C#은 개발자는 오직 할당만 하고 해제는 관리 환경 내의 특정 구성요소가 담당해준다

 

이러한 것을 가비지 수집기 (Garbage Collector)라고 한다

 

 


 

값 형식을 가리키는 변수

값 형식 변수는, 값 자체가 스택 영역에 할당되고 변수는 그 메모리를 가리킨다

 

값 형식 : sbyte, byte, char, short, ushort, int, uint, ulong, float, double, decimal, bool

 

 

 

값 형식

 

 

참조 형식을 가리키는 변수

변수 값을 담기 위해 힙 영역을 추가로 할당한 다음, 스택에서 그 힙의 주소를 가리킨다

참조 형식 : string, class, object

 

참조 형식

 

번외)

값을 할당하지 않은 string 변수 (참조 형식 변수) 는 어떤 값을 가질까?

 

string text;

위 처럼 값을 할당하지 않은 경우, 스택 변수는 0을 담고 있다

= 가리킬 수 있는 힙 주소가 없는 경우이다

 

하지만 참조형 변수에 숫자 0을 대입할 수는 없어서 C# 은 null 예약어를 사용한다

 

아스키코드 0이 null이기 때문인듯

 

 

string text1;
string text2 = null;

따라서 위의 2가지 선언 모두 스택변수에 숫자 0을 갖고있다

 

 

추가로, 더는 사용되지 않음을 명시하기 위해 null을 할당하기도 한다

string name = "C#";
name = null;

 

 

 


 

값 형식과 참조 형식의 차이점

  1. 값을 스택에 저장하는지, 힙에 저장하는지
  2. 변수의 값을 다른 변수에 대입한 경우 메모리의 표현 방법
  3. 기본 값

 

스택 저장과 힙 저장

값 형식은 변수 타입에 해당하는 값을 스택에 저장하지만,

 

참조 형식은 그 값을 담기 위해, 별도로 힙 영역의 메모리를 할당하고,

스택의 변수 값은 다시 힙의 데이터 주소를 가리키게 한다

 

 

변수에 대입 시 메모리 처리

int n1 = 5;
int n2 = n1;

Console.WriteLine(n1); // 5
Console.WriteLine(n2); // 5

string txt1 = "C#";
string txt2 = txt1;

Console.WriteLine(txt1); //C#
Console.WriteLine(txt2); //C#

 

출력은 n1, n2가 같고 txt1, txt2가 같지만

값 형식과 참조 형식에 따라 메모리 표현 방식이 다음과 같이 다르다

 

 

 

값 형식인 n1, n2의 경우 동일한 값이 다른 스택 영역에 복사되었지만

참조 형식인 txt1, txt2는 같은 힙 영역을 다른 스택영역에서 가리킨다

 

 

 

기본 값

 

값 형식 변수는 무조건 메모리가 할당되므로 메모리 영역에 필연적으로 기본 값(default value)을 갖게된다

닷넷은 자료형에 메모리를 할당하면 값을 무조건 0으로 초기화 시키며

 

 

참조 형식의 경우 모두 null 값을 가진다

bool result; // result에는 false 값이 기본값으로 지정된다
int n;       // n에는 0이 들어있다
string txt;  // txt에는 null 값이 지정된다

 

 

 

참고 :

 

기타: 34. 도서: 시작하세요! C# 프로그래밍: 기본 문법부터 실전 예제까지

 

www.sysnet.pe.kr

 

 

 

ASCII - 위키백과, 우리 모두의 백과사전

1972 프린터 사용 설명서에 개시된 아스키 코드 차트표 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( , 아스키)는 영문 알파벳을 사용하는 대표적인 문자

ko.wikipedia.org

 

반응형
반응형

wpf, uwp를 c#과 xaml을 사용해서 만들어 본적은 있으나

사실 C# 기본적인 문법에 관해서는 많이 부족한 편이었다

 

기존에는 기능을 구현하기 위해 스택오버플로우의 글들을 많이 참고를 했으나

사실 그것도 ctrl c ctrl v에 집중되었지 크게 개념을 이해하고 구현한건 아닌 표현들이 많았다

 

그러다보니 이성보다 본능적으로 터득한 위주로 기능 위주의 구현을 했는데

 

최근에 좀더 이론에 관련된 지식이 요구될때가 많아져

몇년전에 구입해둔 이 "시작하세요 C# 7.1 프로그래밍"을 다시 펼쳐서 읽어봤더니

 

오히려 그때 복붙했던 개념들을 역으로 이해하기 쉬웠고

기존에는 msdn에 다 정리되었던 내용이었고, 다른 기타 블로그에서도 많이 보았던 내용이었으나

 

그때 와닿지 않았던 추상적 개념을 굉장히 쉽게 이해가도록

예시나 코드를 잘 설명해준 책이라고 생각되어 후기를 기록해본다

 

 

800 페이지가 넘는 책을 다 읽어보진 않았고 특정 목차를 먼저 읽는 중이라

전체적인 감상은 아니지만 C# 문법을 익히기에 부담없이 읽을수있는 책이라고 생각한다

 

 

 

알찬 목차들

 

이 외의 목차는 https://coupa.ng/b87BOB 참고하자

 

위키북스 시작하세요 C# 9.0 프로그래밍 +미니수첩제공

COUPANG

www.coupang.com

최근 C# 10.0까지 업데이트된 상태다 보니 이미 내가 가진 7.1은 구시대 유물이 되어버렸다

책은 9.0까지 나와있으니 최신버전으로 구매해서 참고하면 되겠다

 

 

몰랐는데 가끔 C#, wpf에 관해 검색했을 때마다 마주했던

https://www.sysnet.pe.kr/ 이분의 책이었음

 

J & J - 정성태의 닷넷 이야기

2021.02.05 C# 9.0 개정판 2019.11.25 C# 8.0 개정판 2019.07.23 이메일 주소 변경 기존 천리안 계정에서 techsharer@outlook.com 주소로 변경합니다. 2019.05.08 C# 7.3 개정판 2018.08.26 게시판 내용 검색 기능 추가 "Google

www.sysnet.pe.kr

 

 

 

매번 OOP라는 단어를 듣지만, 왜 객체지향을 해야하는지에 좀더 단순히 와닿는 표현인듯

 

 

이런식으로 당장 이해하지 않아도 되는 표현들은 가볍게만 짚어주어 부담도 덜하다

 

 

초보자도 구문이해가 쉽도록 설명을 잘 풀어서 해주시니까

참고서로 이용하기에 제격인듯싶다

 

 

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형

+ Recent posts