ref out 게시글에서 복사와 참조에 대하여 잠깐 다뤘었다. C++ 게시글에서 심도 있게 다루었던 내용이지만, C#에서도 한번 정리하고 넘어가야 맘이 편할 것 같아서 이번 게시글에서는 복사와 참조, 깊은 복사에 대해 다뤄보려고 한다. Struct 복사, Class 참조 우선 c#에서 struct는 기본적으로 복사를 하고, class는 참조를 한다. 예시를 통해 살펴보자. using System.Numerics; namespace CSharp { class Program { class Warrior { public int hp; public int attack; public void Move() { Console.WriteLine("Warrior Move"); } public void Attack() {..
struct
Struct의 size 이런 경우에는 8 + 4 + 2 = 14 bytes 일 거라고 예상하기 쉽지만 그 이유는 메모리 엑세스 패턴 때문에 컴파일러가 padding 패딩을 사이에 넣어주기 때문이다. 구조체 struct나 클래스 class의 경우에는 padding이 들어가게 되기 때문이다. 클래스/구조체 멤버 정렬 - padding _ 링크 Class의 size : function은 class의 size와 관계 없다. Cat 포인터를 저장하는 변수 catPtr를 하나 만들고 cat1의 주소를 넣어주고 catPtr 의 크기를 출력해보는 프로그램을 만들어보자. 포인터의 경우에는 타입과는 상관없이 항상 8 bytes를 갖는다. (64bit) -> 그 이유는, 포인터는 격자무늬 메모리 구조에서 각각의 주소를 나타..
공용체형의 원리 이해하기 공용체 (union data type)라는 형은, 구조체형과 그 스타일이 매우 흡사한 사용자 정의형이다. 공용체형의 선언 union 공용체형명 { 형명 식별자; 형명 식별자; .... }; 공용체형의 구문은 구조체형과 매우 비슷하다. struct 키워드 대신에 union 키워드를 사용하면 된다! 공용체 또한 공용체형 변수를 선언해서 값을 저장할 수 있다. 단, 공용체형의 모든 멤버는 저장 공간을 공유하므로 -공용체에는 값을 한번에 하나만 저장시킬 수 있다.- 라는 특징이 있다. 다음 코드를 통해 확인해 보자. 이 코드에는 공용체형 union Year가 새롭게 선언되어서 형으로 사용되고 있다. 또한, 공용체형 변수 myyear을 선언한 후, myyear에 접근하고 있다. 코드의 실..
1. 구조체형의 원리 이전 글에서 배운 사용자 정의형 enum과 같이, 구조체형(structure data type) 또한 프로그래머가 만들 수 있는 사용자 정의형 중의 하나이다. 구조체형은 다른 형들을 묶어주는 기능이 있는 것이 특징이다. 예를 들어, 차량 번호(int형)와 연료의 양(double형)과 같은 다른 형의 값을 하나로 묶어서 차의 기본적인 속성을 표현할 수 있는 것이다. (쉽게 이해하면, 차 라는 물체를 코드로 구현해 주는 것이다.) 구조체에 어떤 형을 묶을지 결정하는 일을 구조체형 선언이라고 한다. 구조체를 선언할 때에는 struct 키워드를 사용한다. 구조체형의 선언 struct 구조체형명 { 형명 식별자; 형명 식별자; .......... }; 구조체형은 블록 안에 변수와 같은 요소들..
1. typedef typedef라는 키워드는, int형, double형과 같은 일반형에 별명을 붙여주는 키워드이다. typedef 형명 식별자; 예를 들어, 이 코드는 unsigned long int형에 Count 라는 짧은 이름을 붙여준다. 이처럼 typedef를 사용하면 다음과 같이 'Count'형 변수 num을 사용할 수 있게 된다. 이 문장의 뜻은 다음 코드와 같다. 즉, typedef를 사용하면, 이미 존재하는 형에 별명을 붙일 수 있는 것이다. typedef를 사용하면 긴 형명에 별명을 붙일 수 있기 떄문에 코드의 가독성을 높일 수 있다. 2. 열거 enum C++는 프로그래머가 새로운 형을 만들수 있도록 도와준다. 프로그래머가 만든 형을 사용자 정의형(user-defined type)이라고..