728x90

프로그래밍 138

[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

[C#] 박싱,언박싱 / 업캐스팅, 다운캐스팅

1. 박싱 / 언박싱 1) 박싱 - 변수에 값을 대입할 때 일어나는 기능으로 상위 변수에 하위 변수를 대입하는 것을 의미한다. - 마치 상자에 어떤 물건을 넣는것이라고 생각하면 된다. - 하위 변수(물건)을 담을 상위 변수(상자)에 넣는것 - 보통 상위 변수는 object를 말한다. int number = 10; char charValue = 'A'; string textStr = "Hello world!"; //이것이 박싱이다. object canSaveAll1 = number; object canSaveAll2 = charValue; object canSaveAll3 = textStr; 2) 언박싱 - 상위 변수에 대입했던 하위변수를 본래의 자료형으로 되돌리며 꺼내는 것을 의미한다. - 상위 변수에 ..

프로그래밍/C# 2023.06.20

[C#] List<T>를 이용할때, 같은 값이 계속해서 출력되는 이유?

핵심은 List는 값을 참조해서 가져온다는 것이다. 참조하는 본체를 하나로만 두고 본체의 값을 변경한다면, List는 0~List.Count 값까지 전부 똑같이 변하게 된다. 아래 예시이다. List 리스트에 스트링배열을 넣어서 선언을 해주었는데 string[] cardMemory라는 변수로 while을 돌려서 List에 계속 값을 넣어주었다. 중간에 프린트를 찍어보았을때는 분명 값이 랜덤으로 들어간것으로 확인이 되었었는데 그런데 마지막에 출력시에는 같은값이 14개가 프린트가 되었다. 나는 랜덤값으로 계속 cardMemory를 초기화 해준것으로 생각했으나 그것이 아니었다. cardMemory를 초기화 해주기 위해서는 new를 이용하여 새로 할당해주어야 한다. if (!isDuplicate) { cardD..

프로그래밍/C# 2023.06.20

[C#] 프로퍼티, 왜 사용하는거지?

객체지향언어에서 클래스를 작성할때는 은닉성이 중요하다. 외부에서 클래스 내부의 데이터가 의도하지 않은 방식으로 오염되는것을 막아야 하기 때문이다. 이때 보통 클래스 내부의 필드를 private 또는 protected 접근제한자를 이용하여 외부에서 접근하지 못하도록 막고 또다른 함수를 이용하여 해당 필드에 접근해서 값을 받거나 수정하는 방식을 거친다. 여기서 보통 Get으로 명명된 함수와 Set으로 명명된 함수를 사용하는데, C#에서 프로퍼티는 이 부분을 간추려주고 은닉성과 사용성을 동시에 이루게 해준다. 어떤 변화가 이루어지는지 아래 코드를 참고해보자 // Get과 Set으로 명명한 함수를 이용한 클래스 내부의 필드값 조정방식 class Car { private string carName = "벨로스터"..

프로그래밍/C# 2023.06.18

foreach 이용

예제에 중간중간 등장하는 foreach 문법이 약간 헷갈렸던 적이 있어서 한번더 정리한다. int[] numbers = {1,2,3,4} 라는 배열이 있다고 하면 foreach( int i in numbers) { Console.Write(i); } 를 하게될 경우 1234 이렇게 출력된다. 즉, numbers와 같은 배열을 0번째 인덱스부터 차례차례 i에 넣어주고, 해당 배열이 끝나면 루프가 끝난다. 배열과 관련된 내용이 있다면 유용하게 쓰일지도?

프로그래밍/C# 2023.06.15

C# 컬렉션(Collection_List, Dictionary, Stack, Queue, ArrayList)

Cpp에서는 컨테이너라고 불리우는 Csharp의 컬렉션에 대해 알아보자 컬렉션(Collection) 변수를 여러개 모아 편하게 쓰기 위해서 만들어놓은 자료구조이다. 1. List (C#) / Vector (C++) - 가변배열 - 선형구조이다. 차곡차곡 쌓이기 때문에 인덱스를 통해 값을 가져올 수 있다. - 내부적으로 배열로 구현되어있으나 저장할 데이터 개수에 따라서 크기가 자동으로 변한다. List listName = new List(); // 리스트 선언 listName.Add(0); // listName에 0을 추가 listName.RemoveAt(1); // 2번째(0,1~순서이므로) 인덱스 값을 삭제 listName.insert(1,3); // 2번째 인덱스에 3을 삽입 2. Set - 수학에서..

프로그래밍/C# 2023.06.15
728x90