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

카테고리

Happydong (1363)
프로그래밍 (156)
01.C#기초 (4)
02.C#고급 (13)
03.ASP.NET (28)
04.HTML&Script (17)
05.Silverlight (38)
06.C 언어 기초 (2)
07.iOS (14)
08.Java (5)
09.SQL (8)
10.컴퓨터보안 (10)
11.패턴이야기 (3)
12.유니티3D (1)
13.Ubuntu (7)
14.Node.js (6)
MUSIC (16)
인물 (3)
Utility (10)
세미나 소식&내용 (22)
IT뉴스 (18)
운동 (830)
CAFE (10)
Life (282)
Total
Today
Yesterday

'프로그래밍/01.C#기초'에 해당되는 글 4건

  1. 2007.11.16 [C#의 객체지향] - Overloading(오버로딩) 1
  2. 2007.11.16 인터페이스(interface)
  3. 2007.11.16 묵시적 형변환과 명시적 형변환의 이해



ㅁ 오버로딩(Overloading)


 오버로딩의 특징은 다음과 같습니다.


 ☞ 하나의 클래스 내에서 다른 기능을 가지면서 같은 이름을 가진 메서드입니다.

   . 오버로딩(Overloading)은 같은 이름을 가진 여러 개의 메서드를 말합니다.
   . 다중정의, 중복메서드라고 부르며 일반적으로 오버로딩(Overloading)이라고 합니다.
   . 오버로딩은 클래스의 사용자를 편하게 하기 위해서 사용하는 객체지향의 기법이다.


 ☞ 메서드들의 구별은 메서드의 매개변수의 개수와 매개변수의 형에 의해서 구분됩니다.


 ☞ 리턴타입(Return Type)으로 구별하지 않습니다.


오버로딩을 이용하여 두 수를 합하는 예제 코드를 보도록 하겠습니다.

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

using System;

public class OverloadCalc

{

// int형 값을 반환함

public int Plus(int a, int b)

{

return (a+b);

}

// float형 값을 반환함

public float Plus(float a , float b)

{

return (a+b);

}

// double형 값을 반환함.

public double Plus(double a, double b)

{

return (a+b);

}

public static void Main()

{

//인스턴트 생성

OverloadCalc oc = new OverloadCalc();

//각각 parameter값을 대입.

int i = oc.Plus(3,5);

float j = oc.Plus(0.1f,0.2f);

double k = oc.Plus(0.5,0.7);

// return 값을 화면에 출력

Console.WriteLine("int : {0}",i);

Console.WriteLine("float : {0}",j);

Console.WriteLine("double : {0}", k);

}

}

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


위 코드를 실행해 보면 아래와 같은 그림으로 나타날 것입니다. (Ctrl + F5)


사용자 삽입 이미지


위 예제 코드는 같은 이름을 가진 3개의 메소드가 존재합니다.

오버로딩 메소드를 살펴보면 아래와 같습니다.

☞  public int Plus(int a, int b){ }

public float Plus(float a , float b){ }

public double Plus(double a, double b){ }

 

 메서드를 만들 때 메서드의 매개변수 형, 매개변수의 개수 그리고 리턴형이 다르면 메서드의 이름을 다르게 해서 만들어야 겠다고 생각했을 것입니다. 저 또한 오버로드가 몬지 몰랐을땐 그렇게 했었지요. 하지만 그럴필요가 없다는 것입니다.

하나의 메서서드의 이름으로 다양한 매개변수를 받아 들일 수 있는 메서드를 지원하기때문이지요. 이것을 오버로딩(Overloading)이라고 합니다.

 

그럼 컴파일러는 이 3개의 메서드를 어떻게 구분을 할까요!?

이름은 같고 매개변수의 형, 매개변수의 개수 그리고 리턴값이 틀릴 수 있기 때문에 구분할 수 있는 방법은 이세가지 중의 있겠죠. 리턴타입은 각각의 형에 따라 틀려질 수도 있으며 같아 질 수도 있기 때문에 리턴타입으로는 구분하지 않습니다. 그렇다면 남아 있는 것은 매개변수의 형과 매개변수의 개수입니다. 정확하게 내부적으로 사용자가 plus라는 중복메서드를 호출 했을 때 매개변수의 형과 매개변수의

개수로 구분합니다.

 자 그럼 위의 내용의 핵심적인 부분만 요약해 보자면 아래와 같습니다.

 

  ------ 중복메서드를 구분할 때의 규칙 --------

  ★ 매개변수의 개수와 타입이 달라야 한다.

  ★ 매개변수의 개수와 타입 중 하나만 달라도 중복메서드의

     조건으로써 성립 됩니다.

  ★ 메서드의 리턴타입은 중복메서드 구분할 때 사용하지 않습니다.

 

 오버로딩(Overloading)의 개념은 일반 메서드, 생성자메서드, Static메서드에 이르기까지 메서드가 활용되는 곳이면 어디서든 등장합니다. 그러니 Overloading의 개념을 숙지하는 것이 공부하는데 많은 도움이 될지 않을까 싶습니다!

 


참고 서적 : 소설같은 C#

Posted by happydong
, |



인터페이스(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
, |