C#/이것이 C#이닀

17. C#의 클래슀

Rainbow🌈Coder 2022. 2. 10. 11:16
728x90

ν΄λž˜μŠ€λŠ” 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ 청사진

(즉, 섀계도)

클래슀(섀계도) 객체(싀체)
ν˜•μ‹ λ˜λŠ” 섀계도 λ©”λͺ¨λ¦¬μ— 적재된 싀체
각 ν˜•μ‹/클래슀 λ³„λ‘œ ν•˜λ‚˜λ§Œ 쑴재 μ΄λ‘ μ μœΌλ‘œλŠ” λ¬΄ν•œλŒ€λ‘œ 생성 κ°€λŠ₯ν•˜λ©°, λ©”λͺ¨λ¦¬λ₯Ό 차지함
객체가 μ–΄λ–€ 데이터 ν•­λͺ©μ„ κ°€μ§€λŠ”μ§€ μ •μ˜ μ„ μ–Έλœ 데이터 ν•­λͺ©μ— μ‹€μ œ 데이터 μ €μž₯
μ–΄λ–€ λ©”μ†Œλ“œλ₯Ό κ°€μ§ˆμ§€λ₯Ό μ •μ˜ μ •μ˜λ˜μ–΄ μžˆλŠ” λ©”μ†Œλ“œλ₯Ό μ‹€ν–‰

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ OOP라고도 ν•˜λŠ”λ°,

μ½”λ“œ λ‚΄μ˜ λͺ¨λ“  것을 객체둜 ν‘œν˜„ν•˜κ³ μž ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ„ λœ»ν•œλ‹€.

κ°μ²΄λŠ” μ„Έμƒμ˜ λͺ¨λ“  것을 μ§€μΉ­ν•˜λŠ” 단어이닀.

 

μ‚¬λžŒλ„ 객체이고 연필도 객체이고 λͺ¨λ“  것이 객체이닀.

 

ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” μΆ”μƒμ£Όμ˜ μ˜ˆμˆ κ°€κ°€ 된 마λƒ₯

객체의 μ£Όμš” νŠΉμ§•λ§Œ λ½‘μ•„λ‚΄λŠ” 이λ₯Έλ°” 좔상화λ₯Ό ν•˜κ²Œ λœλ‹€.

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ―Έμ„ μ‹œμž‘ν•˜κΈ°  μœ„ν•΄μ„œλŠ” 객체가 κ°€μ§„ 속성과 κΈ°λŠ₯을 골라낼 수 μžˆλŠ” 눈이 ν•„μš”ν•˜λ‹€.

속성은 λ°μ΄ν„°λ‘œ, κΈ°λŠ₯은 λ©”μ†Œλ“œλ‘œ ν‘œν˜„ν•˜λ©΄ λœλ‹€.

κ°μ²΄λŠ” 데이터와 λ©”μ†Œλ“œλ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€.

 

ν΄λž˜μŠ€λŠ” 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ 청사진이닀.

ν΄λž˜μŠ€κ°€ μžλ™μ°¨ 섀계도라면, κ°μ²΄λŠ” μƒμ‚°λœ μ‹€μ œ μžλ™μ°¨λΌκ³  ν•  수 μžˆλ‹€. 

 

μ„€κ²Œλ„λŠ” μžλ™μ°¨κ°€ μ–΄λ–€ 속성과 μ–΄λ–€ κΈ°λŠ₯을 κ°€μ Έμ•Ό ν•˜λŠ”μ§€λ₯Ό μ§€μ •ν•˜κ³ ,

속성 쀑에 λ³€κ²½ κ°€λŠ₯ν•œ 것과 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 것을 κ²°μ •ν•œλ‹€.

ν΄λž˜μŠ€λŠ” 객체가 κ°€μ§€κ²Œ 될 속성과 κΈ°λŠ₯을 μ •μ˜ν•˜μ§€λ§Œ 싀체λ₯Ό κ°€μ§€μ§€ μ•ŠλŠ”λ‹€. 클래슀λ₯Ό μ΄μš©ν•΄ λ§Œλ“  객체가 싀체λ₯Ό κ°€μ§„λ‹€. (동일 클래슀둜 객체 3개λ₯Ό λ§Œλ“€λ©΄, 이 μ„Έ κ°μ²΄λŠ” μ„œλ‘œκ°€ κ΅¬λΆ„λ˜λŠ” κ³ μœ ν•œ 싀체λ₯Ό κ°€μ§€λ©° μ €λ§ˆλ‹€ λ©”λͺ¨λ¦¬ 곡간을 μ°¨μ§€ ν•œλ‹€.)

string a = "123";
string b = "Hello";

μœ„ μ½”λ“œμ—μ„œ string은 C#μ—μ„œ 이미 μ •μ˜λœ λ¬Έμžμ—΄μ„ λ‹€λ£¨λŠ” 클래슀이고

