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() {..
Class
class에서 사용되는 static은 앞선 챕터에서 다루었던 빌드의 링크 프로세스에서 사용되는 static과는 다른 의미이다. static의 사용 예시는 다음과 같은 3가지 경우로 나누어 볼 수 있다. 1. static member function (static 멤버 함수) 2. static member variable (static 멤버 변수) 3. static variable in a function. (함수 안의 static 변수) 1. static member function 1) static member function은 object와 연관되어 있지 않다! 이 코드에서처럼 멤버 함수는 굳이 object를 만들지 않아도 콜 할 수 있다. 멤버 함수가 굳이 객체를 만들지 않아도 콜 할 수 있는 이유..
C++의 OOP란, 객체Object 가 중심이 되서 프로그래밍하는 패러다임. C++ 는 여러가지 패러다임을 제공해 주는 멀티 패러다임 언어이다. 1) procedural 2) functional 3) OOP - ( Object-Oriented Programming ) 4) generic 를 모두 지원해 준다. 그 중에서도 OOP가 중심이 되는 언어가 C++이다. 또 다른 OOP 중심 언어는, java, C#, python 이 있다. C++의 OOP는 class를 중심으로 구현하게 되므로, 먼저 object와 class가 어떻게 다른지 이해해야 한다. 1. class와 object의 차이 class: definition. -Cat object: 메모리에 공간을 차지하고 있는 객체 하나하나를 지칭. -kit..
Struct의 size 이런 경우에는 8 + 4 + 2 = 14 bytes 일 거라고 예상하기 쉽지만 그 이유는 메모리 엑세스 패턴 때문에 컴파일러가 padding 패딩을 사이에 넣어주기 때문이다. 구조체 struct나 클래스 class의 경우에는 padding이 들어가게 되기 때문이다. 클래스/구조체 멤버 정렬 - padding _ 링크 Class의 size : function은 class의 size와 관계 없다. Cat 포인터를 저장하는 변수 catPtr를 하나 만들고 cat1의 주소를 넣어주고 catPtr 의 크기를 출력해보는 프로그램을 만들어보자. 포인터의 경우에는 타입과는 상관없이 항상 8 bytes를 갖는다. (64bit) -> 그 이유는, 포인터는 격자무늬 메모리 구조에서 각각의 주소를 나타..
***혹시 구조체 struct 에 대해서 잘 모르시는 분들은 미리 struct에 대해서 공부한 후에 보세요!*** 구조체 struct, 구조체 응용(*포인터 인수로 사용하기) 1. 클래스의 원리 클래스에 대한 접근은, 현실 세계에 존재하는 특정한 '사물'이 어떠한 일반적인 요소를 가지고 있는지를 관찰하는 것부터 시작된다. 예를 들어, '자동차'라는 사물을 프로그램으로 표현한다고 생각해 보면, 자동차는 차량 번호를 가지고 있을 것이고 어느 정도 양의 연료를 싣고 있을 것이다. 또한 자동차는 차량 번호를 결정하고, 자동차에 연료를 넣고, 차량 번호와 남은 연료의 양을 표시하기 등의 기능을 가지고 있을 것이다. 클래스란, 이러한 사물의 상태 및 특성, 그와 관련된 기능을 정리하여 프로그램으로 표현하기 위해 사..