์ ์ฒด ๊ธ
42. [ํด๋์ค/๋ ์ฝ๋]๋ก ๋ถ๋ณ๊ฐ์ฒด ๊ตฌํํ๊ธฐ
*๋ ์ฝ๋ ํํธ์ด์ง๋ง C# 9.0 ์ด์๋ถํฐ ์ง์ํ๋ ๊ฐ๋ ์ด๋ผ ๋ณธ ๋ธ๋ก๊ทธ์์๋ ํด๋์ค๋ก ๊ตฌํํ๋ ๋ฐ๋ง ๊ธฐ๋ก ๋จ๊ธฐ๊ธฐ๋ก ๊ฒฐ์ * ๋ถ๋ณ ๊ฐ์ฒด๋ ๋ด๋ถ ์ํ(๋ฐ์ดํฐ)๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค. ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค๋ ํน์ฑ ๋๋ฌธ์ ๋ถ๋ณ ๊ฐ์ฒด์์๋ ๋ฐ์ดํฐ ๋ณต์ฌ์ ๋น๊ต๊ฐ ๋ง์ด ์ด๋ฃจ์ด์ง๋ค. ์๋ก์ด ์ํ๋ฅผ ํํํ๋ ค๊ณ (1)๊ธฐ์กด ์ํ๋ฅผ ๋ณต์ฌํ ๋ค, ์ด ์ค(2) ์ผ๋ถ๋ฅผ ์์ ํด์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , (3) ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๊ฐ์ฒด ๋ด์ฉ์ ์์ฃผ ๋น๊ตํ๋ค. (๋ ์ฝ๋๋ ๋ถ๋ณ ๊ฐ์ฒด์์ ๋น๋ฒํ๊ฒ ์ด๋ค์ง๋ ์ด ๋ ๊ฐ์ง ์ฐ์ฐ์ ํธ๋ฆฌํ๊ฒ ์ํํ ์ ์๋๋ก C# 9.0์์ ๋์ ๋ ํ์์ด๋ค.) ์ฐธ์กฐ ํ์์ ํด๋์ค์ ๋ชจ๋ ํ๋๋ฅผ readonly๋ก ์ ์ธํ๋ฉด ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค. ๊ฐ ํ์์ readonly struct๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ธ..
41. ํ๋กํผํฐ์ ์์ฑ์
๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๊ฐ์ฒด์ ๊ฐ ํ๋๋ฅผ ์ด๊ธฐํํ๋ ... ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ ๋ฐ๋ก ํ๋กํผํฐ๋ฅผ ์ด์ฉํ ์ด๊ธฐํ - ์ด๊ธฐํํ๊ณ ์ถ์ ํ๋กํผํฐ๋ง ๋ฃ์ด์ ์ด๊ธฐํํ๋ฉด ๋๋ค. ์ด๊ฒ์ using System; namespace Property { class BirthdayInfo { public string Name{ get; set; } = "Unknown"; public DateTime Birthday { get; set; } = new DateTime(1,1,1); public int Age { get{ return new DateTime(DateTime.Now.Subtract(Birthday).Ticks).Year; } } } class MainApp { static void Main(string[] args) { Bi..
40. ์๋ ๊ตฌํ ํ๋กํผํฐ
ํ๋กํผํฐ ๊ธฐ๋ณธํ public class NameCard { private string name; private string phoneNumber; public string Name { get{ return name;} set{ name = value;} } public string PhoneNumber { get{ return phoneNumber; } set{ phoneNumber = value; } } } ์๋๊ตฌํ ํ๋กํผํฐ public class NameCard { public string Name { get; set; } public string PhoneNumber { get; set; } } ์ฌ๊ธฐ์ C# 7.0 ๋ถํฐ๋ ์๋์ ๊ฐ์ด ์๋ ๊ตฌํ ํ๋กํผํฐ๋ฅผ ์ ์ธํจ๊ณผ ๋์์ ์ด๊ธฐํ๋ฅผ ์ํํ ์ ์๋ค. ..
39. ํ๋กํผํฐ ๊ธฐ๋ณธํ ์ ์ธ
https://youtu.be/QXakJJHkz8k ์ฐธ ๊ณ ์ ์ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ผ๋ฉด '์๋์ฑ'์ ํํํ ์ ์์ด์ผ ํ๋ค. ๊ฐ์ฒด์ ๋ฐ์ดํฐ๊ฐ ์๋ํ์ง ์๊ฒ ์ค์ผ๋๋ ๊ฒ์ ๋ง์์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. C++์ด๋ Java์์๋ private๋ protected ์ ๊ทผ ํ์ ์๋ฅผ ์ด์ฉํด์ ํด๋์ค ๋ด์ ํ๋๋ฅผ ์ธ๋ถ์์ ๋ณด์ด์ง ์๊ฒ ๊ฐ์ถ๊ณ , ์ด ํ๋์ ์ ๊ทผํ๋ ๋ฉ์๋๋ค์ public์ผ๋ก ๋ฐ๋ก ์ ๊ณตํ๋ค. C# ํ๋ก๊ทธ๋๋จธ๋ ์ด ๋ฐฉ๋ฒ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ ๋ฟ๋๋ฌ, ๋ ์ฐ์ํ ์ฅ์น๋ฅผ ์ ๊ณตํ๋ค. ๋ฐ๋ก 'ํ๋กํผํฐ'์ด๋ค. ํ๋กํผํฐ๋ฅผ ์ด์ฉํ๋ฉด ์๋์ฑ๊ณผ ํธ์์ฑ, ๋ ๋ง๋ฆฌ ํ ๋ผ๋ฅผ ๋ค ์ก์ ์ ์๋ค. ์๋์ ๊ฐ์ ํ๋๊ฐ ์์ผ๋ฉด class MyClass { private int myField; } Java์์๋ get/set ๋ฉ์๋๋ฅผ ์ด๋ ๊ฒ ..
36. ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๊ตฌํ ๋ฉ์๋
๋ ๊ฑฐ์(์ ์ฐ) ์ฝ๋๋ ์ ๊ทธ๋ ์ด๋์ ๊ฐ๋ณํ ์ฃผ์๊ฐ ํ์ํ๋ค. ์ด๊ธฐ ๋ฒ์ ์ ์ค๊ณํ ๋ ๋์น ๋ฉ์๋๋ฅผ ์ธํฐํ์ด์ค์ ์์ ํ๊ฒ ์ถ๊ฐํ ์ ์์๊น? ๋ค์๊ณผ ๊ฐ์ด ๋ฌด์์ ILogger์ ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค๊ณ ํด๋ณด์... interface ILogger { void WriteLog(string message); void WriteError(string error); //์๋ก์ด ๋ฉ์๋ ์ถ๊ฐ } ๊ทธ ๊ฒฐ๊ณผ ILogger๋ฅผ ์์ํ๋ ๋ชจ๋ ํด๋์ค์ ๋ํด '์ธํฐํ์ด์ค ๋ฉค๋ฒ๋ฅผ ๊ตฌํํ์ง ์๋๋ค.'๋ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค. ํ์ํด๋์ค๋ ์ธํฐํ์ด์ค์ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๊ธฐ๋ณธ ๊ท์น์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ธฐ๋ณธ ๊ตฌํ ๋ฉ์๋๋ ์ด๋ฐ ์ํฉ์์ ์๊ธดํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ์ธํฐํ์ด์ค์ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ๋ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ์ฒด๋ฅผ ๊ฐ๋๋ก ํด์ ๊ธฐ..
38. ์ธํฐํ์ด์ค ์์ 1, 2 ๋ณต์ต
using System; using System.IO; namespace Interface { interface ILogger { void WriteLog(string message); } class ConsoleLogger : ILogger { public void WriteLog(string message) { Console.WriteLine("{0} {1}",DateTime.Now.ToLocalTime(),message); } } class ClimateMonitor { private ILogger logger; public ClimateMonitor(ILogger logger) { this.logger = logger; } public void start() { while(true) { Conso..
37. ์ถ์ํด๋์ค : ์ธํฐํ์ด์ค์ ํด๋์ค ์ฌ์ด
์ถ์ ํด๋์ค๋ "๊ตฌํ"์ ๊ฐ์ง ์ ์๋ค. ํ์ง๋ง ํด๋์ค์ ๋ฌ๋ฆฌ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง ์ ์๋ค. ํ๋ง๋๋ก ์ถ์ ํด๋์ค๋ ๊ตฌํ์ ๊ฐ๋ ์ธ์คํด์ค๋ ๋ง๋ค์ง ๋ชปํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋ค. (์ถ์๋ฉ์๋๋ ์ถ์ํด๋์ค๊ฐ ์ธํฐํ์ด์ค์ ์ญํ ๋ ํ ์ ์๊ฒ ํด์ฃผ๋ ์ฅ์น์ด๋ค. ์๋ํ๋ฉด ๊ตฌํ์ ๊ฐ์ง๋ ๋ชปํ์ง๋ง ํ์ ํด๋์ค์์ ๋ฐ๋์ ๊ตฌํํ๋๋ก ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค์๋งํด ์ถ์ํด๋์ค๋ฅผ ์์ํ๋ ํด๋์ค๋ค์ด ๋ฐ๋์ ์ด ๋ฉ์๋๋ฅผ ๊ฐ๊ณ ์์ ๊ฑฐ๋๋ '์ฝ์'์ด๋ค.) C# ์ปดํ์ผ๋ฌ๋ ์ถ์ ๋ฉ์๋๊ฐ ๋ฐ๋์ public, protected, internal, protected internal ํ์ ์ ์ค ํ๋๋ก ์์๋ ๊ฒ์ ๊ฐ์ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํด๋์ค์ ์ ๊ทผ์ฑ ์์น๋, ์ธํฐํ์ด์ค์ ์ ๊ทผ์ฑ ์์น๋ ์ง์ผ์ง ์ ์๋ค. ์ถ์ ํด๋์ค๋ ab..