관리 메뉴

Algo μ“°μž

01. ν΄λž˜μŠ€μ™€ 객체 λ³Έλ¬Έ

πŸ’» Programming Language/C#

01. ν΄λž˜μŠ€μ™€ 객체

S.Honey 2022. 4. 5. 16:53

ν΄λž˜μŠ€μ™€ 객체


  • 객체지ν–₯ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming => OOP) : 컴퓨터 ν”„λ‘œκ·Έλž¨μ„ λͺ…λ Ήμ–΄μ˜ λͺ©λ‘μœΌλ‘œ λ³΄λŠ” μ‹œκ°μ—μ„œ λ²—μ–΄λ‚˜ μ—¬λŸ¬ 개의 λ…λ¦½λœ λ‹¨μœ„, 즉 객체 λ“€μ˜ λͺ¨μž„μœΌλ‘œ νŒŒμ•…ν•˜κ³ μž ν•˜λŠ” 것이닀. 각각의 κ°μ²΄λŠ” λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›κ³ , 데이터λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ‹€.
  • λˆˆμ— λ³΄μ΄λŠ” λͺ¨λ“  것듀은 객체이고 ν”„λ‘œκ·Έλž¨μƒμ—μ„œ 객체λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.
  • 객체듀은 각각 μ €λ§ˆλ‹€μ˜ νŠΉμ„±μ„ 가지고 μžˆλ‹€.
    • 예λ₯Όλ“€μ–΄ μ‚¬λžŒμ„ 예둜 λ“€λ©΄ μ‚¬λžŒμ˜ 이름, μ‚¬λžŒμ˜ λ‚˜μ΄, 성별 λ“±λ“± μ—¬λŸ¬κ°€μ§€ νŠΉμ„±μ„ 톡해 μ‚¬λžŒμ΄λΌλŠ” 객체λ₯Ό λ¬˜μ‚¬ν•  수 μžˆλ‹€.
    • μ΄λŸ¬ν•œ νŠΉμ„±μ„ 속성이라 ν•˜κ³ , 객체가 ν•  수 μžˆλŠ” κΈ°λŠ₯ ν˜Ήμ€ 행동을 λ©”μ†Œλ“œλΌκ³  ν‘œν˜„ν•œλ‹€.
  • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ κ°€μž₯ 많이 λ“±μž₯ν•˜λŠ” μš©μ–΄λŠ” class이닀.
  • ν΄λž˜μŠ€μ— μ‚¬λžŒμ΄λΌκ³  ν•˜λŠ” 객체λ₯Ό ν΄λž˜μŠ€μ— λ¬˜μ‚¬(좔상화)ν•œλ‹€κ³  μƒκ°ν•˜λ©΄ name, gender, ageλ“±λ“±μ˜ 속성을 가지고 speakingμ΄λΌκ³ ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό 가진 personμ΄λΌλŠ” 클래슀λ₯Ό λͺ¨λΈλ§ ν•  수 μžˆλ‹€.
  • μ΄λ ‡κ²Œ μ‚¬λžŒμ˜ νŠΉμ„±μ„ 뽑아 classλ₯Ό λ§Œλ“  λ’€ ν•΄λ‹Ή 클래슀λ₯Ό μ΄μš©ν•΄ 객체둜 싀체화λ₯Ό ν•  수 μžˆλ‹€. μ΄λ ‡κ²Œ 싀체화가 된 것을 μΈμŠ€ν„΄μŠ€λΌκ³  λΆ€λ₯Έλ‹€.
  • 즉, λΆ•μ–΄λΉ΅ ν‹€, 섀계도 = class , λ§Œλ“€μ–΄μ§„ λΆ•μ–΄λΉ΅, 건좕물 = μΈμŠ€ν„΄μŠ€(instance)
  • μ΄λ ‡κ²Œ 클래슀λ₯Ό μ„€κ³„ν•˜μ—¬ μ›ν•˜λŠ” 객체λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

 

ν΄λž˜μŠ€λŠ”

객체가 λ‚˜νƒ€λ‚΄λŠ” 속성 = ν•„λ“œ
객체가 ν¬ν•¨ν•˜λŠ” κΈ°λŠ₯ = λ©”μ†Œλ“œ

을 ν¬ν•¨ν•œλ‹€.

 

  • λ‹¨μˆœνžˆ 클래슀λ₯Ό μ„ μ–Έν•œλ‹€κ³  μ‹€μ‘΄ν•˜λŠ” 객체가 λ˜λŠ” 것이 μ•„λ‹ˆλ‹€.
  • μ‹€μ‘΄ν•˜λŠ” 객체와 같이 λ§Œλ“€κ³  μ‹ΆμœΌλ©΄ λ©”λͺ¨λ¦¬μ— μ˜¬λ €μ€˜μ•Όν•˜λŠ”λ° μ΄λŸ¬ν•œ 과정을 객체화(instanceν™”)λΌκ³ ν•œλ‹€.
    • 이λ₯Ό λ©”λͺ¨λ¦¬μ— 올리기 μœ„ν•΄μ„  new μ—°μ‚°μžλ₯Ό μ΄μš©ν•œλ‹€.
    • 클래슀라고 ν•˜λŠ” 틀을 μ΄μš©ν•΄ λ©”λͺ¨λ¦¬μ— 올렀 객체λ₯Ό λ§Œλ“€μˆ˜μžˆλ‹€.
  • ν΄λž˜μŠ€λŠ” 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ 섀계도이고, μ„€κ³„λ„λŠ” 데이터λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 속성과, κΈ°λŠ₯을 λ‚˜νƒ€λ‚΄λŠ” λ©”μ†Œλ“œλ₯Ό 가진닀.

 

클래슀 μ‚¬μš© 예제 μ½”λ“œ

using System;
using System.Threading;

namespace ClassEx
{   
    class Person
    {
        public string name; // 속성
        public string gender; // 속성
        public int age; // 속성

        public void speak() // κΈ°λŠ₯ 및 행동 = λ©”μ†Œλ“œ
        {
            Console.WriteLine($"μ•ˆλ…•ν•˜μ„Έμš” : μ €λŠ” {this.name} μž…λ‹ˆλ‹€. {this.gender} μž…λ‹ˆλ‹€.");
        }

        public void walk() // κΈ°λŠ₯ 및 행동 = λ©”μ†Œλ“œ
        {
            Console.WriteLine($"{this.name} ν„°λ²…ν„°λ²…");
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            Person person = new Person(); 
            // new μ—°μ‚°μžλ₯Ό μ΄μš©ν•΄ λ©”λͺ¨λ¦¬μ— μ˜¬λ €μ£ΌλŠ” 것 => μΈμŠ€ν„΄μŠ€ν™”(객체화)
            Person person1 = new Person();
            // 각각은 μ„œλ‘œ λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€μ΄λ‹€.

            person.name = "홍길동";
            person.gender = "남성";

            person1.name = "ν™κΈΈμˆœ";
            person1.gender = "μ—¬μ„±";

            person.speak();
            person1.speak();

            person.walk();
            person1.walk();
        }           
    }
} 
Output

μ•ˆλ…•ν•˜μ„Έμš” : μ €λŠ” 홍길동 μž…λ‹ˆλ‹€. 남성 μž…λ‹ˆλ‹€.
μ•ˆλ…•ν•˜μ„Έμš” : μ €λŠ” ν™κΈΈμˆœ μž…λ‹ˆλ‹€. μ—¬μ„± μž…λ‹ˆλ‹€.
홍길동 ν„°λ²…ν„°λ²…
ν™κΈΈμˆœ ν„°λ²…ν„°λ²