반응형

분류 전체보기 2946

[C#] 6.2.6 sealed 키워드를 이용한 봉인

6.2.6 sealed 키워드를 이용한 봉인 C#에서는 특정 형식을 기반 형식으로 사용하지 못하게 봉인시킬 수 있습니다. 봉인 형식을 정의할 때는 형식 명 앞에 sealed 키워드를 명시합니다. [그림 25] 봉인 클래스를 기반 클래스로 사용할 때 오류 화면 그리고 파생 형식에서 재정의한 메서드에 sealed 키워드를 명시하여 이후에 파생 형식에서 재정의하지 못하게 봉인 메서드를 만들 수 있습니다. [그림 26] 봉인된 멤버를 재정의할 때 오류 화면 [C#] 6. 상속과 다형성 - 6.1 상속[C#] 6.2 다형성 - 기반 형식의 변수로 파생한 개체를 참조[C#] 6.2.2 is 연산자와 as 연산자[C#] 무효화 - new 키워드, base 키워드[C#] 6.2.4 가상화 virtual, 재정의 ove..

[C#] 6.2.5 abstract 키워드를 이용한 추상화

6.2.5 abstract 키워드를 이용한 추상화 C#에서는 상속을 통해서만 사용할 수 있는 기반 클래스를 만들 수 있습니다. 이러한 클래스를 만들기 위해서는 abstract 키워드를 이용하여 클래스를 정의하면 되는데 이를 추상 클래스라 합니다. C#에서 추상 클래스는 개체를 생성할 수 없으며 단지 상속을 통해 기반 클래스 역할만 할 수 있습니다. [그림 24] 추상 클래스 형식의 개체를 생성하려고 할 때 오류 화면 추상 클래스에는 추상 메서드를 캡슐화할 수 있는데 abstract 키워드를 명시하고 메서드의 수행 코드는 정의하지 않습니다. 이처럼 추상 메서드를 캡슐화하면 파생 형식에서는 추상 멤버를 재정의해야 개체를 생성할 수 있게 됩니다. ▶ abstract 키워드를 이용한 추상 클래스 정의 및 추상 ..

[C#] 6.2.4 가상화 virtual, 재정의 override

6.2.4 가상화 virtual, 재정의 override new 키워드로 기반 클래스의 멤버를 무효화 할 때는 사용하는 변수 형식의 멤버가 사용됩니다. 이러한 특징은 기반 형식의 변수로 다양한 파생 개체를 참조할 때 실제 개체에 정의된 멤버가 사용되지 않으므로 다형성의 장점을 충분히 사용하지 못합니다. C#에서는 기반 형식에서 정의한 멤버를 파생 형식에서 재정의하면 변수의 형식이 아닌 개체의 형식의 멤버가 동작하게 virtual 키워드와 override 키워드를 제공합니다. 기반 형식에서 virtual 키워드를 명시하여 멤버를 선언하면 가상 멤버가 됩니다. 이때 파생 형식에서 기반 형식의 가상 멤버를 재정의할 때는 override 키워드를 명시합니다. ▶ virtual로 가상 메서드 선언, overrid..

[C#] 무효화 - new 키워드, base 키워드

6.2.3 무효화 - new 키워드, base 키워드 C#에서 파생된 형식에서 기반 형식에 정의된 멤버와 같은 이름의 멤버를 new 키워드를 사용하여 캡슐화하면 기반 형식의 멤버는 무효화됩니다. 이 때는 사용하는 곳의 형식에 따른 멤버가 사용됩니다. 즉, 기반 형식의 변수로 접근하면 기반 형식의 멤버가 사용되고 파생 형식의 변수로 접근하면 파생 형식의 멤버가 사용됩니다. ▶ new 키워드를 이용한 무효화 class Man { internal void Work() { Console.WriteLine("일을 하다."); } } class Student : Man { internal new void Work() //new 키워드로 기반 형식 Man의 Work 메서드 무효화 { base.Work(); //bas..

[C#] 6.2.2 is 연산자와 as 연산자

6.2.2 is 연산자와 as 연산자 이처럼 기반 형식의 변수로 파생된 개체를 참조할 수 있다는 특징은 사용의 편의성이 제공합니다. 하지만 프로그램에서 파생 형식에만 캡슐화된 멤버에 접근하여 사용해야 할 때도 있습니다. 이 때 is 연산자와 as 연산자를 사용하면 파생 개체를 참조할 수 있습니다. ▶ 용어: 상향 캐스팅 , 하향 캐스팅 Stu stu = man as Stu; //파생된 형식 개체 참조 if (stu != null) //man이 Stu개체일 때 { stu.Study(); } else { Console.WriteLine("Stu 형식 개체가 아닙니다. "); } is 연산자는 이항 연산자로 좌항에 변수가 오고 우항에 형식 명을 명시하면 해당 변수가 해당 형식으로 호환할 수 있는지를 반환합니다..

[C#] 6.2 다형성 - 기반 형식의 변수로 파생한 개체를 참조

6.2 다형성 OOP 언어는 캡슐화, 상속과 더불어 중요한 특징으로 다형성이 있습니다. C#에서의 다형성은 크게 두 가지로 얘기합니다. 첫째로 변수는 여러 형식의 개체를 참조할 수 있다는 것입니다. C#에서는 기반 형식의 변수로 파생된 개체를 참조할 수 있습니다. 두 번째로 변수를 통해 메서드를 호출했을 때 구체적인 동작이 다를 수 있다는 것입니다. C#에서는 기반 형식의 멤버 메서드를 추상 메서드와 가상 메서드로 지정할 수 있는데 파생된 형식에서 재정의하면 기반 형식의 변수로 파생된 개체를 참조했을 때 변수의 형식에 정의된 멤버가 아닌 참조된 실제 개체의 멤버가 수행이 됩니다. 6.2.1 기반 형식의 변수로 파생한 개체를 참조 C#에서는 다형성을 제공하여 기반 형식의 변수로 파생된 개체를 참조할 수 있..

[C#] 6. 상속과 다형성 - 6.1 상속

6. 상속과 다형성 C#에서는 다른 형식을 기반으로 파생된 형식을 정의할 수 있습니다. 이러한 OOP 언어의 특징을 상속이라고 합니다. C#에서 상속은 클래스와 인터페이스가 기반 형식이 될 수 있고 구조체는 기반 형식으로 인터페이스만 가능합니다. 이처럼 상속으로 표현된 기반 클래스와 파생 클래스의 관계를 일반화 관계라고 합니다. C#에서는 기반 형식의 변수로 파생된 형식의 개체를 참조할 수 있어 사용하는 곳에 편의를 제공합니다. 그리고 기반 형식에 정의한 멤버 메서드를 파생 형식에서 재정의할 수 있습니다. 이처럼 기반 형식의 멤버 메서드를 재정의하여 사용하는 변수의 형식의 멤버 메서드가 아닌 실제 참조하고 있는 개체의 멤버 메서드가 수행되게 할 수 있습니다. 이 같은 특징을 다형성이라고 합니다. 이번 장..

[C#] 5.3 접근 한정자

5.3 접근 한정자 C#에서는 정의하는 형식을 사용하는 범위나 형식 내의 멤버에 대해 사용할 수 있는 범위를 접근 한정자를 통해 지정할 수 있습니다. 형식 정의문 앞에 올 수 있는 접근 한정자에는 public과 internal이 있는데 명시를 하지 않으면 internal로 지정됩니다. public으로 접근 지정하면 다른 .NET 어셈블리에서도 접근할 수 있지만 internal로 지정하면 같은 .NET 어셈블리에서만 접근할 수 있습니다. 예를 들어 라이브러리를 만들 때 라이브러리 내에서만 접근할 멤버들은 internal로 외부에서 사용해도 되는 멤버는 public으로 지정합니다. 이에 대해 이해하려면 여러 개의 .NET 어셈블리로 구성된 프로그램을 만들 수 있어야 하는데 여기서 이를 다루는 것은 적절치 않..

[C#] 5.2 개체의 멤버와 정적(static) 멤버

5.2 개체의 멤버와 정적(static) 멤버 클래스나 구조체에 캡슐화할 수 있는 멤버들은 어떠한 것들이 있는지 살펴보았는데 중간마다 개체의 멤버와 정적인 멤버라는 얘기가 나왔던 것을 기억하시죠. 이제 이들에 대해 좀 더 자세히 살펴봅시다. 클래스나 구조체를 정의하였다는 것은 형식을 정의한 것을 의미하며 해당 형식에 맞는 실질적인 대상을 개체라고 합니다. 개체의 멤버는 개체의 데이터나 이를 사용하기 위한 메서드 등을 얘기합니다. 이에 반해 정적인 멤버는 개체에 상관없이 해당 형식에 공통으로 사용되는 멤버입니다. 클래스나 구조체에 캡슐화된 멤버들 중에 static 키워드나 const 키워드가 붙어 있는 멤버들은 정적인 멤버이며 이 외에 다른 멤버들은 개체의 멤버입니다. public으로 접근이 지정된 멤버들..

[C#] 5.1.8 연산자 중복 정의

5.1.8 연산자 중복 정의 C#에서는 클래스와 구조체의 멤버로 연산자 중복 정의를 캡슐화할 수 있습니다. 연산자 중복 정의를 하는 방법은 메서드와 비슷한데 static 키워드를 붙여 정적 멤버로 만들어야 하며 public으로 접근을 한정시키고 메서드 이름 대신 operator 키워드와 연산 기호를 명시한다는 점입니다. 그렇다고 모든 연산자를 중복 정의가 가능한 것은 아닙니다. 다음은 중복 정의가 가능한 것들입니다. 단항 연산자: +, -, !, ~, ++, --, true, false이항 연산자: +,-,*,/,%,&,|,^,, ==, !=, , = ▶ 연산자 중복 정의

반응형