Class 를 배우기 전에...
클래스를 배우기 전에 우리는 객체 지향 프로그래밍(Object Oreinted Programming, OOP) 에 관하여 알아두어야 합니다.
왜냐하면 C# 자체가 객체 지향성 프로그래밍을 더욱 원활히 하기 위해서 만들어진 언어이기 때문인데요.
이러한 객체 지향 프로그래밍은 우리에게 더욱 원활한 프로그램의 유지와 보수를 가능하게 해주기 때문입니다.
그렇다면 이러한 객체 지향 프로그래밍에는 어떤 것이 필요할까요?
이름에도 적혀있듯이 중요한 것이 객체 입니다.
객체(Object)

프로그래밍에서 객체란 클래스에서 정의한 것을 토대로 메모리에 할당된 것 으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며, 변수, 자료 구조, 함수 또는 메소드가 될 수 있다고 정의하고있습니다.

 

그러나 저는 처음에 이를 접할 때 코드를 짜보지 않고서는 이해가 조금 어려웠는데요.

그래서 사물로 예를 들어보겠습니다.

 

우리가 현재 사용하고 있는 컴퓨터나 핸드폰, 키보드나 마우스 등

'하나의 물건' 으로 보여지는 것 모든 것이 객체가 될 수 있습니다.

그런데 이러한 객체들은 각각의 행동이 있습니다.

컴퓨터는 사용된다. 핸드폰으로 전화를 건다. 등 각각의 객체가 취할 수 있는 행동이 정의되어 있습니다.

이를 상태(state) 또는 행동(behavior) 이라고 합니다.

  • 상태(state)를 C#에서 표현한다면 변수(class 내부의 변수는 필드)
  • 행동(behavior)을 C#에서 표현한다면 메서드 로 표현 할 수 있겠습니다.
  • 그리고 이러한 상태와 행동을 하나의 틀로 정의해주는 것이 바로 Class 입니다.
1. Class
/*접근제한자*/class 클래스이름
{
    /*접근제한자*/필드
    
    /*접근제한자*/ 반환타입 메소드이름(매개변수)
    {
        코드
        
        return 반환값 // 반환값이 존재할 시 - 메서드 부분 참고             
    }
}

위 코드는 클래스의 기본 형태입니다. 클래스의 이름 중 첫 글자는 대문자로 하는 것이 명명규칙입니다.(구분을 위해)

접근제한자를 적어둔 곳은 접근제한자를 사용하여 접근을 제한 시켜도 된다고 표기한 것 입니다.

접근 제한자에 관하여 다음강의에 적어두겠습니다.

 

사실 우리는 이러한 클래스를 항상 사용해왔는데요 우리가 visual studio 2019를 켜면

namespace ConsoleApp1
{//******************************************
    class Program
    {
        static void Main(string[] args)
        {
            
            
        }
    }
}//******************************************

이러한 형태로 class를 사용하고 있던 것을 알 수 있습니다.

그런데 사실 이렇게만 보면 이 class를 어떻게 사용해야 하는지 또 어떤식으로 활용되는지 잘 이해가 되지 않습니다.

그래서 작은 예를 하나 들어보겠습니다.

class Student
{
    String studentID;//필드1
    String name;//필드2
    int age;//필드3


    public void regist(String studentID, String name, int age)
    {					//메서드 생성 필드를 매개변수로 사용
    
        Console.WriteLine($"{this.name} 의 학번은 {this.studentID} 입니다.");
        if(age>20)
        {
            Console.WriteLine($"{this.age}세로 성인 공부방에 입장합니다.");
        }
        else
        {
            Console.WriteLine($"{this.age}세로 청소년 공부방에 입장합니다.");
        }
    }
}

Student 라는 클래스를 생성해 내부에 String타입의 studentID 와 name, integer 타입의 age 필드를 만들어 줬습니다.

이후 regist라는 '학원에 등록하는 행동을 하는' 메서드를 만들어 주었습니다.

※ this. 의 경우 이 class 안에 필드를 사용한다는 의미 입니다. 다음 강의에 같이 다루게 될 내용입니다.

하지만 이곳은 메인영역이 아니죠 따라서 클래스와 객체를 사용하는 방법을 알아야 합니다.

이 클래스와 객체를 사용하는 방법은 바로 생성자를 만들어주는 것 인데요.

생성자를 만들어 우리가 사용할 수 있도록 인스턴스로 변화시켜줘야 하기 때문입니다.

이러한 생성자는 객체를 초기화하는 역할을 합니다.

 

 

 