a와 bλŠ” 객체이닀.

 

string은 λ¬Έμžμ—΄μ„ λ‹΄λŠ” 객체λ₯Ό μœ„ν•œ 청사진이고,

a와 bλŠ” μ‹€μ œλ‘œ 데이터λ₯Ό 담을 수 μžˆλŠ” μ‹€μ œ 객체이닀.

a와 bλ₯Ό μΌμ»¬μ–΄μ„œ string의 싀체라고 ν•˜λŠ”λ°,

일반적으둜 μΈμŠ€ν„΄μŠ€λΌκ³  λΆ€λ₯Έλ‹€. (κ·Έλž˜μ„œ 객체λ₯Ό μΈμŠ€ν„΄μŠ€λΌκ³  λΆ€λ₯΄κΈ°λ„ ν•œλ‹€.)

- κ°μ²΄μ—μ„œ 뽑아낸 속성과 κΈ°λŠ₯은 클래슀 μ•ˆμ— λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ‘œ ν‘œν˜„λœλ‹€. 이런 μ‹μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ°ν•˜λŠ” 것이 λ°”λ‘œ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λ‹€. 

 

<ν΄λž˜μŠ€λŠ” 볡합 데이터 ν˜•μ‹μ΄λ‹€>

ν΄λž˜μŠ€λŠ” μ—¬λŸ¬ κ΄€μ μ—μ„œ κ·Έ 의미λ₯Ό 이해해야 ν•œλ‹€.

객체 μ§€ν–₯적인 κ΄€μ μ—μ„œ 보면 ν΄λž˜μŠ€λŠ” 객체λ₯Ό μœ„ν•œ 청사진인 λ™μ‹œμ—

데이터와 λ©”μ†Œλ“œλ₯Ό λ¬ΆλŠ” 집합이닀.

μ½”λ“œμ—μ„œ λ³΄λŠ” ν΄λž˜μŠ€λŠ” 또 ν•˜λ‚˜μ˜ 데이터 ν˜•μ‹μ΄λ‹€.

(κΈ°λ³Έ 데이터 ν˜•μ‹μ„ μ‘°ν•©ν•΄μ„œ λ§Œλ“œλŠ” 볡합 데이터 ν˜•μ‹)

 

<클래슀의 μ„ μ–Έκ³Ό 객체의 생성>

ν΄λž˜μŠ€λŠ” λ‹€μŒκ³Ό 같이 class ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄μ„œ μ„ μ–Έν•œλ‹€.

class 클래슀 이름
{
     //데이터와 λ©”μ†Œλ“œ
}

<고양이 좔상화>

    class Cat
    {
        private string name; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 
        private string color; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 

        public void Meow() //λ©”μ†Œλ“œ
        {
            WriteLine($"{name} : μ•Όμ˜Ή");
        }
    }

μœ„ μ½”λ“œμ˜ Cat ν΄λž˜μŠ€μ— μ„ μ–Έλœ nameκ³Ό color처럼 클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜λ“€μ„ 일컬어 'ν•„λ“œ'라고 ν•œλ‹€.

그리고 ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό λΉ„λ‘―ν•˜μ—¬ ν”„λ‘œνΌν‹°, 이벀트 λ“± 클래슀 내에 μ„ μ–Έλ˜λ‹ˆ μš”μ†Œλ“€μ„ 일컬어 멀버라고 ν•œλ‹€.

ν΄λž˜μŠ€λŠ” 청사진이지 싀체(μΈμŠ€ν„΄μŠ€)κ°€ μ•„λ‹ˆλ‹€.

cat의 μΈμŠ€ν„΄μŠ€ 두 마리λ₯Ό λ§Œλ“€λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace UsingOut
{
    class Cat
    {
        private string name; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 
        private string color; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 

        public void SetName(string newName)
        {
            name = newName;
        }
        public string GetName()
        {
            return name;
        }
        public void SetColor(string newColor)
        {
            color = newColor;
        }
        public string GetColor()
        {
            return color;
        }
        public void Meow() //λ©”μ†Œλ“œ
        {
            WriteLine($"{color} 고양이 {name}κ°€ μ•Όμ˜Ή!");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            Cat kitty = new Cat(); //kitty 객체 생성
            kitty.SetColor("ν•˜μ–€μƒ‰");
            kitty.SetName("ν‚€ν‹°");
            kitty.Meow();
            WriteLine($"{kitty.GetName()}의 색깔은 {kitty.GetColor()}μ΄λžλ‹ˆλ‹€.");

            Cat nero = new Cat(); //nero 객체 생성
            nero.SetColor("검은색");
            nero.SetName("λ„€λ‘œ");
            nero.Meow();
            WriteLine($"{nero.GetName()}의 색깔은 {nero.GetColor()}μ΄λžλ‹ˆλ‹€.");
        }
    }
}

