본문 바로가기
PROGRAMING📚/C#📑

C#_클래스의 응용

별찌루 2019. 2. 23.
728x90
반응형

//추상(가상) 메소드 & 추상 클래스//

 

처리를 명시 하지 않고 호출한 쪽만 정의 된 것을 추상 메소드라고한다.

이러한 추상메소드들을 가진 클래스를 "가상(추상) 클래스"라고 한다.

 

-> 추상클래스의 객체는 생성 할 수 없다. 상속하여 추상 메소드를 오버라이드해야한다.

 

<정의>

* <abstract > 수식자를 사용하여 정의한다. ->new 로 객체 생성 불가능 *

abstract class Animal {

public string name;

public abstract void cry();

 

public void main(){

 

}

}

 

추상 클래스를 상속하여 객체를 생성하려면 <override>를 붙인 멤버가 있어야한다.

-> 추상 메소드는 반드시 오버라이드하여 사용해야한다.

 

(예)

public abstract class PureBase
{
   // abstract C#키워드 
   public abstract int GetFirst();
   public abstract int GetNext();   
}

public class DerivedA : PureBase
{
   private int no = 1;

   // override C#키워드 
   public override int GetFirst()
   {
      return no;
   }

   public override int GetNext()
   {
      return ++no;
   }
}

 

 

//인터페이스//

상속 관계가 없는 클래스에 기능을 제공하는 구조를 말한다. 클래스와 유사

but. 추상메소드, 추상 속성, 추상 인덱서, 이벤트 에서만 한정되고 클래스에 조립하는 형태로 사용된다.

 

<특징>

1. 인터페이스로 객체 생성 불가능

2. 인터페이스 내의 멤버는 구현부가 존재 하지 않는다.

3. 멤버는 default로 전부 public이 된다.

4. 내부에서 필드를 가질수 없다. { } 사용 불가능

5. 어떤 접근자. 한정자를 붙일수 없음

6. 여러개의 인터페이스를 장착 가능하다.

 

' : '를 사용하여 클래스에 장착 시켜 정의한다. 또 ' : '를 사용하여 클래스 처럼 상속하여 새로운 인터페이스를 만드는 것이 가능하다.

 

<정의>

//인터페이스 구현

interface A{

void SayA();

}

 

interface B{

void SayB();

}

//추상클래스 구현

abstract class Top{

public abstract void SayTop();

}

 

class TopTest : Top, A, B{

public void SayA(){}

public void SayB(){}

public override void SayTop(){}

 

 

상속의 원본 인터페이스와 상속 대상의 인터페이스에 같은 추상 메소드가 있을 때, 상속 대상의 추상 멤버에 new를 붙여 상속 대상을 우선 하게 해주어야한다. 

 

(예) interface A {

void e();

void f();

}

 

interface B:A {

void g();

new void f();

}

 

 

 

//다형성//

상속한 클래스의 객체는 기본 클래스로 취급할 수도 있고, 파생클래스로도 취급이 가능하다. 

이 처럼 한 개의 객체나 메소드가 많은 형태를 가지는 것을 "다형성"이라고 한다.

 

파생클래스의 객체는 기본 클래스의 객체에 대입할 수 있다. 하지만 파생클래스의 객체를 기본클래스의 객체에는 대입 할 수 없다. 

 

<특징>

 

파생 클래스의 객체는 기본클래스의 객체 변수에 대입할 수 있다.

(예) A ab = new B();

 

메소드는 객체를 인수로 받을 수 있다. 기본 클래스의 객체를 받은 메소드에는 파생클래스의 객체를 전달 할 수 있다.

메소드는 실제 객체가 아니라 첨조 정보가 전달 된다.

 

//override 와 new//

클래스 A와 파생클래스 B가 있고 메소드 m이 두개의 클래스에 존재 할때, 

 

1. override를 붙인 메소드의 경우, 객체 변수의 형에도 불구하고 인터페이스 형에 따라 참조 대상이 결정된다.

 

* override의 경우 , 클래스 b의 메소드가 사용된다.*

 

2. new를 붙인 경우에는 참조 대상의 객체 변수의 형에 따라 결정된다.

 

* new의 경우, 클래스 A의 메소드가 사용된다. *

 

//객체 클래스//

 

객체 클래스는 모든 클래스의 기본이 되는 클래스 이다. 

모든 클래스는 객체 클래스를 상속하고 있다.

객체 클래스에는 참조형 뿐만 아니라 값형의 데이터도 대입이 가능하다 

 

- 박싱 : 값형의 데이터를 객체형의 변수에 대입하는 것

<정의>

int a =10;

object ob;

ob =a;

 

-언박싱: 박싱의 역으로 값형에 객체형의 데이터를 대입하는 것을 말한다.

 

<정의>

int b = (int)ob; 

//ob에 저장되어있던 값이 int형으로 저장된다.

 

*형을 명확하게 하기 위해 형변환을 사용한다.*

 

 

 

 

 

//네임스페이스//

같은 이름의 클래스 등이 경합을 일으키지 않도록 하는 것

클래스나 구조체의 그룹을 말한다.

 

<정의>

namespace A{

class Abc{

 

 

}

}

//클래스Abc는 네임스페이스A에 속혀 있다.

 

네임스페이스 안에 있는 클래스를 참조 하려면 ' . ' 사용한다.

같은 이름의 클래스나 구조체가 정의되어 있다고 해도 네임스페이스로 격리되어 있을 경우에는 경합이 일어나지 않는다.

->네임스페이스는 네임스페이스 안에 네임스페이스를 만드는 것이 가능하다.

 

<using 지시어>

 

<정의>

     using R = Rishing;

(using 네임스페이스의 별명 = 네임스페이스)

 

- 지시어를 생략하고 명시 할 수 있다.

- 프로그램의 맨 앞이나 네임스페이스 블록의 맨 앞에 명시해야한다.

- 네임스페이스명이 길어져서 사용하기 곤란할때, 별명처럼 사용할 수 있다.

 

 

 

 

 

 

 

#참고: https://jshzizon.tistory.com/

728x90
반응형

'PROGRAMING📚 > C#📑' 카테고리의 다른 글

배열(생성과 초기화 /이차원배열/가변배열) 이해하기  (0) 2019.03.13
C#_기본 문법  (0) 2019.03.07
C#_클래스  (0) 2019.02.22
C#_ 제어문  (0) 2019.02.21
C#_데이터형  (0) 2019.02.14

댓글