250x250
Rainbow🌈Coder
My dev NoteπŸ“’
Rainbow🌈Coder
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (411)
    • 곡지사항 (0)
    • Debugger (10)
      • Visual Studio Debugger (1)
      • Chrome DevTools (3)
      • Visual Studio Code Debugger (4)
      • eclipse (1)
      • intelliJ (1)
    • OOP (2)
      • OOP (2)
    • TypeScript (54)
      • νƒ€μž…μŠ€ν¬λ¦½νŠΈ TypeScript (54)
    • Javascript (87)
      • Javascript (45)
      • Node.js (19)
      • React (5)
      • FE κ°œλ°œν™˜κ²½μ„€μ • (3)
      • React와 Node 같이 λ•Œλ €μž‘κΈ° (6)
      • next.js (2)
      • pixi.js (7)
    • λ§ˆν¬μ—… (23)
      • Html & Css (23)
    • C# (80)
      • C# (12)
      • 이것이 C#이닀 (68)
    • C++ (30)
      • c++ (27)
      • win api (3)
    • Unity (18)
      • Unity(기초) (8)
      • Unity(C#쀑급) (5)
      • μœ λ‹ˆν‹° 포톀(λ„€νŠΈμ›Œν¬) (4)
      • unity c# MyCode (1)
    • Java & Spring (29)
      • Java (11)
      • μŠ€ν”„λ§ (8)
      • Java Algorithm (9)
      • Javs Data Structures (1)
    • μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜ (15)
      • 자료ꡬ쑰 (5)
      • μ•Œκ³ λ¦¬μ¦˜ (10)
    • ν˜•μƒκ΄€λ¦¬ (15)
      • Git (11)
      • μ†ŒμŠ€νŠΈλ¦¬ (3)
    • κ·Έλž˜ν”½μŠ€ (7)
      • WebGl (7)
    • AWS (3)
      • aws (3)
    • λ¦¬λˆ…μŠ€ (5)
      • λ¦¬λˆ…μŠ€ (5)
    • μ±… 리뷰 (13)
      • ν΄λ¦°μ½”λ“œ(책리뷰) (3)
      • μœ μ§€λ³΄μˆ˜κ°€λŠ₯ν•œμ½”λ”©μ˜κΈ°μˆ C#편(책리뷰) (1)
      • λ¦¬νŒ©ν† λ§(μžλ°”μŠ€ν¬λ¦½νŠΈνŒ) (9)
    • Server (2)
      • κ²Œμž„ μ„œλ²„(λ„€νŠΈμ›Œν¬, λ©€ν‹°μ“°λ ˆλ“œ,OS) (2)
    • 섀계, 아킀텍쳐 (4)
    • 파이썬 (5)
    • λ””μžμΈνŒ¨ν„΄ (2)
    • mocha (2)
    • Jest (1)
    • Spine (1)
    • 인곡지λŠ₯ (1)
      • ν˜Όμžκ³΅λΆ€ν•˜λŠ”λ¨Έμ‹ λŸ¬λ‹+λ”₯λŸ¬λ‹ (1)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

νƒœκ·Έ

  • μœ„μž„
  • γ…£γ„·
  • MySQL
  • μ»΄ν¬μ§€μ…˜

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Rainbow🌈Coder

My dev NoteπŸ“’

C#/이것이 C#이닀

37. μΆ”μƒν΄λž˜μŠ€ : μΈν„°νŽ˜μ΄μŠ€μ™€ 클래슀 사이

2022. 2. 22. 11:03
728x90

좔상 ν΄λž˜μŠ€λŠ” "κ΅¬ν˜„"을 κ°€μ§ˆ 수 μžˆλ‹€.

ν•˜μ§€λ§Œ ν΄λž˜μŠ€μ™€ 달리 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ§ˆ 수 μ—†λ‹€.

ν•œλ§ˆλ””λ‘œ 좔상 ν΄λž˜μŠ€λŠ” κ΅¬ν˜„μ„ κ°–λ˜ μΈμŠ€ν„΄μŠ€λŠ” λ§Œλ“€μ§€ λͺ»ν•œλ‹€.

그리고 좔상 λ©”μ†Œλ“œλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

(μΆ”μƒλ©”μ†Œλ“œλŠ” μΆ”μƒν΄λž˜μŠ€κ°€ μΈν„°νŽ˜μ΄μŠ€μ˜ 역할도 ν•  수 있게 ν•΄μ£ΌλŠ” μž₯μΉ˜μ΄λ‹€. μ™œλƒν•˜λ©΄ κ΅¬ν˜„μ„ κ°–μ§€λŠ” λͺ»ν•˜μ§€λ§Œ νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•˜λ„λ‘ κ°•μ œν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. λ‹€μ‹œλ§ν•΄ μΆ”μƒν΄λž˜μŠ€λ₯Ό μƒμ†ν•˜λŠ” ν΄λž˜μŠ€λ“€μ΄ λ°˜λ“œμ‹œ 이 λ©”μ†Œλ“œλ₯Ό κ°–κ³  μžˆμ„ κ±°λž€λŠ” '약속'이닀.)

C# μ»΄νŒŒμΌλŸ¬λŠ” 좔상 λ©”μ†Œλ“œκ°€ λ°˜λ“œμ‹œ public, protected, internal, protected internal ν•œμ •μž 쀑 ν•˜λ‚˜λ‘œ μˆ˜μ‹λ  것을 κ°•μš”ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 클래슀의 μ ‘κ·Όμ„± 원칙도, μΈν„°νŽ˜μ΄μŠ€μ˜ μ ‘κ·Όμ„± 원칙도 μ§€μΌœμ§ˆ 수 μžˆλ‹€.

좔상 ν΄λž˜μŠ€λŠ” abstract ν•œμ •μžμ™€ class ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄μ„œ μ„ μ–Έν•œλ‹€.

 

abstract class ν΄λž˜μŠ€μ΄λ¦„
{
	//ν΄λž˜μŠ€μ™€ λ™μΌν•˜κ²Œ κ΅¬ν˜„
}

μ•„λž˜λŠ” μΆ”μƒλ©”μ†Œλ“œ μ„ μ–Έ μ˜ˆμ΄λ‹€.

    public abstract class Abs
    {
        public abstract void baseAbs();
    }

    public class Son : Abs
    {
        public override void baseAbs()
        {
            Console.WriteLine("μΆ”μƒλ©”μ†Œλ“œ μƒμ†λ°›μ•˜μŠ΅λ‹ˆλ‹€.");
        }
    }

 

μΆ”μƒν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€μ™€ 클래슀의 쀑간에 μžˆλ‹€.

...λΌκ³ λŠ” ν•˜μ§€λ§Œ

사싀 μΆ”μƒν΄λž˜μŠ€λŠ” ν΄λž˜μŠ€μ— 더 가깝닀. μΆ”μƒν΄λž˜μŠ€μ˜ μ ‘κ·Όμ„± 같은 κ²½μš°λŠ” ν΄λž˜μŠ€μ™€ λ˜‘κ°™λ‹€.

그리고 μΈν„°νŽ˜μ΄μŠ€μ—μ„œ λͺ¨λ“  λ©”μ†Œλ“œκ°€ public으둜 μ„ μ–Έλ˜λŠ” 반면,

ν΄λž˜μŠ€λŠ” ν•œμ •μžλ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ λͺ¨λ“  λ©”μ†Œλ“œκ°€ private둜 μ„ μ–Έλœλ‹€.

 

ν•œνŽΈ, 좔상 ν΄λž˜μŠ€μ—λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μ—†λ‹€λŠ” 점 외에도 ν΄λž˜μŠ€μ™€ λ‹€λ₯Έ 점이 또 ν•˜λ‚˜ 더 μžˆλ‹€.

좔상 λ©”μ†Œλ“œλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€λŠ” 사싀이닀.

 

좔상 λ©”μ†Œλ“œλŠ” 좔상 ν΄λž˜μŠ€κ°€ μΈν„°νŽ˜μ΄μŠ€ 역할도 ν•  수 있게 ν•΄μ£ΌλŠ” μž₯μΉ˜μ΄λ‹€.

γ„΄ κ΅¬ν˜„μ„ κ°–μ§€ λͺ»ν•˜μ§€λ§Œ νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•˜λ„λ‘ κ°•μ œν•¨

γ„΄ 좔상 클래슀λ₯Ό μƒμ†ν•˜λŠ” ν΄λž˜μŠ€λ“€μ€ λ°˜λ“œμ‹œ 이 좔상 λ©”μ†Œλ“œλ₯Ό κ°–κ³  μžˆμ–΄μ•Ό ν•œλ‹€.  [그것이 μ•½μ†μ΄λ‹ˆκΉŒ....(λ‚˜λ£¨ν† ν†€)]

<좔상 λ©”μ†Œλ“œμ˜ κΈ°λ³Έ μ ‘κ·Όμ„±>은...

μΈν„°νŽ˜μ΄μŠ€μ²˜λŸΌ publicμΌμˆ˜λ„, 클래슀처럼 private 일 μˆ˜λ„ μžˆλ‹€.

좔상 ν΄λž˜μŠ€λ‚˜ ν΄λž˜μŠ€λŠ” κ·Έ μ•ˆμ—μ„œ μ„ μ–Έλ˜λŠ” λͺ¨λ“  ν•„λ“œ, λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹°, 이벀트 λͺ¨λ‘ μ ‘κ·Ό ν•œμ •μžλ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ private이닀. 여기에 좔상 λ©”μ†Œλ“œλ„ μ˜ˆμ™Έκ°€ 될 수 μ—†λ‹€λ§Œ!

μ»΄νŒŒμΌλŸ¬λŠ” '약속' 역할을 ν•˜λŠ” '좔상 λ©”μ†Œλ“œ'κ°€ λ°˜λ“œμ‹œ public, protected, internal, protected internal ν•œμ •μž 쀑 ν•˜λ‚˜λ‘œ μˆ˜μ‹λ  것을 κ°•μš”ν•œλ‹€. ('약속' 역할을 μˆ˜ν–‰ν•΄μ•Όν•˜λŠ”λ° privateλŠ” κ°€λ‹ΉμΉ˜λ„ μ•Šλ‹€!)-> μ΄λ ‡κ²Œ ν•˜λ©΄ 클래슀의 μ ‘κ·Όμ„± 원칙도, μΈν„°νŽ˜μ΄μŠ€μ˜ μ ‘κ·Όμ„± 원칙도 μ§€μΌœμ§ˆ 수 μžˆλ‹€.

abstract class AbstractBase
{
	public abstract void SomeMethod();
}

class Derived : AbstractBase
{
     public override void SomeMethod()
     {
          //Something
     }
}

 

 

<좔상 ν΄λž˜μŠ€κ°€ 또 λ‹€λ₯Έ 좔상 클래슀λ₯Ό μƒμ†ν•˜λŠ” 경우>

좔상 ν΄λž˜μŠ€λŠ” 또 λ‹€λ₯Έ 좔상 클래슀λ₯Ό 상속할 수 있으며,

이 경우 μžμ‹ 좔상 ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ 좔상 클래슀의 좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

좔상 λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•˜λ©΄ 되기 λ•Œλ¬Έμ΄λ‹€.

 

 

<μΆ”μƒν΄λž˜μŠ€ 예제>

using System;

namespace AbstractClass
{
    abstract class AbstractBase
    {
        protected void PrivateMethodA()
        {
            Console.WriteLine("AbstractBase.PrivateMethodA()");
        }
        public void PublicMethodA()
        {
            Console.WriteLine("AbstractBase.PublicMethodA()");
        }
        public abstract void AbstractMethodA();
    }
    class Derived : AbstractBase
    {
        public override void AbstractMethodA()
        {
            Console.WriteLine("Derived.AbstractMethodA()");
            PrivateMethodA();
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            AbstractBase obj = new Derived();
            obj.AbstractMethodA();
            obj.PublicMethodA();
        }
    }
}

<좜λ ₯κ²°κ³Ό>

Derived.AbstractMethodA()
AbstractBase.PrivateMethodA()
AbstractBase.PublicMethodA()

 

<이건 κΆκΈˆν•΄μ„œ 돌렀본 것> : μ•„λž˜μ™€ 같이 좔상 λ©”μ†Œλ“œκ°€ μ—†λŠ” 좔상 ν΄λž˜μŠ€λ„ λ¬Έλ²•μ μœΌλ‘œ ν•˜μžκ°€ μžˆλŠ” 것은 μ•„λ‹ˆμ§€λ§Œ, μ‹€μ§ˆμ μœΌλ‘œλŠ” 별 μ˜λ―Έκ°€ μ—†λŠ” μ½”λ“œλΌκ³  ν•  수 μžˆλ‹€.

using System;

namespace AbstractClass
{
    abstract class AbstractBase
    {
        protected void PrivateMethodA()
        {
            Console.WriteLine("AbstractBase.PrivateMethodA()");
        }
        public void PublicMethodA()
        {
            Console.WriteLine("AbstractBase.PublicMethodA()");
        }
    }
    class Derived : AbstractBase
    {
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            AbstractBase obj = new Derived();
            obj.PublicMethodA();
        }
    }
}

 