<좜λ ₯ κ²°κ³Ό>

ν•˜μ–€μƒ‰ 고양이 ν‚€ν‹°κ°€ μ•Όμ˜Ή!
ν‚€ν‹°μ˜ 색깔은 ν•˜μ–€μƒ‰μ΄λžλ‹ˆλ‹€.
검은색 고양이 λ„€λ‘œκ°€ μ•Όμ˜Ή!
λ„€λ‘œμ˜ 색깔은 κ²€μ€μƒ‰μ΄λžλ‹ˆλ‹€.

Cat kitty = new Cat()

이 λ¬Έμž₯ κ°€μž₯ 끝에 μžˆλŠ” Cat()은 μƒμ„±μžλΌκ³  ν•˜λŠ” νŠΉλ³„ν•œ λ©”μ†Œλ“œμ΄λ‹€. 

μƒμ„±μžλŠ” 객체λ₯Ό μƒμ„±ν•˜λŠ” 역할을 ν•œλ‹€. 클래슀의 이름과 λ™μΌν•œ 이름을 κ°€μ§„λ‹€.

Cat()μ•žμ— new ν‚€μ›Œλ“œλŠ” μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ„œ 객체λ₯Ό μƒμ„±ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€. 

(new μ—°μ‚°μžμ™€ μƒμ„±μžλŠ” λ°”λŠ˜κ³Ό μ‹€ 같은 쑴재라고 ν•  수 μžˆλ‹€.)

 

λͺ¨λ“  ν΄λž˜μŠ€λŠ” 볡합 데이터 ν˜•μ‹μ΄λ‹€.

그리고 볡합 데이터 ν˜•μ‹μ€ μ°Έμ‘° ν˜•μ‹μ΄λ‹€. 

 

            Cat neko; //nekoλ³€μˆ˜κ°€ μ„ μ–Έλ˜μ—ˆμ§€λ§Œ μ‚¬μš©λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€!

μœ„μ˜ μ„ μ–Έλ¬Έμ—μ„œ nekoλŠ” null을 κ°€μ§„λ‹€.

neko μžμ²΄μ— λ©”λͺ¨λ¦¬κ°€ ν• λ‹Ήλ˜λŠ” 것이 μ•„λ‹ˆκ³ 

nekoλŠ” μ°Έμ‘°(κ·Έλž˜μ„œ neko 에 값을 λŒ€μž…ν•˜λ©΄ 원본이 λ°”λ€ŒλŠ” 것이닀.)둜써 객체가 μžˆλŠ” 곳을 가리킬 뿐이닀.

(볡합 데이터 ν˜•μ‹μ€ μ°Έμ‘° ν˜•μ‹μ΄λ‹€. ν΄λž˜μŠ€λŠ” 볡합데이터 ν˜•μ‹μ΄λ‹€. κ·ΈλŸ¬λ―€λ‘œ ν΄λž˜μŠ€λŠ” μ°Έμ‘°ν˜•μ‹μ΄λ‹€.)

 

Cat kittynew Cat()

κ·Έλž˜μ„œ new μ—°μ‚°μžμ™€ μƒμ„±μžκ°€ ν•„μš”ν•œ 것이닀.

new μ—°μ‚°μžμ™€ μƒμ„±μžλ₯Ό μ΄μš©ν•΄μ„œ

νž™μ— 객체λ₯Ό μƒμ„±ν•˜κ³ ,

kitty(이건 κ·Έλƒ₯ λ³€μˆ˜=클래슀 λ³€μˆ˜)λŠ” μƒμ„±μžκ°€ νž™μ— μƒμ„±ν•œ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” 것이닀.

 

 

μ—¬λ‹΄ : 사싀 new μ—°μ‚°μžμ™€ μƒμ„±μžλŠ” λͺ¨λ“  데이터 ν˜•μ‹μ— μ‚¬μš©ν•  수 μžˆλ‹€.

C#μ—μ„œλŠ” intλ‚˜ float, stringκ³Ό 같은 데이터 ν˜•μ‹λ„ μƒμ„±μžλ₯Ό κ°–κ³  μžˆλ‹€.

λ”°λΌμ„œ λ‹€μŒκ³Ό 같이 λ³€μˆ˜ μ„ μ–Έν•  μˆ˜λ„ μžˆλ‹€.(κ·ΈλŸ¬λ‚˜ ꡳ이 ν•  ν•„μš”κ°€ μ—†λ‹€.)

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace UsingOut
{

    class MainApp
    {
        static void Main(string[] args)
        {
            int a = new int();
            a = 3;
            string lovemessage = new string(new char[] {'I',' ', 'l', 'o', 'v','e', ' ', 'y','o','u' });
            WriteLine(a);
            WriteLine(lovemessage);
        }
    }
}

<좜λ ₯ κ²°κ³Ό>

3
I love you

 

728x90