| 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 |