<좜λ ₯ κ²°κ³Ό>

AbstractBase.PublicMethodA()

 

<μΆ”μƒν΄λž˜μŠ€μ˜ μ“Έλͺ¨>

"이 ν΄λž˜μŠ€λŠ” 직접 μΈμŠ€ν„΄μŠ€ν™”ν•˜μ§€ 말고 νŒŒμƒν΄λž˜μŠ€λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•˜μ„Έμš”. μ•„, 그리고 μΆ”μƒλ©”μ†Œλ“œλ₯Ό κΌ­ μ˜€λ²„λΌμ΄λ”©ν•΄μ•Όν•©λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” 심지어 ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ΄ 이λ₯Ό μ€€μˆ˜ν•˜λ„λ‘ κ°•μ œμ‹œν‚¬ κ²ƒμž…λ‹ˆλ‹€."

 

λ‚΄κ°€ λ§Œλ“  좔상 클래슀λ₯Ό μ΄μš©ν•˜λŠ” λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ νŒŒμƒ 클래슀λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•˜λ©΄ λͺ¨λ“  좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€λŠ” 사싀을 μžŠμ–΄λ²„λ¦°λ‹€ 해도, μ»΄νŒŒμΌλŸ¬κ°€ 이λ₯Ό μƒκΈ°μ‹œμΌœμ€„ 것이닀. 이것이 μΆ”μƒν΄λž˜μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ μ΄λ‹€.

