목록전체 글 (109)
나의 지식 보관소
확장 메서드는 기존 클래스의 기능을 확장하는 방법이다. 예를 들어 int형에 제곱 기능도 넣을 수 있다. 확장 메서드를 선언하기 위하여 필요한 조건은 다음과 같다. 1. 클래스를 static으로 수식한다. 2. 메서드를 static으로 수식한다. 3. 첫 번째 매개 변수는 반드시 this 키워드와 함께 확장하고자 하는 클래스( 형식 )이어야 한다. 다음 조건을 만족하여 int형식에 제곱 기능을 추가하는 확장 메서드를 만들어 보겠다. 1 2 3 4 5 6 7 8 9 10 11 12 static class IntExtension { public static int Power(this int a, int exponent) { int temp = a; for (int i = 1; i
메서드 오버라이딩은 부모 클래스에서 정의한 메서드를 자식클래스에서 재정의 하는것을 말한다. 메서드 오버라이딩을 하기위해서는 부모 메서드의 오버라이딩할 메서드가 virtual로 수식되어있어야 하고, 자식 클래스에서는 오버라이딩을 할 메서드를 override로 수식해주면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Animal { public virtual void Bark() { Console.WriteLine("짖는다."); } } class Dog : Aniaml { public override void Bark() { Console.WriteLine("멍멍"); } } 메서드 숨기기라는 것도 있다. 메서드 숨기기는 자식클래스에서 부모 클래스에 선언된 메서드와 같은..
형변환 연산자는 만일 형변환이 불가능할 경우 예외를 발생시킨다. 이러한 점 때문에 try~catch 문이 거의 강제된다.( 만일 예외처리 조차 하지않으면 프로그램이 예기치 않게 종료된다. ) 때문에 c#은 as와 is 연산자를 제공한다. is 연산자는 객체가 해당 형식에 대해 형변환이 가능한지 여부를 bool 값으로 반환한다. as 연산자는 형변환 연산자와 똑같은 역할을 하지만 형변환에 실패할 경우에 as연산자는 null을 반환한다.
로컬 함수는 메서드 안에서 선언되는 함수를 뜻한다. 로컬 함수는 클래스의 멤버가 아니기 때문에 메서드가 아닌 함수로 불린다. 로컬 함수의 특징으로는 자신이 선언돼있는 메서드의 지역변수를 사용할 수 있다는 점이다.
선택적 매개 변수는 메서드의 매개 변수에 기본값을 가지게 하고 싶을 때 사용한다. 예를 들어보겠다. 1 2 3 4 void SetPerson( int height, int weight, int iq = 100, string name = "홍길동" ) { //구현 부 } 위의 코드에서 보이는 iq와 name변수는 기본값을 가지므로 메서드 호출 시 해당 데이터의 할당을 생략할 수도 생략하지 않을 수도 있다. 이처럼 기본값을 가지는 매개변수는 상황에 따라 데이터를 할당하거나 할당하지 않을수 있으므로 선택적 매개변수라고 부른다. 선택적 매개변수를 사용할시 지켜야 할 규칙이 있는데 선택적 매개변수는 무조건 필수 매개 변수 뒤에 와야 한다.
보통 메서드 호출 시 넘기는 데이터들이 어느 매개변수에 할당될지 결정하는 것은 순서이다. 하지만 메서드 호출 시 매개변수의 목록이 아주 길어져 있다면 순서를 하나하나 보고 매개변수를 넘겨주는 것은 가독성이 떨어지고 비효율적인 작업일 수도 있다. 그래서 C#은 순서가 아닌 매개변수의 이름에 근거하여 매개 변수를 넘겨주는 기능인 명명된 매개 변수라는 기능을 제공한다. 명명된 매개변수의 적용은 매우 간단하다. 메서드 선언은 평소대로 하면 되고 메서드 호출 시에 매개변수의 이름 뒤에 콜론을 붙인 뒤 할당할 데이터를 적어주면 된다. 예를 들어 아래와 같은 메서드가 있다고 가정해 보자. 1 2 3 4 void SetPerson( int height, int weight, int iq, string name ) { ..
가변길이 매개 변수란 매개 변수의 개수가 변할 수 있는 매개변수를 뜻한다. 메서드 오버로딩과는 다른점은 매개 변수의 형식이 다른 경우에는 가변길이 매개변수를 사용하지 못한다. 가변길이 매개 변수는 params 키워드와 배열로 선언한다. 입력받은 수들의 총합을 구하는 예시를 들어보겠다. 1 2 3 4 5 6 7 8 9 int Add(params int[] args){ int total; foreach(int i in args){ total += i; } return total; } 메서드의 사용은 다음과 같다. 1 2 Console.WriteLine(Add(1,2,3)); Console.WriteLine(Add(1,2,3,4,5));
메서드 오버로딩은 매개변수의 수와 형식에 따라 메서드 이름을 여러 개 만들어야 하는 불편함을 해소시켜주는 존재다. 예를 들어서 숫자 두 개를 더하는 Plus라는 이름의 메서드가 있다고 가정해보자. 우리는 정수를 두 개 입력받는 Plus 메서드 외에도 실수 형식 두 개를 받는 메서드, 정수 하나 실수 하나를 받는 메서드 등 거의 같은 역할을 하는 메서드임에도 불구하고 매개변수의 형식이 다르다는 이유 하나로 메서드를 여러 개 정의해야 한다. 그렇다면 메서드 이름 또한 intPlus, doublePlus 등 여러 개가 되었을지도 모른다. 하지만 c#에서 제공하는 메서드 오버로딩 덕택에 그럴 필요가 없다. 우리는 단지 메서드의 이름은 똑같이 유지한 채 매개변수의 수나 형식이 다른 메서드를 여럿 만들면 된다. 예..