728x90

프로그래밍/C# 21

깊은 복사와 얕은 복사 / 구조체와 클래스 / 값 형식과 참조 형식

값 형식과 참조 형식의 결정적인 차이점은 인스턴스의 대입이 일어날때 뚜렷해진다. struct (구조체) : 깊은 복사 => 값 형식 class (클래스) : 얕은 복사 => 참조 형식 값 형식은 값 전체가 메모리 (스택) 영역에서 복사가 된다. 따라서 구조체를 복사할 경우 내용 전체가 복사된다고 생각하면 된다. 참조 형식은 값은 힙 영역에 있고 스택영역에 힙 영역을 가리키는 주소값을 저장하는 형식이다. 밖에서 호출을 할경우 스택영역의 주소값을 호출하고, 해당 주소(힙영역)에 있는 값을 불러온다. 따라서 클래스 복사할 경우 주소값을 복사하는것이기 때문에, 원치 않는 수정이 일어날 수 있다. 1. 일반적으로 모든 사용자 정의 타입은 클래스로 구현한다. 2. 선택적으로 구조체로 구현한다. 3. 참조형식은 가비..

프로그래밍/C# 2023.10.08

.NET Framework(닷넷 프레임워크)에 대해 알아보자

시작하세요 C# 10 프로그래밍의 책을 보고 공부한 내용을 정리하였습니다. 1. 닷넷 프레임워크 일반적인 네이티브 언어로 만들어진 프로그램들이 운영체제에서 곧바로 실행되는 것과 달리 닷넷 프레임워크를 기반으로 만들어진 응용 프로그램은 반드시 닷넷 프레임워크가 미리 설치된 환경에서만 실행된다. CLR(Common Language Runtime) : EXE가 실행되면 메모리에 함께 들어가서 실행된다. 닷넷 프로그램은 외형상 EXE/DLL로 기존 프로그램과 동일한 구조이다. 하지만 내부적으로는 CLR 구성요소가 로드돼 실행되고, 그 CLR이 EXE/DLL에 함께 저장돼 있는 닷넷 코드를 실행한다. 2. C#입장에서의 닷넷 프레임워크 C# 컴파일러는 소스코드를 기계어가 아닌 IL(intermediate lang..

프로그래밍/C# 2023.09.16

