본문 바로가기

프로그래밍/c#64

c#_46 삼항 연산자 삼항 연산자에 대해 알아보도록 하겠습니다. 말그대로 세 개의 항으로 이루어진 연산자 입니다. 이 삼항 연산자를 활용하면 if~else문의 비교적 긴 코드를 짧게 줄일수가 있습니다. 예를들어 위 예제와 같은 코드가 있다면 이를 아래의 코드처럼 줄일수가 있습니다. a > b 부분은 조건식이 되고 만약 이 조건이 참이라면 ? 뒤의 항 중 왼쪽항을 반환, 아니라면 오른쪽항을 반환하게 됩니다. 당연하게도 위의 결과는 false가 출력이 될겁니다. 굉장히 쉽죠? ㅎ 하지만 코드엔 정답이 없으니 본인 취향이나 프로젝트 성향에 따라 맞춰서 활용하시면 될 것 같네요. 결과는 똑같으니깐요^^ 2022. 1. 26.
c#_as 연산자 as연산자의 경우 is연산자와 마찬가지로 형식과 연관된 연산자입니다. 다만 is연산자와 다른 점은 is연산자의 경우 type비교 결과에 따라 bool형식의 true, false를 반환합니다. 하지만 as연산자의 경우 형식 변환, 캐스팅에 활용됩니다. 왼쪽항의 객체에 오른쪽항의 타입을 비교하여 캐스팅 결과를 반환합니다. 만약 오른쪽 항의 캐스팅 결과가 성공하면 타입을 반환하고 실패하면 null을 반환합니다. 다만 as 연산자는 위 그림처럼 값형식이 아닌 참조형식만 캐스팅이 가능합니다. 그 점은 참고해주세요! 보통 캐스팅(형변환)에 활용합니다. p1의 경우 부모 클래스로 Child클래스를 포함하고 있지 않습니다. 당연하게도 형변환이 되지않습니다. 하지만 c2의 경우 Parent클래스를 상속받았기에 as연산자.. 2022. 1. 12.
c#_is 연산자 is연산자에 대해 알아보도록 하겠습니다. is 연산자는 왼쪽항의 객체가 오른쪽항의 타입과 같은 타입인지를 비교해서 bool형식의 true, false를 반환합니다. 위 이미지에서 보듯 a객체를 is 연산자를 활용해 int형 타입인지 아닌지 판단 후 true, false를 반환하게 됩니다. 물론 기존처럼 이런 방법을 써도 무방하지만 그냥 딱 봐도 굉장히 편리하게 쓰이겠죠?? 2022. 1. 10.
c#_45 인터페이스 interface 이번 포스팅에선 인터페이스에 대해서 알아보도록 하겠습니다. 인터페이스는 abstract 추상 클래스와 비슷하지만 추상화 정도가 더욱 깊습니다. 이 말인 즉슨 추상 멤버만 가지고 있는 추상 클래스라고 볼 수도 있습니다. 더불어 직접 구현하지않고 정의만 할 수 있습니다. 위 예제에서 보듯 인터페이스는 상속용으로써 상속받은 클래스 내에서 메소드를 반드시 구현해야 합니다. 인터페이스의 멤버 메소드는 public이나 private같은 접근 제한자를 쓸 수 없습니다. 이는 기본적으로 인퍼테이스의 멤버 메소드는 가상(virtual) 메소드이기 때문입니다. 상속받은 클래스 내에서 메소드를 구현시 public을 반드시 붙혀주어야 하며 가상 메소드이지만 따로 override 키워드는 붙혀줄 필요는 없습니다. 한 가지 주의.. 2021. 11. 1.
c#_44 추상화 클래스, 메소드 abstract 추상화 클래스와 메소드에 대해서 알아보도록 하겠습니다. 추상화 클래스는 상속용 클래스입니다. 오로지 상속용으로만 사용되고 객체의 생성은 불가능합니다. new 키워드를 통해 인스턴스를 만들 수 없습니다. 이미지에서 보듯 abstract라는 키워드를 class앞에 붙임으로써 추상화 클래스가 됩니다. 추상화 클래스는 미완성 클래스라고도 불립니다. 이렇게 불리는 이유는 추상화 메소드(함수)를 포함할 수 있기 때문입니다. 이 추상화 메소드는 virtual 가상화 메소드 처럼 재정의를 하고자 할 때 사용하지만 일반 클래스와 달리 부모 클래스내에선 정의를 하지 않고 선언만 할 수 있습니다. 상속받은 클래스 내에서 반드시 정의를 해야합니다. 예제에서 보듯 Character 추상화 클래스를 상속받은 Knight 클래스내.. 2021. 9. 29.
c#_43 제너릭 Generics 타입 <T> 제너릭 Generics 타입에 대해서 알아보겠습니다. 제너릭 타입은 어떤 특정한 타입을 특정짓지 않고 제너릭 타입 자체를 파라미터로 받아들이도록 하여 클래스를 정의할 수 있습니다. 이렇게 함으로써 일부 타입이 다른 클래스나 인터페이스 또는 메소드를 여럿 만들지 않아도 됩니다.위 예제에서 보듯 타입이 각기 다른 size 변수를 여러 개의 클래스가 아닌 제너릭 타입을 붙혀 여러 개의 타입을 받을 수 있는 클래스로 정의했습니다.   https://play.google.com/store/apps/details?id=com.goldenegg 골든 에그 - Google Play 앱수박 게임류의 머지 게임입니다.play.google.com   제너릭 타입을 활용한다면 불필요하게 클.. 2021. 9. 19.
c#_42 클래스 Virtual과 Override 가상 메소드(함수) 1 가상 함수에 대해서 알아보도록 하겠습니다. 클래스 내의 멤버 메소드에 virtual 키워드를 명시하면 그 메소는 상속을 받은 자식 함수에서 재정의를 할 수 있게 됩니다. 위 예제에서 보듯 Test 클래스를 상속 받은 Child 클래스에서 TestFunc()라는 메소드를 재정의하고 있습니다. 이렇게 하는 이유는 메소드를 통한 기본 기능과 결과는 똑같을 수 있지만 그 과정은 각 개체들마다 다를 수 있기 때문입니다. 예를 들어 밥을 먹는 행위를 하는 메소드가 있다면 누군가는 오른손으로 먹지만 누군가는 왼손으로 먹을수도 있고 포크나 젓가락 등 먹는 행위는 같지만 그 과정은 다 다를 수 있습니다. 위 예제를 보시면 character 클래스에 Attack이라는 메소드가 있고 이를 가상 함수로 만들었습니다. 그리고 .. 2021. 9. 18.
c# 네임스페이스 Namespace 네임 스페이스에 대해서 알아보도록 하겠습니다. 네임 스페이스는 수 없이 많은 클래스들 간의 충돌을 방지하고자 사용합니다. 비슷한 의미와 역할을 하는 클래스들을 비롯한 개체들은 이름이 비슷하거나 똑같을 수도 있습니다. 특히 큰 프로젝트의 경우 여러 사람이 작업을 진행하게 되는데 이 경우 문제가 여러 곳에서 발생할 수도 있습니다. 그래서 이 네임 스페이스를 활용해 클래스들을 관리하고 사용합니다. c#의 .net 프레임 워크의 경우 무려 11,000여개의 클래스들이 존재함에 따라 네임 스페이스가 적극적으로 활용되고 있습니다.위 이미지를 보듯 한 네임 스페이스 내에 같은 이름의 클래스가 존재한다면 당연히 오류가 발생하지만 서로 다른 네임 스페이스에 존재하는 같은 이름의 클래스는 충돌이 일어나지 않습니다. 네.. 2021. 9. 15.
c#_null 조건 연산자들 지난 포스팅에서 null에 대해서 알아보았습니다. 이번 포스팅에선 null과 관련된 연산자들을 알아보도록 하겠습니다. Nuallable, ? int, float을 비롯한 value타입도 위 이미지의 두 예제처럼 null값을 대입할 수 있습니다. 위 이미지의 두 방식은 동일합니다. Nuallable과 ?은 value타입에만 적용이 가능하고 참조 타입은 적용이 불가능합니다. ?. null 조건 연산자 ?.경우 왼쪽항의 변수가 null이면 null을 반환하고 아니면 오른쪽항의 속성을 반환합니다. ?[] 배열이나 리스트의 요소가 null인지 아닌지 체크한 후 null이면 null을 반환하고 아니면 요소를 반환합니다. ?? ??는 왼쪽항의 변수가 null이면 오른쪽항의 값을 대입하고, null이 아니면 변수의 값.. 2021. 9. 13.
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.
반응형