본문 바로가기

프로그래밍/c#67

c#_49 델리게이트 , 델리게이트 체인 Delegate 델리게이트는 함수를 대신해서 호출해주는 대리자입니다. 직접 함수를 호출하는 것이 아닌 함수 호출시 매개변수로 함수를 참조하여 호출합니다. 좀 더 쉽게 보자면 함수를 담아둘 수 있는 변수라고도 볼 수 있겠네요.아래의 예제를 통해서 살펴보시죠.위 예제에서 보듯 델리게이트는 함수를 다른 함수로 전달할 수 있습니다. 이 델리게이트에 함수를 대입함으로써 함수의 주소가 델리게이트에 할당이 되고 델리게이트를 매개변수로 넘겨 함수를 대리호출하게 됩니다.단 주의해야 할 점은 델리게이트의 매개 변수 타입과 갯수 그리고 반환 형식이 전달하고자하는 함수와 동일해야 합니다.        이 델리게이트는 다양하게 활용할 수 있지만 흔히 콜백 함수로써 활용됩니다. 어떤 이벤트가 발생했을 때 그 이벤트와 연관된 함수들을 등록해두고 .. 2022. 2. 14.
c#_48 일반화 Generalization <T> 자료구조를 배우셨다면 아마 List, Dictionary 등 라는 것을 접해보셨을 겁니다. 자료구조를 활용할 순 있지만 가 무엇인지 모르고 쓰는 경우도 있으리라 생각이 듭니다. 저 역시 그런 경우였구요. 그래서 이 제너릭에 대해서 알아보고자 합니다. 보통 클래스를 만들게 되면 클래스에 포함된 모든 데이터들의 타입을 정해주게 됩니다. 아래 예제처럼 말이죠.        하지만 클래스의 역할에 따라선 일부 데이터들의 타입이 여러가지가 필요한 경우들이 있습니다. 예를 들어 정수형 타입 int를 매개 변수를 받아 더하는 함수가 포함된 클래스가 있다면 int 타입 외에는 처리를 할 수가 없습니다. 그렇다고 같은 역할을 하는 클래스를 하나 더 만드는 것도 낭비입니다. 그래서 필요한 것이 바로 입니다. 제너릭를 통.. 2022. 2. 11.
c#_47 ?. ?? Null 조건 연산자 먼저 ?. 연산자에 대해 알아보도록 하겠습니다. ?. 연산자는 해당 객체가 Null이면 Null을 반환하고 아니면 값을 반환합니다. 이 연산자를 활용하면 if문을 사용해서 null체크를 하지 않고도 간단하게 null체크를 할 수가 있습니다. 더불어 에러 발생도 예방할 수 있습니다.위 예제에서 보듯 해당 객체가 비어있다면 null을 반환하고, 아니면 해당 객체의 속성 값을 반환하거나 함수를 호출합니다. ?.의 경우 리턴을 받게되는 변수가 Null타입을 가질 수 있는 리턴 변수여야 합니다. 그렇지 않다면 활용할 수 가 없습니다. 그래서 ?? 연산자와 함께 활용합니다.        if문을 통해서 tc가 null인지 아닌지 체크할 필요없이 ?.연산자를 통해 해당 객체를 판별하고 ??와 함께 활용하여 판별 결과.. 2022. 2. 8.
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.
반응형