728x90

메소드 오버로딩


1
2
3
4
5
6
7
8
9
10
11
12
13
int Plus(int a, int b)
{
    return a + b;
}
 
double Plus(doubl a, double b)
{
    return a + b;
}
 
//
int       result1 = Plus(12);
double result2 = Plus(3.12.4);
cs


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

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






객체지향 프로그래밍


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


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




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

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

1
2
3
4
5
 
class 클래스 이름
{
    // 데이터와 메소드
}
cs




고양이를 추상화하기


1
2
3
4
5
6
7
8
9
class Cat
{
    public string Name;
    public string Color;    // 고양이의 속성(이름과 색)은 데이터
 
    public void Meow()    // 기능("야옹"은 메소드
    {
        Console.WriteLine("{0} : 야옹", Name);
    }
cs


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



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




Cat 객체 생성


1
2
3
4
5
6
//kitty라는 객체를 생성
Cat kitty = new Cat();  
kitty.Color = "white";
kitty.Name = "kitty";
Kitty.Mew();
Console.WriteLine("{0} : {1}", kitty.Name, kitty.Color);
cs




1
Cat kitty = new Cat();   
cs

에서 cat()은 생성자.

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




this 키워드


1
2
3
4
5
6
7
8
9
10
class Employee
{
    private string Name;
 
    public void SetName(string Name)
    {
        this.Name = Name;
    }
}
//
cs

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

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



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

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



this() 생성자


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
        }
cs


위 소스를 보면 문법적 문제는 없다. 다만 세개의 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. }


 stdout

a:10, b:0, c:0

a:10, b:20, c:0

a:10, b:20, c:30



C# 성적관리 프로그램


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Student_Score
{
    class STUDENT
    {
        public string name;
        public int Kor;
        public int Eng;
        public int Tot;
        public double ag;
        public int grd;

        public string Total(string a, string b)
        {
            string temp = (int.Parse(a) + int.Parse(b)).ToString();
            return temp;
        }
        public string Avg(string a, string b)
        {
            string temp = ((int.Parse(a) + int.Parse(b)) / 2).ToString();
            return temp;
        }
        public string Grade(double ag)
        {
            string grade;
            if (90 >= ag)
                grade = "A";
            else if (80 >= ag)
                grade = "B";
            else if (70 >= ag)
                grade = "C";
            else
                grade = "F";
            return grade;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("학생정보 입력");

            STUDENT s1 = new STUDENT();

            Console.Write("이름 : ");
            s1.name = Console.ReadLine();

            Console.Write("국어성적 : ");
            s1.Kor = int.Parse(Console.ReadLine());

            Console.Write("영어성적 : ");
            s1.Eng = int.Parse(Console.ReadLine());

            s1.Tot = s1.Kor + s1.Eng;
            s1.ag = (s1.Kor + s1.Eng) / (double)2;

            Console.WriteLine("====================================================================================");
            Console.WriteLine("이름" + "\t" + "국어" + "\t" + "영어" + "\t" + "총점" + "\t" + "평균" + "\t" + "등급");
            Console.WriteLine(s1.name + "\t" + s1.Kor + "\t" + s1.Eng + "\t" + s1.Tot + "\t" + s1.ag + "\t" + s1.Grade(s1.ag));
        }


    }
}


Output :



'Study > C#' 카테고리의 다른 글

c# 복습  (0) 2017.03.31
headfirst c#-wpf  (0) 2016.11.19
5/27 업무일지 c#학생성적관리(콘솔)  (0) 2016.05.27
c# 클래스 복습2  (0) 2016.05.23
c# 스터디일지 -클래스  (0) 2016.05.22

+ Recent posts