์ „์ฒด ๊ธ€

์ „์ฒด ๊ธ€

    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. ํ”„๋กœํผํ‹ฐ ๊ธฐ๋ณธํ˜• ์„ ์–ธ

    39. ํ”„๋กœํผํ‹ฐ ๊ธฐ๋ณธํ˜• ์„ ์–ธ

    https://youtu.be/QXakJJHkz8k ์ฐธ ๊ณ  ์˜ ์ƒ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋ผ๋ฉด '์€๋‹‰์„ฑ'์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š๊ฒŒ ์˜ค์—ผ๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. C++์ด๋‚˜ Java์—์„œ๋Š” private๋‚˜ protected ์ ‘๊ทผ ํ•œ์ •์ž๋ฅผ ์ด์šฉํ•ด์„œ ํด๋ž˜์Šค ๋‚ด์˜ ํ•„๋“œ๋ฅผ ์™ธ๋ถ€์—์„œ ๋ณด์ด์ง€ ์•Š๊ฒŒ ๊ฐ์ถ”๊ณ , ์ด ํ•„๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ public์œผ๋กœ ๋”ฐ๋กœ ์ œ๊ณตํ•œ๋‹ค. C# ํ”„๋กœ๊ทธ๋ž˜๋จธ๋„ ์ด ๋ฐฉ๋ฒ•์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋”๋Ÿฌ, ๋” ์šฐ์•„ํ•œ ์žฅ์น˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋ฐ”๋กœ 'ํ”„๋กœํผํ‹ฐ'์ด๋‹ค. ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•˜๋ฉด ์€๋‹‰์„ฑ๊ณผ ํŽธ์˜์„ฑ, ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ๋‹ค ์žก์„ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ํ•„๋“œ๊ฐ€ ์žˆ์œผ๋ฉด class MyClass { private int myField; } Java์—์„œ๋Š” get/set ๋ฉ”์†Œ๋“œ๋ฅผ ์ด๋ ‡๊ฒŒ ..

    36. ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„ ๋ฉ”์„œ๋“œ

    36. ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„ ๋ฉ”์„œ๋“œ

    ๋ ˆ๊ฑฐ์‹œ(์œ ์‚ฐ) ์ฝ”๋“œ๋Š” ์—…๊ทธ๋ ˆ์ด๋“œ์— ๊ฐ๋ณ„ํ•œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ดˆ๊ธฐ ๋ฒ„์ „์„ ์„ค๊ณ„ํ•  ๋•Œ ๋†“์นœ ๋ฉ”์†Œ๋“œ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค์— ์•ˆ์ „ํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌด์ž‘์ • ILogger์— ์ƒˆ ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž... interface ILogger { void WriteLog(string message); void WriteError(string error); //์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€ } ๊ทธ ๊ฒฐ๊ณผ ILogger๋ฅผ ์ƒ์†ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์— ๋Œ€ํ•ด '์ธํ„ฐํŽ˜์ด์Šค ๋ฉค๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค.'๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค. ํŒŒ์ƒํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ ๊ทœ์น™์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ธฐ๋ณธ ๊ตฌํ˜„ ๋ฉ”์†Œ๋“œ๋Š” ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์š”๊ธดํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์— ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ˜„์ฒด๋ฅผ ๊ฐ–๋„๋ก ํ•ด์„œ ๊ธฐ..

    38. ์ธํ„ฐํŽ˜์ด์Šค ์˜ˆ์ œ1, 2 ๋ณต์Šต

    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..