[클래스이름] [객체로 사용될 이름] = new [생성자]();

↑생성자의 기본적인 형태

바로 예시를 들겠습니다.

 static void Main(string[] args)
{
	Student student = new Student();
}

위와 같이 생성자를 만들어줍니다.

인스턴스화로 인해 아무런 형체가 없던 글은 드디어 형체를 가지고 우리가 사용할 수 있게 되었습니다.

바로 사용 예시를 들어보면

    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();

            student.name = "강호동";
            student.age = 22;
            student.studentID = "20211008.325";
            student.regist(student.studentID, student.name, student.age);//Student클래스 메소드
            Console.WriteLine();
        }
    }

 

이 student는 class Student 와 연결이 되어있어 하나씩 꺼내서 사용 하고 있는 것인데요.

student . 을 사용해서 하나씩 꺼내와 내용에 넣어주고 있는 것 입니다.

그리고 마지막에 regist 메소드를 사용하여 출력까지의 결과를 보면

이렇게 나오는 것을 확인 할 수 있습니다.

하지만 하나만 사용해서는 이 객체지향프로그래밍의 장점을 알 수가 없죠

여러가지 객체를 만드는 것을 보면 어느정도 이해가 가실 것 입니다.

    class Program
    {
        static void Main(string[] args)
        {
            //############################ 생성자 1 ################################
            Student student = new Student();

            student.name = "강호동";
            student.age = 22;
            student.studentID = "20211008.325";
            student.regist();
            Console.WriteLine();
            
            //############################ 생성자 2 ################################
            Student student2 = new Student();//새로운 생성자 생성

            student2.name = "유재석";
            student2.age = 19;
            student2.studentID = "20211008.326";
            student2.regist();
            Console.WriteLine();

            //############################ 생성자 3 ################################
            Student student3 = new Student();//새로운 생성자 생성

            student3.name = "이수근";
            student3.age = 21;
            student3.studentID = "20211008.327";
            student3.regist();
            Console.WriteLine();

            //############################ 생성자 4 ################################
            Student student4 = new Student();//새로운 생성자 생성

            student4.name = "박명수";
            student4.age = 17;
            student4.studentID = "20211008.328";
            student4.regist();
            Console.WriteLine();
        }
    }

위 와같이 각 생성자만을 새로 만들어 새 변수에 담아 하나의 필드를 여러번 사용하는 것이 가능하다는 장점이 있습니다.  물론 이는 반복문을 통해서 더욱 간결하게 만들수 있으니 이는 여러분이 해결해보시면 좋을 것 같습니다.

 


 

오늘 사용된 전체 코드 ↓

더보기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Student
    {
        public String studentID;
        public String name;
        public int age;

        public void regist()
        {
            Console.WriteLine($"{this.name} 의 학번은 {this.studentID} 입니다.");
            if(age>20)
            {
                Console.WriteLine($"{this.age}세로 성인 공부방에 입장합니다.");
            }
            else
            {
                Console.WriteLine($"{this.age}세로 청소년 공부방에 입장합니다.");
            }
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            //############################ 생성자 1 ################################
            Student student = new Student();

            student.name = "강호동";
            student.age = 22;
            student.studentID = "20211008.325";
            student.regist();
            Console.WriteLine();
            
            //############################ 생성자 2 ################################
            Student student2 = new Student();//새로운 생성자 생성

            student2.name = "유재석";
            student2.age = 19;
            student2.studentID = "20211008.326";
            student2.regist();
            Console.WriteLine();

            //############################ 생성자 3 ################################
            Student student3 = new Student();//새로운 생성자 생성

            student3.name = "이수근";
            student3.age = 21;
            student3.studentID = "20211008.327";
            student3.regist();
            Console.WriteLine();

            //############################ 생성자 4 ################################
            Student student4 = new Student();//새로운 생성자 생성

            student4.name = "박명수";
            student4.age = 17;
            student4.studentID = "20211008.328";
            student4.regist();
            Console.WriteLine();
        }
    }
}

 


다음에서는 접근제한자this. 에 대해서 알아보겠습니다.

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

[C#_10_(2)] 접근제한자, this  (0) 2021.10.18
[C#_9] 배열 (Array)  (0) 2021.10.07
[C#_8] 메서드 method  (0) 2021.10.02
[C#_7] 반복문 제어 (Break, Continue, goto)  (0) 2021.09.29
[C#_6] 반복문(for,foreach,while,do while)  (0) 2021.09.24

+ Recent posts