본문 바로가기
코스웨어/16년 스마트컨트롤러

2016-05-20_조재찬_스터디일지-C# 메소드와 클래스 복습

by 알 수 없는 사용자 2016. 5. 20.
728x90
반응형

메소드 오버로딩


int Plus(int a, int b)

{

    return a + b;

}


double Plus(doubl a, double b)

{

    return a + b;

}


//

int       result1 = Plus(1, 2);

double result2 = Plus(3.1, 2.4);


새로운 이름을 붙이지않고 하나의 메소드 이름에 여러개의 구현을 올림.

이름에 대한 고민을 줄여주고 코드의 일관성을 유지해주며, 생산성을 높인다. 






객체지향 프로그래밍


객체는 데이터와 메소드로 이루어진다.


: 속성은 데이터(변수), 기능은 메소드




Class는 객체를 만들기위한 청사진

붕어빵 틀이 클래스, 붕어빵은 객체


class 클래스 이름

{

    // 데이터와 메소드

}




고양이를 추상화하기


class Cat

{

    public string Name;

    public string Color;    // 고양이의 속성(이름과 색)은 데이터


    public void Meow()    // 기능("야옹"은 메소드

    {

        Console.WriteLine("{0} : 야옹", Name);

    }


위의 코드에서 Cat class에 선언된 Name,Color와 같은 클래스안에 선언된 변수들을 Field라고 한다.



Cat class은 청사진으로 실체(instance)는 아니다. 고양이 한마리의 이름과 색깔들을 정의해주어야 한다.




Cat 객체 생성


//kitty라는 객체를 생성

Cat kitty = new Cat();  

kitty.Color = "white";

kitty.Name = "kitty";

Kitty.Mew();

Console.WriteLine("{0} : {1}", kitty.Name, kitty.Color);




Cat kitty = new Cat();   

에서 cat()은 생성자.

new 키워드는 생성자를 호출해서 객체를 생성하는데 사용하는 연산자




this 키워드


class Employee

{

    private string Name;


    public void SetName(string Name)

    {

        this.Name = Name;

    }

}

//

위의 코드에서 class Employee의 field도 Name,

SetName의 매개변수도 Name이다. (string Name)



this는 이런 모호성을 해결할 수 있는 키워드.

this.Name은 Employee 필드를 가리키고 오른쪽의 Name은 SetName() 메소드의 매개 변수를 가리킨다.



this() 생성자


class MyClass

    {

        int a, b, c;


        public MyClass()

        {

            this.a = 5425;

        }


        public MyClass(int b) 

        {

      this.a = 5425;

            this.b = b;

        }


        public MyClass(int b, int c) 

        {

 this.a = 5425;

            this.b = b;

            this.c = c;

        }


위 소스를 보면 문법적 문제는 없다. 다만 세개의 MyClass() 생성자안에 중복되는 코드들이 들어가있는데,

이것을 this() 생성자를 이용해 코드를 개선할 수 있다.


  1. using System;
  2.  
  3. namespace ThisConstructor
  4. {
  5. class MyClass
  6. {
  7. int a, b, c;
  8.  
  9. public MyClass()
  10. {
  11. this.a = 10;
  12. }
  13.  
  14. public MyClass(int b) : this()    //this()가 9행의 MyClass()를 호출
  15. {
  16. this.b = 20;
  17. }
  18.  
  19. public MyClass(int b, int c) : this(b)    //14행의 class호출
  20. {
  21. this.c = 30;
  22. }
  23.  
  24. public void PrintFields()
  25. {
  26. Console.WriteLine("a:{0}, b:{1}, c:{2}", a, b, c);
  27. }
  28. }
  29.  
  30. class MainApp
  31. {
  32. static void Main(string[] args)
  33. {
  34. MyClass a = new MyClass();
  35. a.PrintFields();
  36.  
  37. MyClass b = new MyClass(0);
  38. b.PrintFields();
  39.  
  40. MyClass c = new MyClass(0, 0);
  41. c.PrintFields();
  42. }
  43. }

http://ideone.com/3baG3r


 stdout

a:10, b:0, c:0

a:10, b:20, c:0

a:10, b:20, c:30



728x90