CS/C#

[C#] 클래스

Mirab 2021. 12. 11. 23:11

프로그래머는 추상주의 예술가라고 합니다.

세상에 존재하거나 존재하지 않는 것을 코드로 나타내야 하며 컴퓨터 세계에서 실체화합니다.

객체로 표현하는 방법이 객체지향 프로그래밍입니다.

# 객체

객체란 것은 세상의 모든 것을 지칭하는 단어입니다. 자동차, 연필, 붕어빵 등등

객체의 주요 특징은 속성과 기능이 있습니다.

속성(property) : 데이터

기능(function) : 행동

 

예를 들어 사람이라는 객체는 속성은 나이, 주민번호, 몸무게, 키가 될 수 있고, 기능은 걷기, 뛰기, 달리기, 먹기와 같이 나열할 수 있습니다.

 

이러한 객체를 어떻게 만들 수 있을까요? 바로 클래스를 이용해서 만들 수 있습니다.

# 클래스

클래스객체를 만들기 위한 청사진(틀)입니다.

붕어빵이라는 객체를 만들기 위해서는 붕어빵 틀이 있어야 찍어낼 수 있습니다. 

붕어빵 기계가 클래스, 붕어빵이 객체입니다.

 

주의할 점은 클래스라는 자체는 (속성과 기능)을 가지는 틀이지만 실제로 존재하는 객체는 아닙니다.

클래스를 이용해서 만든 객체가 바로 실체죠.

어떤 부분으로는 객체가 인스턴스(실체)라고도 불립니다.

 

클래스는 복합 데이터 형식이다.

기본 데이터 형식을 조합해서 만들며, 기능들(메서드)를 묶는 집합입니다.


설명이 엄청 길어졌는데, 이제부터 진짜 클래스를 C#에서는 어떻게 만드는지 알아보겠습니다.

# 클래스의 선언

class FishBread
{
    // 필드(속성)
    // 메소드(기능)
}

클래스에 아까 속성과 기능이 있다고 했습니다.

속성은 보통 데이터로 표현될 수 있는 곳을 적고, 기능은 보통 그 객체가 하는 행동들에 대해서 적는 곳입니다.

이렇게 선언된 속성과 기능들은 클래스 내에 선언됐다고 해서 멤버(Member)라고도 부릅니다.

# 객체의 생성

하지만 위의 클래스로는 어떠한 객체를 만들 수 없습니다.

클래스는 객체를 만들기 위한 틀일 뿐, 실제 객체(인스턴스)가 아니므로 아래와 같이 찍어내야 합니다.

FishBread bread1 = new FishBread(); // 아무 옵션이 없는 붕어빵

그냥 옵션이 없는 붕어빵을 찍어내면 밋밋한 밀가루 빵일 것입니다.

그래서 우리는 좀 더 색다른 붕어빵을 찍기 위해서는 생성자(Constructor)를 이용해서 맛있는 붕어빵을 만들 수 있습니다.

# 생성자와 new 연산자

public FishBread(string name, string taste, int price)
{
    this.name = name;
    this.taste = taste;
    this.price = price;
}

FishBread bread = new FishBread("일반 붕어빵", "팥", 1000);

보통 아무것도 지정하지 않으면 디폴트 생성자(인자가 없는)가 만들어지며, 프로그래머가 위와 같이 이름, 맛, 가격을 정의한 생성자를 만든다면 디폴트 생성자는 프로그래머가 따로 만들어줘야 하지만, 이렇게 하면 맛있는 붕어빵을 만들 수 있게 됩니다.

 

생성자와 new 연산자를 사용해서 맛있는 붕어빵을 만들 수 있습니다.

이때 생성한 객체는 힙에 생성이 되고, bread는 힙에 생성한 객체를 가리키게 됩니다.

 

이제 전체적으로 붕어빵 틀을 만들고 붕어빵을 만들어봅시다.

using System;
class FishBread
{
    // 속성들 : 데이터
    public string name;
    public string taste;
    public int price;

    // 생성자
    public FishBread(string name, string taste, int price)
    {
        this.name = name;
        this.taste = taste;
        this.price = price;
    }

    // 기능들 : 메소드
    public void PrintFishBread()
    {
        Console.WriteLine($"name:{name}, taste:{taste}, price:{price}");
    }
}

class Program
{
    static void Main()
    {
        FishBread bread = new FishBread("일반 붕어빵", "팥", 1000);
        bread.PrintFishBread();
    }
}

[실행결과]

name:일반 붕어빵, taste:팥, price:1000

 

클래스에 대해서 생성하는 방법과 클래스와 객체의 의미에 대해서 공부했습니다.

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

[C#] 정적 필드와 메서드(static)  (0) 2021.12.12
[C#] 생성자와 소멸자  (0) 2021.12.11
[C#] 문자열 찾기 함수들  (0) 2021.12.10
[C#] var  (0) 2021.12.10
[C#] foreach  (0) 2021.12.05