목록전체 글 (23)
minjea.dev의 코딩블로그
이번 강좌는 저번에 만든 구조체인 exStruct의 코드를 그대로 이용할겁니다. 코드는 다음과 동일합니다. struct exStruct { public int i; public int n; public string str; public string str2; public exStruct(int i,int n,string str,string str2) { this.i = i; this.n = n; this.str = str; this.str2 = str2; } public void printAll() { Console.WriteLine("i: "+i+", n:"+n+", str:"+str+", str2:"+str2); } } 저번 강좌에서 말씀드린, 값 형식과 참조형식의 차이에 대해 말씀드렸습니다. c#에..
구조체는 사용자 정의 타입으로써, 기본 타입 외에 사용자가 직접 타입을 정의해 사용할수 있도록 c#에서 지원하는 기능입니다. 구조체는 클래스와 달리 값 형식입니다. 구조체는 클래스를 정의하는 문법과 매우 유사하며, class 키워드를 struct 예약어로 대체함과 동시에, 클래스와는 여러가지 차이점이 존재합니다. 인스턴스의 생성을 꼭 new를 통하지 않아도 할수 있다. 기본 생성자를 정의할수 없고, 매개변수가 존재하는 생성자를 정의하더라도, 컴파일러에 의해 자동으로 기본생성자가 포함된다. 매개변수를 받을 경우, 구조체 내에 모든 필드에 값을 할당해주어야 한다. 그러면 한번 구조체를 하나 만들어보겠습니다. exStruct exStruct1; // new 없이 선언 exStruct exStruct2 = ne..
강좌 준비중..... 잠시 뒤 다시 시도하세요
인터페이스는 간단하게 구현 없이 메서드 선언만 포함할수 있습니다. 인터페이스는 추상메서드가 없는 추상클래스라고 생각해도 될듯 합니다. 그렇다면 인터페이스는 어떻게 선언할까요? 다음과 같이 선언이 가능합니다. 접근제한자 interface 인터페이스명 { // code } 인터페이스 내부에서는 필드를 포함할수는 없고, 메서드를 포함할때도, 메서드 구현부는 포함이 불가능합니다. 그런데 왜 추상클래스를 쓰면되지 굳이 인터페이스를 쓸까요? 그냥 간지가 나서일까요? 당연히 아닙니다. 인터페이스를 사용하는 이유는 바로, 상속에 있습니다. 아시다시피 클래스는 다중상속이 불가능합니다. 다만 인터페이스는 클래스와 달리 다중상속이 허용되어, 다음과 같이 다중상속이 가능합니다. ,를 이용하여 인터페이스 여러개를 동시에 상속받..
델리게이트는 메서드를 참조할수 있는 하나의 타입으로써, c#에서 제공하는 특별한 구문입니다. 델리게이트는 다음처럼 선언이 가능합니다. 접근제한자 delegate 반환타입(매개변수); 델리게이트는 반환타입과 매개변수가 동일한 메서드를 가리킬수 있습니다. 즉, 다음과 같이 사용이 가능합니다. // Example 클래스의 Write 메서드를 가리킬수 있는 델리게이트 생성 public delegate void ExampleDelegate(string n); Example example = new Example(); // ExampleDelegate 타입의 인스턴스 생성. example.Write 메서드를 가리킴. ExampleDelegate ex = new ExampleDelegate(example.Write)..
저번에 오버라이드에 대해 알아보았을때는, 부모 클래스에서 virtual 키워드로 가상 메서드를 정의하고, 자식클래스에서 override 키워드를 이용해 그 가상 메서드를 오버라이딩 했습니다. 그런데 오늘 배울 추상 클래스의 경우에는, 추상 클래스의 인스턴스 생성은 불가능하지만 그 클래스를 상속받는 자식 클래스에서는 그 클래스의 추상 메서드에 대해 자식들이 강제로 재정의하도록 강제하는것이 가능합니다. 그렇다면 추상 클래스는 어떻게 만들수 있을까요? 추상 클래스를 만드는 방법은, 클래스 키워드 앞에 abstract 키워드를 붙여주기만 하면 됩니다. // 추상클래스 abstract class absClass {} 그렇다면 추상 클래스 내부에서 추상 메서드는 어떻게 만들까요? 바로 접근제한자 앞에 abstrac..
필드에 직접적으로 접근하는것은 허용하고 싶지 않고, 그렇다고, 필드를 가져오는 메서드를 따로 정의하자니 그건 조금 그렇고, 어떻게 해야 할지 모르실때 사용하면 좋으신 기능인 get과 set에 대하여 오늘 알려드리겠습니다.(c#에선 이걸 프로퍼티라 합니다.) 예를 들어, Example 클래스에 private 접근제한자를 가진, ex 필드가 있다고 해 봅시다. 그러면 외부에서 이 필드에 접근하려면 어떻게 해야 할까요? 우리가 배운 지식으로는, 공개 메서드를 하나 만들어 값을 리턴해야할겁니다. class Example { int ex; public int getEx() { return this.ex; } } 그렇다면 값을 정하는것은 어떻게 해야 할까요? 또 하나의 메서드를 만들어야 하겠죠? (물론 생성자를 이..
강좌글을 확인하다보니, 아주 예전에 했어야 했던 배열 강좌를 안한것을 알게 되었습니다. 그래서 오늘 배열 강좌를 업로드하게 되었습니다. 배열이란 같은 타입의 자료형을 연속적으로 배열한 것으로써, 이것이 왜 필요한지에 대하여 의문점을 가지실수도 있습니다. 배열이 필요한 이유는, 여러개의 상품의 가격을 변수로 만든다고 생각을 해봅시다. 다음과 같이 말이죠 int snack = 1500; int ham = 3000; int fish = 5000; int meat = 2000; 현재는 5개의 상품의 가격만을 나열하고있지만, 시간이 지나며 상품이 추가되어 수십개, 수백개, 상상력을 더해서, 수천, 수만개의 상품의 가격을 나열한다고 생각해봅시다. 그렇다면 엄청나게 고통일 것입니다. 이렇게 수천, 수만개의 코드를 줄..
오버라이드는 완벽히 반환타입과, 매개변수의 숫자 등이 동일한 메서드를 재정의할때 사용한다면, 오버로드(overload)는 매개변수의 수나, 매개변수들의 타입만 다르게 재정의하는것을 뜻합니다. 메서드 오버로드 메서드는 매개변수의 수나, 매개변수들 각각의 타입이 다른 여러가지 동일한 이름의 메서드를 여러개 정의할수 있습니다. 다음과 같이 말이죠 class Math { public int returnBig(int value1, int value2) { return value1>=value2?value1:value2; } public double returnBig(double value1, double value2) { return value1>=value2?value1:value2; } public decim..
오늘은 virtual 그리고 override에 대하여 알아보겠습니다. 오늘 클래스는 Parent와 Child라는 이름을 가진 두가지의 클래스를 선언해 사용할 예정입니다. 코드는 다음과 같습니다. (잘 보시면 "클래스의 상속, base, sealed, protected에 대하여 " 강의에서 사용한 클래스 코드와 동일합니다.) class Parent { protected string something; public Parent(string something){ this.something = something; } public void same() { Console.WriteLine("부모 클래스에서 same이 호출됨"); } } class Child:Parent { string something; publi..