블로그 이미지
내게 능력 주시는 자 안에서 내가 모든것을 할수 있느니라 - 빌립보서 4 : 13 - happydong

카테고리

Happydong (1363)
프로그래밍 (156)
MUSIC (16)
인물 (3)
Utility (10)
세미나 소식&내용 (22)
IT뉴스 (18)
운동 (830)
CAFE (10)
Life (282)
Total
Today
Yesterday



인터페이스(interface)

 

 - class가 제공하는 서비스를 명시하는데 사용되는 행위(method/property/indexer/event)의 집합

 - 세부적인 구현은 하지 않고, 단지 실제 class에서 해야 할 행동을 정의

   . 각 멤버의 signature만 정의

   . method,property,event,indexer를 하나로 묶어주는 역할

 - 실제 세부적인 구현은 interface를 상속받는 class에서 구현

 - class 가 다중상속을 지원하지 못하는 것을 보완하는 기능


인터페이스의 특징

 

  - method, property,indexer,event 만 포함될 수 있다.

    . const,field,constructor,destructor,static member 등은 포함될 수 없다.

  - 기본적으로 public member

  - 인터페이스에 대한 객체(인스턴스)를 생성할 수 없다.

  - interface 에서 정의된 모든 member는 파생 class에서 반드시 모두 구현되어야 한다.

  - 인터페이스의 이름은 I로 시작하는 것이 일반적이다.

  - 하나의 class를 다른 class가 상속받을 수 있듯이 인터페이스도 다른 인터페이스가 상속을    

    수 있다.


인터페이스의 정의

 

 - interface를 구현하는 class의 해당 method 에는 접근자(public,private,protected등)와 abstract,

  virtual , override, new등의 수식자를 저정할 수 없다.

 - System.Collections namespace 의 IEnumerator

////////////////////////////////////////////////////////////////////////////////////////

 interface IEnumerator{

          //member property

       object Current { get; } // 모든 member는 default로 public


         // member method

       bool MoveNext(); // interface의 모든 member는 정의만 있고 구현은 없다.

       void Reset();

}

////////////////////////////////////////////////////////////////////////////////////////

이렇게 member의 정의만 있고 구현은 없다.

이렇게 interface에서 상속을 받는 class 에서는 구현을 해줘야 한다.

///////////////////////////////// 예 제 /////////////////////////////////////////////////

class CustomEnumerator : IEnumerator

{

           public bool MoveNext()

           {

                 //...구체내용

                 return false;

           }

           public void Reset()

           {

                   pos = 0;

           }

           public object Current{

                  get{ return carArray[pos]; }

           }

}

////////////////////////////////////////////////////////////////////////////////////////


인터페이스의 사용


 - 인터페이스는 직접 객체를 생성할 수 없고, 인터페이스를 상속받은 class의 객체를 통해 사용된다.

///////////////////////////////////예  제//////////////////////////////////////////////////

         CustomEnumerator ce = new CustomEnumerator();

         bool bMove = ce.MoveNext();

         ce.Reset();

////////////////////////////////////////////////////////////////////////////////////////



참고 서적 : 소설같은 C#

Posted by happydong
, |



ㅁ 묵시적 형변환 , 명시적 형변환

 - 하나의 data type에서 다른 data type으로 변환을 할때, 컴파일러는 데이터 손실이 발생할 경우 명시적형 변환을 요구하고, 손실이 발생하지 않는다면 묵시적으로 형변환을 한다.

   . 묵시적 형변환 : 작은 data type에서 큰 data type으로 변환 시 (컴파일이 자동으로 해줌)

   . 명시적 형변환 : 큰 data type에서 작은 data type으로 변환 시 (손실이 발생할 것을 개발자가 인지하고 명시적으로 변환해 줘야 한다. )


ㅁ Boxing, Unboxing

 - Boxing : value type 을 reference type 으로 묵지적으로 변환 하는 것

  (int type를 Object type 으로 바꾸는 것을 Boxing이라고 한다.)

 - Unboxing : reference type 을 value type으로 명시적으로 변환 하는 것

 (Object type 를 int type 으로 바꾸는 것을 Unboxing 이라고 한다.)

Posted by happydong
, |



CTS(Common Type System)

 - CTS는 서로 다른 언어에서 상호작용을 하기위한 표준 데이터 형식을 정의 한 것이다.

  . 서로 다른 Language로 제작된 class의 인스턴스를 만들거나 상속받을 때는 해당 class에서 사용

    하는 data type을 알아야한다.

Value Type

 - 메모리 상의 스택(stack)에 저장됨

    . Stack이란 고정된 길이를 갖는 데이터를 저장하는 영역이다.

 - 변수 선언시 실제 값을 내부에 가짐

 - 변수 대입시 같은 데이터의 복사본을 메모리에 만듬(서로 영향을 미치지 않는다.)

   . 예를 들면 int 타입의 변수가 두개가 있다고 해보자. a 값은 1이고 b의 값은 a의 값을 넣는다..

    코드로 보면 b = a; 이런식으로 될것이다. 이렇게대입하고 나서 a 의 값을 변경해도 b의 값은 영향

    을 받지 않는다.

 - Value Type 의 종류 : 정수형, 부동소수점형, decimal 형, boolean 형, 구조체(struct)


Reference Type

 - 메모리 상의 힙(Heap)에 저장됨

   . Heap : 동적인 크기를 가진 데이터를 저장하는 공간(자유공간)

 - 변수 선언시 변수는 실제 값이 저장된 위치에 대한 주소를 가짐

 - 변수 대입시 주소 값을 복사하게됨 (서로 영향을 미칠 수 있다.)

   . Value Type 처럼 값이 복사가 되는게 아니라 값이 있는 주소값이 복사가 되기 때문에 그 주소에

   있는 값이 변경되면 영향을 미칠 수 있다.

-  Reference Type의 종류 : class, interface,배열(array),위임(delegate)



Posted by happydong
, |