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#이닀

22. 은닉성, μ ‘κ·Ό ν•œμ •μž

2022. 2. 10. 17:05
728x90

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° 3λŒ€ νŠΉμ„± : 은닉성, 상속성, λ‹€ν˜•μ„±

 

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—λŠ” 클래슀의 μ‚¬μš©μžμ—κ²Œ ν•„μš”ν•œ μ΅œμ†Œμ˜ κΈ°λŠ₯만 λ…ΈμΆœν•˜κ³  λ‚΄λΆ€λ₯Ό 감좜 것을 μš”κ΅¬ν•œλ‹€.

이것을 은닉성이라고 ν•œλ‹€.

 

ν΄λž˜μŠ€μ— μ„ μ–Έλ˜μ–΄ μžˆλŠ” ν•„λ“œμ™€ λ©”μ†Œλ“œ 쀑 μ–΄λ–€ 것듀은 μ‚¬μš©μžμ—κ²Œ λ…ΈμΆœν•  것이 μžˆλŠ”κ°€ ν•˜λ©΄

μ ˆλŒ€λ‘œ λ…ΈμΆœμ‹œν‚€μ§€ 말아야 ν•˜λŠ” 것듀도 μžˆλ‹€.

μ ‘κ·Ό ν•œμ •μžλŠ” 감좔고 싢은 것은 감좔고, 보여주고 싢은 것은 보여쀄 수 μžˆλ„λ‘ μ½”λ“œλ₯Ό μˆ˜μ‹ν•˜λ©°

ν•„λ“œ, λ©”μ†Œλ“œλ₯Ό λΉ„λ‘―ν•΄ ν”„λ‘œνΌν‹° λ“± λͺ¨λ“  μš”μ†Œμ— λŒ€ν•΄ μ‚¬μš©ν•  수 μžˆλ‹€.

C#μ—μ„œ μ œκ³΅ν•˜λŠ” μ ‘κ·Ό ν•œμ •μžλŠ” λͺ¨λ‘ μ—¬μ„―κ°€μ§€λ‘œ, λ‹€μŒκ³Ό κ°™λ‹€.

μ ‘κ·Ό ν•œμ •μž μ„€λͺ…
public 클래슀 λ‚΄λΆ€/μ™ΈλΆ€ λͺ¨λ“  κ³³μ—μ„œ μ ‘κ·Όν•  수 μžˆλ‹€.
protected 클래슀의 μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†μ§€λ§Œ, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œλŠ” 접근이 κ°€λŠ₯ν•˜λ‹€.
private 클래슀의 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλ‹€. νŒŒμƒ ν΄λž˜μŠ€μ—μ„œλ„ 접근이 λΆˆκ°€λŠ₯ν•˜λ‹€.
internal 같은 μ–΄μ…ˆλΈ”λ¦¬μ— μžˆλŠ” μ½”λ“œμ—μ„œλ§Œ public으둜 μ ‘κ·Όν•  수 μžˆλ‹€. λ‹€λ₯Έ μ–΄μ…ˆλΈ”λ¦¬μ— μžˆλŠ” μ½”λ“œμ—μ„œλŠ” private와 같은 μˆ˜μ€€μ˜ 접근성을 κ°€μ§„λ‹€.
protected internal 같은 μ–΄μ…ˆλΈ”λ¦¬μ— μžˆλŠ” μ½”λ“œμ—μ„œλ§Œ protected둜 μ ‘κ·Όν•  수 μžˆλ‹€. λ‹€λ₯Έ μ–΄μ…ˆλΈ”λ¦¬μ— μžˆλŠ” μ½”λ“œμ—μ„œλŠ” private와 같은 μˆ˜μ€€μ˜ 접근성을 κ°€μ§„λ‹€.
private protected(μ΄ˆκ°•λ ₯) 같은 μ–΄μ…ˆλΈ”λ¦¬μ— μžˆλŠ” ν΄λž˜μŠ€μ—μ„œ 상속받은 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€.

μ€‘μš”ν¬μΈνŠΈ : μ ‘κ·Ό ν•œμ •μžλ‘œ μˆ˜μ‹ν•˜μ§€ μ•Šμ€ 클래슀의 λ©€λ²„λŠ” 무쑰건 private둜 μ ‘κ·Ό μˆ˜μ€€μ΄ μžλ™ μ§€μ •λœλ‹€.

클래슀 λ‚΄μ˜ λ©€λ²„λŠ” 일단 감좔고 λ‚˜μ€‘μ— κ³΅κ°œν• μ§€λ₯Ό κ²°μ •ν•˜λŠ” 것이 μˆœμ„œμ΄κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

 

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 WaterHeater 
    {
        protected int temperature;
        public void SetTemperature(int temperature)//SetTemperature() λ©”μ†Œλ“œλŠ” -5~42 μ‚¬μ΄μ˜ κ°’λ§Œ 받아듀이고, 이 λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ 값에 λŒ€ν•΄μ„œλŠ” μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¨λ‹€.
        {
            if(temperature < -5 || temperature > 42)
            {
                throw new Exception("Out of temperature range");
            }
            this.temperature = temperature;
        }
        internal void TurnOnWater()
        {
            WriteLine($"Turn on water : {temperature}");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            try
            {
                WaterHeater heater = new WaterHeater();
                heater.SetTemperature(20);
                heater.TurnOnWater();

                heater.SetTemperature(-2);
                heater.TurnOnWater();

                heater.SetTemperature(50); //μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ—¬ λ‹€μŒ 행은 μ‹€ν–‰λ˜μ§€ μ•Šκ³  κ·Έ λ‹€μŒ ν–‰μ˜ catch λΈ”λ‘μœΌλ‘œ μ‹€ν–‰ μœ„μΉ˜κ°€ μ΄λ™ν•œλ‹€.
                heater.TurnOnWater();
            }
            catch(Exception e)
            {
                WriteLine(e.Message);
            }
        }
    }
}

