상속했을 때 생성자 메서드가 어떻게 되는지 알아보겠습니다. 생성자는 인스턴스를 초기화할 때 사용합니다. 자식 인스턴스를 생성하면, 부모가 가지고 있는 멤버 초기화를 위해 부모 생성자도 자동으로 호출됩니다. class Program{ class Parent { public Parent() { Console.WriteLine("부모 생성자"); } } class Child : Parent { public Child() { Console.WriteLine("자식 생성자"); } } static void Main(string[] args) {..
C#
[일반적인 자료형 변환] 일반적인 자료형 변환과 같은 방식을 사용합니다.이미 배웠기 때문에 간단하게 보고 넘어가겠습니다.(클래스) 변수 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가 자신을 나..
상속을 사용해 클래스 구현 부분의 코드 중복을 해결했습니다. 이제 Main() 메서드를 살펴보면 여기에도 코드가 중복되는 것을 볼 수 있습니다.class Animal{ public int Age { get; set; } public Animal() { this.Age = 0; } public void Eat(); { Console.WriteLine("먹습니다"); } public void Sleep(); { Console.WriteLine("잡니다"); }}class Dog : Animal // Animal 클래스의 상속을 받습니다.{ public stirng Color { get; set; } public void Bark() { Console.Wr..
클래스 기반의 클래스 지향 언어에서 가장 중요한 특징은 바로 상속(Inheritance)과 다형성(Polymorphism)입니다. 만약 Dog() 클래스와 Cat() 클래스를 만든다고 생각해봅시다.class Dog{ public int Age { get; set; } public string Color { get; set; } public Dog() { this.Age = 0; } public void Eat(); { Console.WriteLine("먹습니다"); } public void Sleep(); { Console.WriteLine("잡니다"); } public void Bark(); { Console.WriteLine("짖습니다"); }}class Cat..
C#의 모든 자료형은 값(value) / 참조(reference) 두 가지로 나눌 수 있습니다. 지금까지 배워왔다너 int / float 등 기본 자료형은 값(value) 이고, 클래스로 만들어진 인스턴스(객체)는 참조(reference) 입니다. 다음 코드로 자세하게 살펴보겠습니다.static void Main(string[] args){ int a = 10; Random ran = new Random();} a는 선언과 동시에 메모리라는 영역에 4바이트의 영역을 잡고 값이 들어갑니다. 객체를 선언한 ran은 new Ranom()으로 인스턴스를 생성했기 때문에 힙(Heap) 이라는 영역에 위치를 잡습니다.그리고 그 주소값이 ran에 들어가게 됩니다.결국 변수 ran 은 객체의 값이 들..
속성에 대해 얘기하기전에 속성이 필요한 이유에 대해서 알아보겠습니다. 예를들어 너비(width), 높이(height) 그리고 사각형의 넓이를 구하는 Area() 메서드까지 가지고 있는 Box() 클래스가 있다고 가정해봅시다.분명 코드상에는 문제가 없다고 생각했지만 너비와 높이를 음수로 입력하는 기이한 상황이 발생했더니 음수의 결과값이 나오는 현상이 발생했습니다. 이러한 상황을 미연에 방지하기 위해 클래스를 만들 때 일어날 상황을 원천적으로 봉쇄하는 것이 필요합니다.다양한 방법이 있지만 하나씩 알아보겠습니다. [캡슐화] class Box{ private int width; private int height; public Box(int width, int height) { ..
생성자(Constructor)는 무언가 생성할 때 자동으로 호출되는 메서드입니다.생성자의 종류는 많지만 우선 인스턴스 생성자에 대해서 알아보겠습니다. 인스턴스 생성자는 인스턴스를 생성할 때 자동으로 호출되는 메서드로 다음과 같은 조건이 있습니다.이름은 클래스 이름과 같아야 합니다.접근 제한자는 public 이어야 합니다.반화과 관련된 선언을 하지 않아야 합니다.다음과 같은 형태가 됩니다.public [클래스 이름] ([매개변수]){} 생성자는 일반적으로 인스턴스 변수를 초기화하는 일을 합니다.간단한 예제를 살펴보겠습니다. class Program{ class Product { public static int counter = 0; public int id; ..
C#은 접근 제한자가 굉장히 많습니다. 일단 대표적인 접근자에 대해서만 알아보겠습니다.privatepublic [private 접근 제한자]우선 private 접근 제한자에 대해 알아보겠습니다. 접근 제한자를 입력하지 않았을 경우 자동으로 private 접근 제한자가 설정됩니다.static void Main(string[] args){} Main 함수는 접근 제한자를 설정하지 않았으므로 private 접근 제한자가 설정된 메서드입니다. private 접근 제한자가 설정된 메서드를 외부나 내부 클래스에서 접근하는 예제를 살펴보겠습니다. class Test_out{ // Program.Main 은 private 이기 때문에 Program 클래스 외부에서는 접근할 수 없습니다. // 따라서 이 코드..
오버로딩이란 이름은 같고, 매개변수는 다른 메서드를 만드는 것은 오버로딩(Overloading) 이라고 부릅니다. 오버로딩은 말 그대로 이름은 같고 매개변수가 다른 메서드를 만들기만 하면 되기 때문에 예제를 바로 살펴보겠습니다. class Program{ class MyMath { public static int Abs(int input) { if(input