[C#] 일반화 프로그래밍_ <T>의 마법

1. 일반화 프로그래밍이 필요한 이유 프로그래밍을 하다보면 함수나 클래스끼리 내부의 내용은 같은데, 매개변수의 형식만 다른 경우가 생길 때가 있다. 그때 일반화 프로그래밍을 접목시키면 수십개의 데이터타입을 다시 명시하여 함수나 클래스를 생성해줄 필요 없이 선언시에만 데이터타입을 선언해주며 함수와 클래스를 이용할 수 있다. 그래서 의 마법이다. 2. 일반화 메소드 // where을 이용하면 제한을 걸 수 있다. 이제 여기에 들어올수 있는 타입은 customClass를 상속받은 타입이어야 한다. // 이부분이 var와 다르다. static void PrintValue(T anyValue) where T: customClass { anyValue.PrintPosition(); Console.WriteLine(..

프로그래밍/C# 2023.06.23

튜플이란? 튜플 사용법

튜플 - 여러 필드를 담을 수 있는 구조체 - 데이터 형식이 따로 있는것은 아니며 ( )안에 2개이상의 필드를 지정함으로써 구성된다. - 구조체로써 값 형식이다. - 즉석에서 사용할 복합 데이터 형식을 선언할때 적합하다. static void tuple() { //튜플 선언하는 법 : 그냥 값 두개가 덩그러니 놓여있다는것이 튜플이다. (int xPos, int yPos) playerPosition = (0, 1); //튜플 값 바꾸는법 playerPosition.xPos = 10; playerPosition.yPos = 10; Console.WriteLine("player position: {0} {1}", playerPosition.xPos, playerPosition.yPos); //튜플 스왑하는 법..

프로그래밍/C# 2023.06.23

깊은 복사와 얕은 복사

깊은복사 = 값을 복사해 와서 내 마음대로 사용하는것 (복사해온 값을 변경해도 원본에 영향을 주지 않는다.) 얕은복사 = 값을 참조해 오는것 (복사해온 값을 변경하면 원본에 영향을 준다.) C++을 하며 배웠던 call by value와 call by reference와 같은 개념인것 같다. 다만, C#에서 Class를 하며 해당 오류를 겪을 수 있다. Class는 태생 자체가 참조형식이다 보니 아래와 같은 코드에서 값을 잘못 예상할 수 있다. class ShallowCopy { public int num1; public int num2; } void main(str) { ShallowCopy object = new ShallowCopy(); object.num1 = 1; object.num2 = 2; ..

프로그래밍/C# 2023.06.23

[C#] Nullable 형식

Nullable 형식은 null값을 받지 못하는 값 형식을 ?를 붙여서 이제 null값을 받을 수 있게 만들어주는것이다. 데이터형식? 변수이름; 데이터형식 뒤에 ?가 붙은것이 보인다면 저것이 데이터형식을 Nullable로 만들어준다. 이제 저 변수 뒤에는 null값이 들어갈 수 있다. 나는 아직 어떤상황에서 써야할지 감이 오지 않지만 프로그래밍을 하다보면 어떤 값도 가지지 않는 변수가 필요할 때가 있다고 한다. 그때 사용하면 된다.

프로그래밍/C# 2023.06.22

[C#] String을 분할하는 Split 이용하기(문자열 내맘대로 분할)

static void split() { //이것이 문자열을 스플릿 하는 기능이다. msdn을 찾아보자 string strValue = "I am a boy."; strValue.Split(' '); //구분자 ->> 마우스를 가져다 대보자, saparator를 볼 수 있다 string[] strArray = strValue.Split(' '); Console.WriteLine("몇 개로 스플릿 되었는? -> {0}", strArray.Count()); Console.WriteLine(); foreach (string str_ in strArray) { Console.WriteLine("{0}", str_); } } string 값을 받은뒤, 일정한 문자로 문장을 분할시킬 수 있다. 위의 예제에서는 " "..

프로그래밍/C# 2023.06.22

[C#] Interface(인터페이스),abstract class(추상클래스)

1. Interface (인터페이스) 먼저 인터페이스는 메소드(함수)의 구현을 하지 않는다.(내용을 채워넣지 않는다는 뜻이다.) 또한 객체를 생성하지도 않으며 필드를 갖지도 않는다. 단지 메소드를 적어놓기만 한다. 메소드를 적어놓기만 한다는 부분이 인터페이스를 클래스의 청사진이라고 볼 수 있는 이유이다. 인터페이스를 상속하는 클래스들은 인터페이스에 선언되어있는 메소드들을 모두 public으로 구현해야한다. 즉, 밑그림을 먼저 그려두면 인터페이스에 상속된 클래스들이 청사진을 따라 하나씩 메소드를 구현하기 때문에 어떤 기능이 필요할것 같다고 느낀다면 인터페이스에 적어둘 시에 해당 내용을 빠뜨리고 코드를 작성하는 오류를 방지할 수 있다. public interface 인터페이스이름 // 인터페이스이름 앞에는 ..

프로그래밍/C# 2023.06.22

VisualStudio C#에서 함수에 설명을 추가하는 방법

먼저 함수에 설명을 추가하는 이유는 이전 버전에서 사용을 해야하는 경우가 있을 수 도 있고, 경고를 하기에도 좋다. 다른 프로그래머나 또는 내가 기능을 어디에서나 쉽게 알 수 있도록 하기에도 좋은것으로 보인다. 마우스만 올리면 주석이 따라와서 보이기 때문이다. VisualStudio C#에서 함수에 설명을 추가하는 방법은 2가지가 있습니다. 1. Obsolete 사용 [Obsolete("\n이 함수는 아무런 기능이 없는 테스트 함수입니다.")] static void TestFunc001() { Console.WriteLine("함수 콜"); } 이런식으로 obsolete를 추가해주면 main에서 해당함수를 선언 후, 마우스를 위에 가져다 대면 "이 함수는 아무런 기능이 없는 테스트 함수입니다"라고 읽을 ..

프로그래밍/C# 2023.06.22

[C#] (글 수정필요) Partial 클래스, Extended 메소드

1. Partial Class - 클래스를 다른 파일로 나눠서 관리할 때 사용하는 기능이다. - 클래스에 Partial을 붙여서 사용한다. - 비록 파일은 나누어져있지만, 하나의 클래스라고 보면 된다. - 나눠진 파일에서 서로 같은이름의 함수를 선언하려고 하면 오류가 발생한다. - 나눠진 파일 이름에 +를 붙이고, 나눈 이유를 적는등으로 구분한다. - 예시: 수학 공식을 전부 정리해야하는 경우, 줄이 너무 길어지거나 복잡해질때, Partial을 이용하여 정수형이나 실수형 등으로 파일을 나누는 등으로 이용 2. Extended Method - 이미 존재하는 자료형에 내가 원하는 메서드를 추가하는 기능이다. // Define an interface named IMyInterface. namespace Def..

프로그래밍/C# 2023.06.21
728x90