728x90

프로그래밍/C# 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

C#에서 배열(Array), 이차원배열, 다차원배열, 가변배열 선언

C#에서의 문법은 C++에서의 문법과 다르다. C#에서의 문법을 알아보자 배열(Array) 1. 일반 배열 선언,초기화방법 string[] array = new string[3]{"Hello","World","Taek"}; 타입 이름 = new 타입[크기] { 초기화할 내용 }; 이다. 다른 방법들도 있지만 가장 읽기 편하므로 이 방법만 기억하자. 이 방법이 제일 길어서 이 방법만 제대로 알면 다른방법은 언제든지 외울 수 있을것이라 생각된다. 2. 이차원 배열 선언, 초기화 방법 string[,] array = new string[2,3] { {"Hello","World","Taek"}, {"Hello","World","Taek"} }; 다 똑같은데, [ , ]가 다르다 패턴으로 생각해보자. 3. 다차원..

프로그래밍/C# 2023.06.15

Static 키워드가 동작하는 시점(compile Time,Run Time)

C#에서 코드를 작성하면 Static키워드가 도대체 뭘까? 하는 생각이 든다. 첫 줄부터 써있기 때문이다. Static void Main(string[] args) 바로 Main함수에도 써있다. 따라서 사용새가 많아 보이는 Static이 무엇인지 가볍게 알아보자 일단 우리가 프로그램을 실행하기까지 과정이 있다. 1. Editor Time - 내가 코드를 작성하는 시점 2. Compile Time - 프로그램을 컴파일 하는 시점 ( build - link - compile 과정이 이루어진다.) 3. Run Time - 프로그램이 메모리에 올라가서 실행되는 동안을 얘기한다. 따라서 동작순서는 1 -> 2 -> 3 이다. 이때 Static키워드가 붙어있는 클래스, 메소드는 컴파일 타임과 런타임 사이에 메모리에..

프로그래밍/C# 2023.06.15

[C#] 클래스(Class) 두번째 시간

클래스 특징 1. 캡슐화 - 캡슐화는 클래스 안의 필드를 private 또는 protected로 외부에서 접근하지 못하도록 처리하는것을 말한다. 2. 상속 - 부모 클래스와 자식 클래스를 만들어서 부모 클래스에 정의된 필드와 메서드를 자식 클래스에서 사용할 수 있도록 처리하는것을 의미한다. * 부모 클래스 = 슈퍼클래스, 부모클래스, 베이스 클래스 라고도 불린다. * 자식 클래스 = 서브클래스, 자식 클래스, 파생 클래스 라고도 불린다. 3. 다형성 - 메서드가 동일한 이름으로 다양한 기능을 수행할 수 있도록 처리하는것을 의미한다. 4. 추상화 - 클래스를 정의할 때, 공통된 필드와 메서드를 부모 클래스로 정의해서 중복사용을 줄이는 것을 의미한다. 사용예시 가장 아래쪽 예제에 몬스터를 3가지 종류로 준비..

프로그래밍/C# 2023.06.13

[C#] 클래스(Class) 첫번째 시간

클래스 논리가 객체를 중심으로 이루어진다. 예를들어 게임을 만들기 위해서 여러사람들이 코드를 짜게되면 코드가 제각각으로 나오게되는데 이런 상태에서 게임을 만들게 되었을때 절차지향이면 다 다르게 설계가 된다. 객체지향으로 설계를 하게되면 규격이 통일되기 때문에 유지보수가 좋다. Dog 클래스 생성하며 알아보기 아래 코드를 보면 cat과 dog가 있는데 dog만 보도록 해보자 cat은 구조체이다. 개를 생각하면 어떤것이 떠오르는가? 이름, 짖는 소리, 색 이런것들이 떠오른다. 이것들을 변수로써 Dog class에 넣어주게 되면 앞으로 Dog 클래스를 선언할때 해당 내용들은 자연스럽게 따라오게 된다. 클래스의 선언 Dog babyDog = new Dog(); Dog adultDog = new Dog(); 이런..

프로그래밍/C# 2023.06.13

Function, Library, API, Frame work, 컬렉션(C#), 컨테이너(C++)

배열같은 데이터 타입을 컬렉션 혹은 컨테이너 라고 한다. 배열과 같이 변수를 여러개 할당해서 사용하려면 기존의 데이터 타입만으로는 부족하다. 그래서 배열과 같이 메모리 공간을 여러개 할당하는 형태의 변수가 필요한데, 이렇게 메모리 공간을 여러개 할당하는 형태의 변수를 컬렉션(C#) 또는 컨테이너(C++)라고 한다. 프로그래머들이 말하는 자료구조에 해당한다. Function - 함수 : 함수라는것은 프로그램을 동작하도록 하는 기본 단위 library - 라이브러리 : 일정한 동작을 구현하기 위해서 비슷한 역할을 하도록 하는 함수를 모아놓은것(함수의 집합) API - API : 일정한 동작을 구현하기 위해서 비슷한 역할을 하도록 하는 라이브러리를 모아놓은것(라이브러리의 집합) - 일반적으로 공식문서와 함께 ..

프로그래밍/C# 2023.06.13
728x90