메소드 오버로딩
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() 생성자를 이용해 코드를 개선할 수 있다.
- using System;
- namespace ThisConstructor
- {
- class MyClass
- {
- int a, b, c;
- public MyClass()
- {
- this.a = 10;
- }
- public MyClass(int b) : this() //this()가 9행의 MyClass()를 호출
- {
- this.b = 20;
- }
- public MyClass(int b, int c) : this(b) //14행의 class호출
- {
- this.c = 30;
- }
- public void PrintFields()
- {
- Console.WriteLine("a:{0}, b:{1}, c:{2}", a, b, c);
- }
- }
- class MainApp
- {
- static void Main(string[] args)
- {
- MyClass a = new MyClass();
- a.PrintFields();
- MyClass b = new MyClass(0);
- b.PrintFields();
- MyClass c = new MyClass(0, 0);
- c.PrintFields();
- }
- }
stdout
a:10, b:0, c:0
a:10, b:20, c:0
a:10, b:20, c:30
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
2016_0606_개인스터디일지_아두이노_포토레지스터를 이용한 RGB LED 색상 변화 (0) | 2016.06.06 |
---|---|
리눅스 커널 4.6 공개··· ARM·터치 지원 등 강화 (0) | 2016.06.02 |
오픈소스 버그를 잡는 블랙덕 무료 툴 ‘Security Checker’OSS (0) | 2016.06.01 |
2016-05-22_조재찬_스터디일지-C# 클래스 복습 (0) | 2016.05.22 |
이름 (0) | 2016.05.20 |
2016-05-19_조재찬_업무일지_ AVR-LCD출력 & C#-성적관리 프로그램 (0) | 2016.05.20 |
2016-05-18_조재찬_스터디일지_ C#-설문조사 APP, 기초복습 (0) | 2016.05.19 |
2016-05-18_조재찬_업무일지_ C#-OOP와 클래스 (0) | 2016.05.18 |