본문 바로가기

프로그래밍119

c#_null ?? 널? null 조건 연산자에 대해 알아보기전에 일단 null에 대해서 알아보도록 하겠습니다. null은 아무것도 아닌 값입니다. 값이라는 말 자체가 모순일수도 있지만 비어있는 상태를 뜻합니다. 어떠한 값도 없는 상태인 것이죠. 하지만 이 null값을 아무곳에나 쓸 순 없습니다. 보통 객체의 상태가 null인지 아닌지 판단할 때 사용을 하는데 이것도 하나의 값이기에 Nullable타입이 아니면 값을 대입할 수 없습니다. 위 예제에서 보시듯 int형을 비롯한 value타입들은 null값을 대입할 수 없습니다. 반면에 위의 참조 형식들은 null값을 허용함으로써 객체가 null상태인지 아닌지 판단할 수 있습니다. 사용자 자료형인 클래스 역시 null 값을 허용합니다. 이런 식으로 null값을 활용해 객체의 상태를 .. 2021. 9. 11.
c#_41 콜렉션 Collection : 딕셔너리 Dictionary <TKey,TValue> 간단한 사용방법 2 ContainsKey 문자열에 해당하는 키가 존재할 경우 true, 없으면 false를 반환합니다. ContainsValue 문자열에 해당하는 Value가 존재할 경우 true, 없으면 false를 반환합니다. 다만 Key와는 달리 동일한 Value는 존재가 가능함으로 먼저 검색된 값을 기준으로 반환합니다. TryGetValue 문자열의 Key가 존재한다면 Key에 해당하는 Value를 반환합니다. 아래의 예제처럼 활용도 가능합니다. 활용 아이템의 정보를 담고 있는 구조체를 Value로서 딕셔너리에 Key와 함께 담아 관리합니다. 위 예제는 하나의 활용법일 딕셔너리를 포함한 여러 컬렉션의 활용법은 무궁무진합니다. 상황에 맞는 컬렉션과 방법을 선택해서 활용하시면 되겠습니다. 2021. 8. 30.
c# var 키워드 (implicitly typed local variable) var에 대해서 알아보겠습니다. var은 implicitly typed local variable 암시적 타입 지역변수 입니다. 이게 무엇이냐? 사용자에 의해 지역변수의 타입이 정해지는 것이 아니라 컴파일러에 의해서 타입이 정해지는 것입니다. 위 예제에서 보듯 int타입을 명시적으로 선언하고 초기화하고 있는데 반해 var의 경우 어떠한 키워드 없이 값이 대입되고 있는 것을 볼 수가 있습니다. var은 대입되는 값의 타입에 따라서 컴파일러에 의해 타입이 정해집니다. 그렇기에 var를 통해서 지역변수를 선언하려면 바로 초기화를 해주어야 합니다. 대입되는 값의 타입에 따라 변수의 타입은 암시적으로 정해집니다. 당연하게도 그 변수는 다른 타입의 값을 대입하게되면 오류가 발생합니다. 이 var키워드는 지역변수에만.. 2021. 8. 25.
c#_40 콜렉션 Collection : 딕셔너리 Dictionary <TKey,TValue> 간단한 사용방법 1 콜렉션 중 딕셔너리(Dictionary)에 대해 알아보도록 하겠습니다. 딕셔너리는 데이터를 구별할 수 있는 Key와 데이터인 Value의 KeyValuePair의 타입을 저장하는 콜렉션입니다. 이름에서 유추할 수 있듯 사전처럼 색인을 통해 단어의 뜻이나 정보를 찾을 수 있습니다. Key와 Value가 한 쌍으로 이 Key를 통해서 Value값을 알 수 있습니다. 당연하게도 Key를 통해 구분하다보니 Key는 중복될 수 없습니다. 딕셔너리 역시 콜렉션 자료구조로 using System.Collections.Generic이 선언되어 있어야 사용할 수 있습니다. 이미지에서 보듯 다른 자료구조와는 달리 딕셔너리는 Key와 Value에 쓰일 두 개의 자료형이 필요합니다. 위 예제에선 Key와 Value의 자료형을.. 2021. 8. 22.
프레임 워크란?? 개발을 하며 많이 듣게될 단어인 프레임 워크에 대해서 알아보도록 하겠습니다. 어떠한 일을 함에 있어 일정한 틀이나 규칙없이 자유롭게 일을 할 수 있다면 그 나름대로의 장점은 있겠지만 만약 그 일을 누군가가 시행착오 끝에 해결할 수 있는 틀을 만들어놓았다면 굳이 처음부터 시행착오를 겪으며 일 처리를 할 필요가 없겠죠? 이렇게 어떠한 목적에 맞게끔 틀이나 규칙을 만들어 둔 것이 프레임 워크입니다. IT개발 쪽에서 프레임 워크라고 한다면 개발 목적에 맞는 라이브러리들을 모아둔 것이라고 볼 수 있습니다. 라이브러리 역시 따로 포스팅 하겠지만 특정 기능을 재사용하기 편하게 모아놓은 코드 집합이라고 보시면 되겠습니다. 게임 개발을 예로 들어 게임을 만들기에 적합한 프레임 워크를 사용한다면 개발 시간이 대폭 줄어들게.. 2021. 8. 15.
c#_39 콜렉션 Collection : 리스트 List<T> 이번 포스팅은 자료구조 콜렉션 중 리스트에 대해서 알아보도록 하겠습니다. 이 리스트 역시 제너릭 콜렉션이므로 어떠한 자료형도 저장이 가능합니다. 예제에서 보듯 저장자체는 배열을 떠올리게 합니다. 접근 역시 배열처럼 접근하면 됩니다. 다만 배열과는 달리 리스트는 데이터를 저장하고 제거하기에 수월합니다. 원하는 위치에 데이터를 저장할수도 있고, 원하는 위치의 데이터나 리스트 안의 데이터 중 원하는 값을 선택해 제거하기도 쉽습니다. 먼저 데이터를 추가할 수 있는 Add메소드를 먼저 보도록 하겠습니다. 리스트의 Add메소드를 통해서 데이터를 저장할 수 있습니다. 저장을 하게 되면 자동으로 리스트의 크기를 늘려서 저장합니다. Insert의 경우 원하는 위치에 데이터를 저장할 수 있습니다. 먼저 위치를 지정하고 저.. 2021. 8. 15.
c#_38 콜렉션 Collection : 큐 Queue<T> 이번 포스팅에선 자료구조 콜렉션(Collection) 중 큐(Queue)에 대해서 알아보도록 하겠습니다. 지난 포스팅에서의 스택과 비슷하지만 큰 차이라면 선입선출이라는 것입니다. 스택의 경우 늦게 들어온 데이터가 먼저 나가는 선입후출의 구조이지만 큐의 경우 먼저 들어온 데이터가 먼저 나가는 선입선출입니다. 스택과 마찬가지로 System.Collections.Generinc 라이브러리가 추가되어있어야 합니다. 저장하고 싶은 자료형을 명시하고 큐를 생성합니다. 이후 Enqueue메소드를 사용해 데이터를 저장합니다. 스택과는 다르게 선입선출이므로 먼저 저장된 데이터부터 출력이 되는 것을 볼 수가 있습니다. Dequeue메소드를 사용하면 저장된 데이터 중 가장 먼저 저장된 데이터먼저 큐에서 제거됩니다. 출력 결.. 2021. 8. 5.
c#_37 콜렉션 Collection : 스택 Stack<T> 콜렉션(Collection)에 대해 알아보도록 하겠습니다. 보통 자료구조(Data Structure)라고도 불리며 데이터를 저장하거나 검색하는 등 데이터를 효율적으로 관리하기 위해서 쓰이는 것이 바로 콜렉션입니다. 다양한 콜렉션이 존재하며 상황에 따라 적절한 콜렉션을 활용하면 됩니다. 오늘은 콜렉션 중 스택(Stack)에 대해서 먼저 살펴보도록 하죠. 스택은 선입후출의 방식으로 데이터를 저장하고 관리합니다. 위 그림에서 보듯 데이터가 들어오는 순서대로 쌓이고 데이터를 사용할 때는 늦게 들어온 데이터부터 꺼내어 사용하게 됩니다. 스택을 사용하려면 System.Collections.Generinc 라이브러리를 추가해야합니다. 추가하지 않으면 스택를 비롯한 콜렉션들을 사용할 수가 없습니다. 스택 클래스와 어떤.. 2021. 8. 4.
c#_36 중첩 클래스 Nested class 반복문이나 조건문의 중첩처럼 클래스 역시 중첩이 가능합니다. 예제에서 보듯 외부 클래스에 내부 클래스를 선언함으로써 중첩이 가능합니다. 활용 방법이야 다양하겠지만 비슷한 자원끼리 묶어서 관리하기 위해 사용하기도 합니다. 이렇게 함으로써 코드의 가독성 또한 올라가겠지요. OutClass내부에 선언된 InClass가 private으로 선언이 되어 OutClass와 InClass내에선 접근이 가능하고 InClass를 생성할수 있는 것을 볼 수 있습니다. 당연하게도 InClass내부의 private으로 선언된 height필드는 InClass내에서만 접근이 가능하기에 InClass의 Test메소드 내에선 접근이 불가능한 것 역시 볼 수 있습니다. 외부 클래스에선 InClass를 생성할 수 없습니다. 외부에서 In.. 2021. 8. 1.
c#_35 분할 클래스 partial class 분할 클래스 partial class에 대해 알아보도록 하겠습니다. 분할 클래스는 하나의 클래스를 여러개의 클래스 분할하는 걸 말합니다. 클래스는 비록 분할되어있지만 객체를 생성 시엔 일반 클래스와 똑같은 기능을 합니다. partial 한정자를 class 앞에 붙임으로서 클래스 분할이 가능합니다. 아래의 예제를 통해 더 알아보도록 하죠. 위 예제에서 보듯 필드, 생성자, 메소드 별로 클래스를 분할했습니다. 비록 클래스는 분할이 되었지만 객체 생성 시 일반 클래스처럼 사용이 가능합니다. 당연하게도 상속 역시 가능합니다. 클래스의 코드가 길거나 기능별로 분할하고자 할때 이 partial 한정자를 통해서 클래스를 분할하세요~ 2021. 7. 26.
c#_34 Sealed 클래스 sealed 한정자는 클래스 또는 메소드(함수)와 함께 쓰입니다. sealed의 단어 뜻처럼 클래스나 메소드를 봉인함으로써 클래스의 상속과 메소드의 재정의를 방지하는 역할을 합니다. 클래스에서의 sealed 한정자 쓰임을 알아보도록 하겠습니다. 위 예제처럼 class 앞에 sealed 한정자를 써두면 끝!! sealed한정자를 써둔 class인 SealedParents 클래스를 SealedChild 클래스에서 상속을 하려고 하지만 sealed한정자로 인해 오류가 납니다. 이처럼 상속이 필요없는 클래스의 경우 상속을 방지해놓음으로써 혹여나 있음 실수를 미연해 방지할 수 있겠죠? 그 외 여러 상황에서 이 sealed 한정자가 필요하다면 활용하시면 되겠습니다. 2021. 7. 25.
c#_33 클래스 상속(Class inheritance) 상속이라 하면 보통 부모의 재산을 자식이 물려받는 것을 말합니다. 이 클래스의 상속 역시 부모의 자원을 물려받는 다는 것은 똑같습니다. 다만 부모의 모든 것을 물려받는 것이 아닌 물려주고자 하는 자원들만 상속을 받게 됩니다. 상속을 하는 이유는 각 객체들이 공통적으로 가지게 되는 자원들을 편리하게 사용하기 위함입니다. 사람을 예로들어 설명해보겠습니다. 사람이라는 객체가 공통적으로 가지게 되는 상태와 기능들이 있습니다. 이러한 자원들은 사람이라면 모두 가지고 있죠. 그리고 각 개인들만이 독립적으로 가지고 있는 상태와 기능들도 있을 겁니다. 만약 개인에 해당하는 객체들을 클래스로 만들어 생성한다면 그 수가 작을 땐 큰 문제가 없을 수 있지만 그 수가 많다면 공통되는 상태와 기능에 대한 코드를 일일히 다 써야.. 2021. 7. 20.
반응형