<좜λ ₯ κ²°κ³Ό>

Turn on water : 20
Turn on water : -2
Out of temperature range

<μ—°μŠ΅>

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 HeatedWater
    {
        protected int temperature;
        public void SetTemperature(int temperature)
        {
            if (temperature < 5 || temperature > 100)
                throw new Exception("Out of range!!!");
            this.temperature = temperature;
        }
        internal void PrintTemperature()
        {
            WriteLine($"물의 μ˜¨λ„λŠ”... {temperature}도 이닀.");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            try
            {
                HeatedWater oneWater = new HeatedWater();
                oneWater.SetTemperature(50);
                oneWater.PrintTemperature();

                HeatedWater twoWater = new HeatedWater();
                twoWater.SetTemperature(-5);
                twoWater.PrintTemperature();

                HeatedWater threeWater = new HeatedWater();
                threeWater.SetTemperature(105);
                threeWater.PrintTemperature();

                HeatedWater fourWater = new HeatedWater();
                fourWater.SetTemperature(55);
                fourWater.PrintTemperature();
            }
            catch(Exception eeee)
            {
                WriteLine(eeee.Message);
            }
        }
    }
}

<μ—°μŠ΅ 좜λ ₯κ²°κ³Ό>

물의 μ˜¨λ„λŠ”... 50도 이닀.
Out of range!!!

<μ—°μŠ΅ 2>

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 HeatedWater
    {
        protected int temperature;
        public void SetTemperature(int temperature)
        {
            if (temperature < 5 || temperature > 100)
                throw new Exception("Out of range!!!");
            this.temperature = temperature;
        }
        internal void PrintTemperature()
        {
            WriteLine($"물의 μ˜¨λ„λŠ”... {temperature}도 이닀.");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            try
            {
                HeatedWater oneWater = new HeatedWater();
                oneWater.SetTemperature(50);
                oneWater.PrintTemperature();

                HeatedWater fourWater = new HeatedWater();
                fourWater.SetTemperature(55);
                fourWater.PrintTemperature();
            }
            catch(Exception eeee)
            {
                WriteLine(eeee.Message);
            }
        }
    }
}

<μ—°μŠ΅ 2 좜λ ₯κ²°κ³Ό>

물의 μ˜¨λ„λŠ”... 50도 이닀.
물의 μ˜¨λ„λŠ”... 55도 이닀.

<μ—°μŠ΅ 3>

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 HeatedWater
    {
        protected int temperature;
        public void SetTemperature(int temperature)
        {
            if (temperature < 5 || temperature > 100)
                throw new Exception("Out of range!!!");
            this.temperature = temperature;
        }
        internal void PrintTemperature()
        {
            WriteLine($"물의 μ˜¨λ„λŠ”... {temperature}도 이닀.");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            try
            {
                HeatedWater oneWater = new HeatedWater();
                oneWater.SetTemperature(50);
                oneWater.PrintTemperature();

                oneWater.SetTemperature(-5);
            }
            catch(Exception eeee)
            {
                WriteLine(eeee.Message);
            }
        }
    }
}

<μ—°μŠ΅ 3 좜λ ₯ κ²°κ³Ό>

물의 μ˜¨λ„λŠ”... 50도 이닀.
Out of range!!!
728x90

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

[쀑간점검] μ ‘κ·Όν•œμ •μž internalμ—μ„œ 같은 μ–΄μ…ˆλΈ”λ¦¬λž€  (0) 2022.02.11
23. 상속, μ½”λ“œ μž¬ν™œμš©, 기반 클래슀, νŒŒμƒ 클래슀, base, sealed  (0) 2022.02.11
21. this, this() μƒμ„±μž  (0) 2022.02.10
20. 얕은 볡사(Shallow Copy)와 κΉŠμ€ 볡사(Deep Copy)  (0) 2022.02.10
19. [static]정적 ν•„λ“œμ™€ 정적 λ©”μ†Œλ“œ  (0) 2022.02.10
    'C#/이것이 C#이닀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [쀑간점검] μ ‘κ·Όν•œμ •μž internalμ—μ„œ 같은 μ–΄μ…ˆλΈ”λ¦¬λž€
    • 23. 상속, μ½”λ“œ μž¬ν™œμš©, 기반 클래슀, νŒŒμƒ 클래슀, base, sealed
    • 21. this, this() μƒμ„±μž
    • 20. 얕은 볡사(Shallow Copy)와 κΉŠμ€ 볡사(Deep Copy)
    Rainbow🌈Coder
    Rainbow🌈Coder
    λͺ°λΌλ„ 결ꡭ은 μ•„λŠ” 개발자, 그런 μ‚¬λžŒμ΄ 되기 μœ„ν•œ 맀일의 ν•œκ±ΈμŒ

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