정적(static) 필드 static :사전적으로 정적이라는 뜻을 가지고 있음. -움직이지 않는다 C#에서의 static : 메소드나 필드가 클래스의 인스턴스가 아닌 클래스(의 멤버) 자체에 소속되도록 지정하는 한정자 그 틀을 이용한 인스턴스가 여러개 존재할 수는 있으나 클래스는 프로그램에 유일하게 존재. 그리고 어떤 필드가 클래스에 소속된다는 것은 곧 그 필드가 프로그램 전체에서 유일하게 존재한다는 것을 의미 static으로 한정하지 않은 필드: 자동으로 인스턴스에 소속됨 static으로 한정한 필드: 클래스에 소속됨 왜 static필드를 쓸까? 아까도 말했듯이 static으로 수식한 필드는 프로그램 전체에 걸쳐 하나밖에 존재하지 않음 => 프로그램 전체에 걸쳐 공유해야 하는 변수가 있다면 정적 필드를..
클래스 이 세상에서 객체라고 할만한 모든 것이 갖고 있는 두가지 : 속성과 기능 C#의 객체 : 속성 -> 데이터, 기능 ->메소드 필드 : 클래스 안에 선언된 변수들 멤버: 필드와 메소드를 비롯하여 프로퍼티, 이벤트 등 클래스 내에 선언된 요소들 Cat kitty = new Cat(); Cat()은 생성자라고 하는 특별한 메소드. 클래스의 이름과 동일한 이름을 가지며 객체를 생성하는 역할 new 키워드는 생성자를 호출해서 객체를 생성하는 데 사용하는 연산자 생성자와 new키워드는 바늘과 실 같은 존재 kitty는 참조. kitty자체에 메모리가 할당되는 것이 아니고 생성자가 힙에 생성한 객체를 가리키는 주소다 모든 클래스는 복합 데이터 형식(기본데이터들이 모여서) 그리고 복합 데이터 형식은 참조형식이다..
메소드 오버로딩 하나의 메소드 이름에 여러 개의 구현을 올리는 것 (과적하다 = Overloading) 코드를 일관성 있게 유지가능 높은 생산성 매개변수의 개수와 형식이 다른 경우에 사용 int Plus(int a, int b) { return a + b; } double Plus(double a, double b) { return a + b; } . . . int result1= Plus(1, 2); //int Plus(int,int)호출 double result2 = Plus(3.1, 2.4) // double Plus(double,double)호출 가변 개수의 인수(Params + 배열) 매개변수의 개수가 다를 때 사용 매개변수의 개수가 유한하게 정해져 있다면 가변 개수의 인수보단 메소드 오버로딩을..
원래 메소드는 return으로 결과를 하나로만 반환한다 여러개 반환하고 싶다면? 출력전용매개변수 out 사용 출력 전용 매개변수 out 매개변수를 목록화 할 수 있어 복수개 반환 가능 out대신 ref키워드를 똑같은 위치에 똑같이 써줘서 구현할 수 있지만, out을 사용하면 안전한 방법으로 같은 일을 할 수 있음 안전한 방법으로라는 말은 ref를 사용할 시 해당 매개변수에 결과를 저장하지 않아도 컴파일러가 경고를 하지않지만, out은 에러메세지 출력 사용방법 메소드 선언시 접근한정자 반환형식 메소드이름(매개변수1, 매개변수2, ....매개변수n, out int 출력전용매개변수이름, out int 출력전용매개변수2이름....) 메소드 호출 시 메소드이름( 인자1, 인자2, out int 변수1이름, out..
Pass by Value using System; using static System.Console; namespace thistiscsharp { class Calculator { public static int Plus (int a, int b) { Console.WriteLine("Input : {0}, {1}", a, b); int result = a + b; return result; } } class MainApp { public static void Main(string[] args) { int x=3; int y=4; int result = Calculator.Plus(x, y); } } } 서론 호출하는 입장인 MainApp클래스의 x, y = 인수 (Arguments)이고 호출되는 메소..
if문 if 문에서 사용하는 조건식은 bool형식 if -> else if -> else if-> .... ... ... -> else if 문 안에 return; : 현재 메소드를 종결하는 점프문으로서의 기능 if 문 안에 retrun : 값 반환 switch문 switch (조건식) { case 상수 1: -> 조건식 == 상수1일 case (==이 생략됐다고 보자) //실행할 코드 break; -> break : 조건식과 일치할 경우 switch문 바깥으로 이동 case 상수 2: //실행할 코드 break; case 상수 N: //실행할 코드 break; defalut: -> 조건식이 어떤 경우와도 맞지 않은 경우 //실행할 코드 -> 생략가능 break; switch문에 사용되는 조건식 : 정수..
null조건부 연산자 • C# 6.0부터 도입 • 객체의 멤버에 접근하기 전에 해당 객체가 null인지 검사하여 그 결과가 참이면 null을 반환하고, 그렇지 않은 경우에는 뒤에 지정된 멤버를 반환 • ?. 와 ?[] ArrayList a = null; a?.Add("야구"); //a가 null을 반환하므로 Add()는 호출되지 않음- ?. WriteLine($"{a?[0]}"); //a?.가 null을 반환하므로 아무것도 호출되지 않음 //만약 null이 아니라면, 뒤에 지정된 멤버 Add("야구")가 호출됨 //여기서 그냥 a[0]을 하면 a가 null이기 때문에 애초에 컴파일 에러 //a?[0]를 해줘야 함 - ?[] null 병합 연산자 • null 조건부 연산자(?.)처럼 프로그램에서 종종 필요..
문자열 → 숫자열 1. Convert.ToInt32() string a = "123"; int b = Convert.ToInt32(a); 2. Parse() Parse는 문자열을 숫자로의 변환이 실패하면 예외(exception)을 던짐 예외가 던져지면 프로그램은 현재 코드의 실행을 멈추고 흐름을 다른 곳으로 이동 string a = "123"; int b = int.Parse(a); 3. TryParse() 애초에 변환의 성공 여부를 반환해서 코드 흐름 유지 가능 변환한 데이터는 두번째 매개변수에 저장(out키워드로 수식되어 있다) string a = "123"; int.TryParse(a, out int b) 이전에 b 를 선언하지 않더라도 출력전용 매개변수(out으로 수식한) int b에 변환한 데이..