728x90

'C# > 이것이 C#이닀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

36. μΈν„°νŽ˜μ΄μŠ€μ˜ κΈ°λ³Έ κ΅¬ν˜„ λ©”μ„œλ“œ  (0) 2022.02.22
38. μΈν„°νŽ˜μ΄μŠ€ 예제1, 2 볡슡  (0) 2022.02.22
35. μΈν„°νŽ˜μ΄μŠ€ 닀쀑 상속  (0) 2022.02.15
34. μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€  (0) 2022.02.15
33. μΈν„°νŽ˜μ΄μŠ€(1)  (0) 2022.02.14
    'C#/이것이 C#이닀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • 36. μΈν„°νŽ˜μ΄μŠ€μ˜ κΈ°λ³Έ κ΅¬ν˜„ λ©”μ„œλ“œ
    • 38. μΈν„°νŽ˜μ΄μŠ€ 예제1, 2 볡슡
    • 35. μΈν„°νŽ˜μ΄μŠ€ 닀쀑 상속
    • 34. μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€
    Rainbow🌈Coder
    Rainbow🌈Coder
    λͺ°λΌλ„ 결ꡭ은 μ•„λŠ” 개발자, 그런 μ‚¬λžŒμ΄ 되기 μœ„ν•œ 맀일의 ν•œκ±ΈμŒ

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”