프로그래밍/C#

    [C#] 속성 (Property) (2)

    [C#] 속성 (Property) (2)

    1. 핵심 정리 using System; class People { private int age = 0; public int Age { get { return age; } // protected set { age = value; } - 생략 가능 } } class Program { static void Main() { People p = new People(); // p.Age = 10; - error Console.WriteLine(p.Age); } } ① setter / getter 의 접근 권한을 변경할 수 있다. ② 읽기 전용 또는 쓰기 전용 속성을 만들 수도 있다. ③ Backing 필드가 없는 속성을 만들 수 도 있다. Backing 필드란? 위의 코드에서 Age는 결국 age필드에 접근하기 ..

    [C#] 속성 (property) (1)

    [C#] 속성 (property) (1)

    1. 핵심 정리 using System; class People { public int age = 0; } class Program { static void Main() { People p = new People(); p.age = 10; p.age = -5; // 실수 ? } } ① public 필드의 문제점 => 외부에 잘못된 사용으로 객체의 상태가 잘못될 수 있다. => 필드 접근 시 추가적인 기능(스레드 동기화, logging등)을 수행할 수 없다. using System; class People { private int age = 0; public int get_age() { return age; } public void set_age(int value) { if ( value 필드는 priva..

    [C#] Extension Method

    [C#] Extension Method

    1. 식-본문 메소드 using System; class Program { public static int Square(int a) { return a * a; } public static void Main() { Console.WriteLine(Square(3)); } } ① 식 본문 메소드 (expression - bodied method) using System; class Program { /* public static int Square(int a) { return a * a; } */ public static int Square(int a) => a * a; public static void Main() { Console.WriteLine(Square(3)); } } => 메소드의 구현이 단순..

    [C#] Named, Optional Parameter

    [C#] Named, Optional Parameter

    1. 명명된 매개 변수 (Named Parameter) using System; class Program { public static void Main() { SetRect(10, 20, 30, 40); } } SetRect라는 함수가 어딘가에 있고 메인에서 가져다 쓴다고 해보자. 인자를 4개를 받는데 이 4개의 인자가 무슨 역할을 하는지는 모른다. 어떤게 x이고, y이고 각 변의 길이인지, 무엇인지 전혀 모른다. 이럴 경우 함수를 호출할 때 각 인자의 이름을 정해줄 수 있다. using System; class Program { public static void Main() { SetRect(x : 10, y : 20, width : 30, height : 40); } public static void..

    [C#] 가변 길이 매개 변수 (params)

    [C#] 가변 길이 매개 변수 (params)

    1. 핵심 정리 using System; class Program { public static int Sum(int a, int b) { return a + b; } public static void Main() { int s1 = Sum(1, 2); int s2 = Sum(1, 2, 3); Console.WriteLine($"{s1}, {s2}"); } } 위와 코드는 인자의 합을 리턴하는 Sum함수가 있고, Main에서 사용하고 있다. s1 같은 경우는 문제가 없지만 이번에 s2와 같이 3개의 합을 구하고 싶다고 해보자. 당연히 인자를 3개 받는 Sum함수는 없기에 에러가 난다. 그럼 3개짜리를 만들면 되지만 이후 4개, 5개가 필요할 수도 있는데 어떻게 처리해야 할까? ⓛ 메소드의 인자 개수를 가변..

    [C#] 인자 전달 방식 (2)

    [C#] 인자 전달 방식 (2)

    1. 참조 타입과 매개 변수 전달 using System; class Point { public int x = 0; public int y = 0; public Point(int a, int b) { x = a; y = b; } } class Program { public static void f1(Point p) { // Point p = p1 p.x = 2; } public static void Main() { Point p1 = new Point(1, 1); f1(p1); Console.WriteLine(p1.x); } } Point 클래스가 있고 메인함수에서 p1 객체를 만든 후 p1객체의 멤버변수인 x를 2로 바꾸고 출력해보는 코드이다. 앞선 int와 같은 값타입과 다르게 참조타입인 class는..