C#/클래스와 객체지향

구조체는 간단한 객체를 만들 때에 사용하는 형식입니다. 클래스와 거의 동일한 구문을 사용하지만, 복사 형식이 다르고 클래스보다 제한이 조금 많습니다. 또한 구조체는 상속이 불가능하며, 인터페이스를 구현할 수도 없습니다. 대신 클래스보다 안정성 측면에서는 높답니다.  [구조체 선언]구조체는 다음과 같이 선업합니다.struct Point{ public int x; public int y;} 이렇게 생성한 구조체는 new 키워드를 사용하지 않아도 인스턴스를 생성할 수 있습니다. 대신 멤버 변수를 별도로 초기화해주어야 합니다.class Program{ struct Point { public int x; public int y; } static vo..
C#은 메서드를 호출해서 반환할 때 하나의 값만 반환할 수 있습니다. 만약 값을 여러 개 반환하고 싶다면 out 키워드를 사용해야 합니다. out 키워드를 사용하는 대표적인 메서드는 TryParse() 메서드입니다. TryParse() 메서드는 int.TryParse(), float.TryParse() 처럼 기본적인 숫자 자료형에 소속되어 있는 클래스 메서드 입니다.int output;int.TryParse("123", out output); Parse() 메서드는 매개변수로 잘못된 값을 넣으면 예외가 발생해 프로그램이 종료됩니다.하지만 TryParse() 메서드는 숫자로 바꿀 수 있는 문자열을 매개변수로 넣으면 true를 반환하고, 바꿀 수 없는 문자열을 매개변수로 넣으면 fasle를 반환합니다. 만약..
배열의 i번째 요소를 추출할 때 array[i] 형태로 [] 괄호를 사용했고, 마찬가지로 List 클래스도 i번째 요소를 추출할 때 list[i] 형태로 [] 괄호를 사용했습니다. 우리가 만든 클래스에서 [] 괄호를 사용하려면 어떻게 해야 할까요? 이때 사용하는 것이 인덱서(indexer) 입니다. 인덱서는 다음과 같이 선언합니다. class Products{ public int this[int i] { // Products products = new Product(); // products[i] 할 때에 호출 get { return i; } // products[i] = 10 할 때에 호출 set { Console.WriteLin..
[제네릭]List list = new List(); List클래스의 꺾은 괄호 사용하는 이러한 것을 제네릭(Generic)이라 부릅니다. 제네릭은 클래스 내부에서 자료형에 별칭을 지정하는 기능입니다. 제네릭을 활용하는 클래스를 구현할 때는 다음과 같이, 클래스를 선언할 때 뒤에 기호를 사용해줍니다.class Wanted{} 위의 코드에서는 T라는 식별자를 사용했습니다. 이렇게 기호 내부에 식별자를 지정해서 Wanted처럼 사용하면 T에 int 자료형이 할당됩니다.  class Wanted{ public T value; public Wanted(T value) { this.Value = value; }}class Program{ static void Main(string[]..
C#에는 클래스에서 상속을 불가하게 하거나 반드시 상속하게 하는 정보를 입력할 수 있습니다.이것은 메서드에도 동일하게 적용되며, 다양한 방법을 알아보겠습니다.  [sealed 메서드]sealed 키워드는 클래스와 메서드 앞에 적용하는 키워드입니다. 클래스에 적용하면 절대 상속하지 말라는 의미가 되고, 메서드에 적용하면 더 이상 오버라이딩 하지 말라는 의미가 됩니다.   부모의 클래스에 sealed를 붙이고 자식의 클래스에서 상속을 받으면 에러가 발생합니다. 다음 코드를 통해 확인할 수 있습니다. class Program{ sealed class Parent { public void Test() { } } class Child : Parent // 여기서 에러가 발생합니..
하이딩은 부모 클래스와 자식 클래스에 동일한 이름으로 멤버를 만들 때 발생합니다.그런데 하이딩과 같은 형태로 메서드를 작성하고 앞에 virtual 키워드를 붙이면 오버라이딩이라 부르게 됩니다. 오버라이딩은 부모 클래스에 있는 메서드를 자식 클래스에서 다시 구현하는 것을 의미합니다.하이딩과 혼동하지 않도록 주의해야 합니다.   [new 메서드] 부모 클래스의 멤버와 자식 클래스의 멤버가 서로 이름이 같으면 하이딩됩니다. 그리고 하디이한다는 것을 명확하게 표시하고자 메서드 이름 앞에 new 키워드를 붙여줍니다. 체지향 15. 섀도잉과 하이딩 마지막 코드에서 났던 에러를 다음과 같이 해결할 수 있습니다.class Program{ class Parent { public int variab..
변수에 같은 이름을 사용하면 이름 사이에 충돌이 발생하게 됩니다. 이러한 것을 이름 재사용이라 부르면 다음과 같은 종류가 있습니다.오버로딩(Overloading)오버라이딩(Overriding)섀도잉(Shadowing)하이딩(Hiding)하나씩 알아보도록 하겠습니다.  [섀도잉]Class Program{ public static int number = 01; static void Main(string[] args) { int number = 20; Console.WrtieLine(number); }}/*[실행 결과]20*/ C언어 기반의 프로그래밍 언어의 대부분은 변수 이름이 겹칠 때 자신과 가장 가까운 변수를 사용하게 되어 있습니다.이렇게 특정한 영역..
상속했을 때 생성자 메서드가 어떻게 되는지 알아보겠습니다. 생성자는 인스턴스를 초기화할 때 사용합니다. 자식 인스턴스를 생성하면, 부모가 가지고 있는 멤버 초기화를 위해 부모 생성자도 자동으로 호출됩니다. class Program{ class Parent { public Parent() { Console.WriteLine("부모 생성자"); } } class Child : Parent { public Child() { Console.WriteLine("자식 생성자"); } } static void Main(string[] args) {..
[일반적인 자료형 변환] 일반적인 자료형 변환과 같은 방식을 사용합니다.이미 배웠기 때문에 간단하게 보고 넘어가겠습니다.(클래스) 변수 foreach(var item in Animals){ item.Eat(); item.Sleep(); if(item is Dog){ ((Dog)item).Bark(); } if(item is Cat){ ((Cat)item).Meow(); }}   [as 키워드] C#은 as라는 키워드를 사용해서 자료형 변환을 할 수 있습니다. 이전의 자료형 변환은 변환에 실패하면 예외가 발생합니다.하지만 as 키워드를 사용해 자료형을 변환하면 변환에 실패해도 예외가 발생하지 않습니다. 그저 null 값을 넣게 됩니다. as 키워드를 사용하는 방법입니다.변수 a..
[base 키워드] 자식 클래스에서 부모 클래스에서 정의한 멤버를 사용하고 싶다면, 다음과 같이 사용하면 됩니다.class Animal{ public void Eat() { Console.WriteLine("먹습니다."); } public void Sleep() { Console.WriteLine("잠을 잡니다."); }}class Dog : Animal{ public void Test() { // 부모에게서 상속받은 Eat() 메서드와 Sleep() 메서드를 호출합니다. Eat(); Sleep(); }} 이름이 겹치는 등의 특수한 이유가 밸생해서, 부모의 메서드에 접근할 수 없을 때는 base 키워드를 사용하면 됩니다.this가 자신을 나..
tita
'C#/클래스와 객체지향' 카테고리의 글 목록