์ธํ„ฐํŽ˜์ด์Šค๋Š” ์™œ ํ•„์š”ํ• ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡์ผ๊นŒ?

Interface์˜ ์‚ฌ์ „์  ์˜๋ฏธ

  • inter-(์ƒํ˜ธ๊ฐ„์˜) + -face(๋ฉด) = interface
  • ์ ‘ํ•ด์žˆ๋Š” ๋‘ ๋ฌผ์ฒด๋‚˜ ๊ณต๊ฐ„ ์‚ฌ์ด์˜ ๊ฒฝ๊ณ„
  • ์‚ฌ์šฉ์ž๋Š” ์Šค์œ„์น˜๋ฅผ ํ‚ค๋Š” ๋ฒ„ํŠผ์— ์ง‘์ค‘
    • ์ด๊ฑธ ๋ˆ„๋ฅด๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ์ง€๋ฅผ ์•Ž (what)
    • ์–ด๋–ป๊ฒŒ ๊ทธ๋Ÿฐ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€๋Š” ๋ชจ๋ฆ„ (how)
  • ์‹ค์ œ ๋™์ž‘์€ ๊ตฌํ˜„ ๊ณต๊ฐ„์—์„œ ์ผ์–ด๋‚จ
    • ๋ฐฐ์„ ์˜ ์—ฐ๊ฒฐ
    • ์‚ฌ์šฉ์ž๋Š” ์ž˜ ์•Œ์ง€ ๋ชปํ•˜๋Š” ๊ณต๊ฐ„
    • ๊ตฌํ˜„์ž๋งŒ ์•Œ๊ณ  ์žˆ์Œ
  • ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐœ๋… = ํ•จ์ˆ˜
    • ํ•จ์ˆ˜๋Š” ๋ธ”๋ž™๋ฐ•์Šค์ž„: ํ˜ธ์ถœ์ž๋Š” ๋‚ด๋ถ€๊ฐ€ ์–ด๋–ป๊ฒŒ ๋„๋Š”์ง€ ์ดํ•ดํ•˜๋ ค ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ•จ์ˆ˜๋ช…๊ณผ ๋ฐ˜ํ™˜ํ˜•: ์–ด๋–ค ๋™์ž‘์„ ํ•˜๋Š”์ง€ ์•Œ๋ ค์คŒ
    • ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜: ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•จ์ˆ˜๊ฐ€ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ๋ ค์คŒ
    • ๊ทธ๋ž˜์„œ ํ•จ์ˆ˜ signature๋ฅผ interface๋ผ ๋ถ€๋ฅด๊ธฐ๋„ ํ•จ
      • ์ปดํ“จํ„ฐ ๋ถ„์•ผ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ž€ ๋งค์šฐ ๋‹ค์–‘ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•จ

ํ•จ์ˆ˜ ์„ ์–ธ vs ํ•จ์ˆ˜ ๊ตฌํ˜„

  • ํ•จ์ˆ˜ ์„ ์–ธ ํ•จ์ˆ˜ signature interface
  • c์™€ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ
    • ์„ ์–ธ๊ณผ ๊ตฌํ˜„์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ
  • ๊ทธ๋Ÿฐ๋ฐ ํ•จ์ˆ˜ signature, interface๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ๋‹ค.
  • ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” signature๋งŒ ์ง€์ •
void register error handler (void (*handler) (const char* msg));
void log error(const char* msg);
 
static void (*s_handler) (const char*) = NULL;
 
void register error_handler (void (*handler) (const char* msg)) // ์—ฌ๊ธฐ
{
    s handler = handler;
}
 
void log error(const char* msg)
{
    if (s_handler != NULL) {
        s_handler (msg) ;
    }
}
  • void (*handler) (const char* msg) ๋ถ€๋ถ„์€ ํ•จ์ˆ˜ signature๋งŒ ์žˆ๊ณ  ๊ตฌํ˜„์ด ์—†๋‹ค.
  • OO์—์„œ ๋‹คํ˜•์„ฑ๋„ ์ด์™€ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.
  • ๊ฒฐ๊ตญ ๋‹คํ˜•์„ฑ์€ ๊ตฌํ˜„์ฒด์— ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฑฐ์˜ ๊ฐ™์€ ๋ฐฉ์‹์ด๋ผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ vs. ํด๋ž˜์Šค ๋งค๊ฐœ๋ณ€์ˆ˜

  • ๊ทธ๋Ÿฌ๋ฉด ์ด๋Ÿฌํ•œ ์˜๋ฌธ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • โ€œ๋‚ด๊ฐ€ ํ•„์š”ํ•œ ๊ฑด ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•œ ๋ฉ”์„œ๋“œ ํ•จ์ˆ˜๋งŒ ์•Œ๋ฉด๋˜๋Š”๋ฐ, ๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋“ค๊นŒ์ง€ ๋”ธ๋ ค์˜ค๊ฒŒ ๋˜๋„ค..?โ€
  • โ€œํ•จ์ˆ˜ ํฌ์ธํ„ฐ๊ฐ€ ๋” ๋‚˜์€ ๊ฒƒ ์•„๋‹Œ๊ฐ€?โ€
ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋งค๊ฐœ๋ณ€์ˆ˜ํด๋ž˜์Šค ๋งค๊ฐœ๋ณ€์ˆ˜
- ์–ด๋–ค ํ•จ์ˆ˜ ๊ตฌํ˜„๋„ signature๋งŒ ๋งž๋‹ค๋ฉด ๋‹ค ๋ฐ›์•„์คŒ- ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ ํด๋ž˜์Šค๋ฉด ๋‹ค ๋ฐ›์•„์คŒ
- ๊ทธ ์ค‘ ๋‹คํ˜•์„ฑ ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋ฅผ ํ˜ธ์ถœ
- ์‹ค์งˆ์ ์œผ๋กœ C์˜ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ์ž‘๋™
- ๊ทผ๋ฐ ๋ฐฐ๋ณด๋‹ค ๋ฐฐ๊ผฝ์ด ๋” ํฐ..?
  • ์•„๋‹ˆ ๊ทธ๋Ÿฌ๋ฉด ์ถ”์ƒ ํด๋ž˜์Šค์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์‹น๋‹ค abstract๋กœ ๋งŒ๋“ค๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?
  • ์ผ๋‹จ ํ•จ์ˆ˜ํฌ์ธํ„ฐ์™€ ์™„์ „ํžˆ ๊ฐ™๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถ”์ƒํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ•œ๊ฐœ๋กœ ์ œํ•œํ•˜๊ณ , ๊ทธ ๋ฉ”์„œ๋“œ๋ฅผ abstract๋กœ ๋งŒ๋“ค์ž.
  • ๊ทธ๋Ÿฌ๋ฉด ์ƒ์†ํ•˜๋Š” ์ชฝ์—์„œ ๋ฌด์กฐ๊ฑด ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ, ๊ทธ๋Ÿฐ ์ถ”์ƒํด๋ž˜์Šค ์ž์ฒด๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธฐ๋Š” ํ–‰์œ„๋Š” ๊ณง ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์™€ ์™„์ „ํžˆ ๊ฐ™๊ฒŒ ๋œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ abstract ๋ฉ”์„œ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ ํ•จ์ˆ˜ํฌ์ธํ„ฐ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ํ•œ๋ฒˆ์— ์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์œผ๋‹ˆ ์‚ฌ์šฉํ• ๋งŒ ํ•  ๊ฒƒ

OO ๊ฐœ๋…๊ณผ ์ธํ„ฐํŽ˜์ด์Šค

  • ๊ตฌ์กฐ์ฒด: ๋ฐ์ดํ„ฐ๋งŒ ๋ชจ์•„๋†“์•˜๋˜ ๊ฒƒ
  • ํด๋ž˜์Šค: ๋ฐ์ดํ„ฐ์™€ ๋™์ž‘์„ ๋ชจ์•„๋†“์€ ๊ฒƒ
  • ์ˆœ์ˆ˜ ์ถ”์ƒ ํด๋ž˜์Šค: ๊ตฌํ˜„์€ ๋นผ๊ณ  ๋™์ž‘๋งŒ ๋ชจ์•„๋†“์€ ๊ฒƒ == Interface
  • Interface
    • ์–ด๋– ํ•œ ์ƒํƒœ๋„ ์—†์Œ
    • ๋™์ž‘์˜ ๊ตฌํ˜„๋„ ์—†์Œ
    • ๋™์ž‘์˜ signature๋งŒ ์žˆ์Œ

Interface

public abstract class LoggerBase {
    public abstract void log(String message);
}
 
public interface ILoggable {
    void log(String message);
}
  • class โ†’ interface
  • abstract ์ง€์šฐ๊ธฐ
    • interface๋Š” ์ž์ฒด๊ฐ€ ์ถ”์ƒ์ 
  • method๋Š” ํ•ญ์ƒ public
    • ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์™€ ๊ฐ™์€ ๊ฐœ๋…์ธ๋ฐ ๋ง‰์•„๋‘”๋‹ค๋Š” ๊ฒƒ์€ ์ด์ƒํ•จ
    • ๊ทธ๋Ÿฐ๋ฐ ์š”์ฆ˜ ์–ธ์–ด์—์„œ๋Š” ๋‹ค๋ฅธ ACL๋„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์ง
    • ์ ˆ๋Œ€์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ์ด๋Ÿฌํ•œ ํ๋ฆ„์ด ์žˆ์—ˆ๋‹ค ์ •๋„๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๋“ฏ
  • extends๋ฅผ implements๋กœ ๋ฐ”๊ฟˆ
    • :๋งŒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ
  • interface ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜

Override์˜ ๋ฌธ์ œ

  • ์˜คํƒ€๋‚ฌ์„ ๋•Œ, ๋™์ž‘์€ ํ•˜๋‚˜ ์˜๋„๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ
  • shout๋ฅผ shuot๋กœ ์ผ๋Š”๋ฐ ์ด๊ฑธ ํ™•์ธ๋ชปํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ฉด ์‚ฝ์งˆํ•˜๊ฒŒ ๋˜๋Š” ๊ฑฐ์ž„
  • ๊ทธ๋Ÿผ ์ด๋Ÿฐ ์˜คํƒ€๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฐ”๊พธ์–ด์•ผ ํ•˜๋Š”๊ฐ€?
  • ๊ทธ๊ฑด ์•„๋‹ˆ๋‹ค.
  • override๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ช…ํ™•ํ•˜๊ฒŒ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” keyword๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.
  • ์ฆ‰, overrideํ•˜๋Š” ๊ฒฝ์šฐ override์™€ ๊ฐ™์€ ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œ์•ฝ์„ ๊ฑธ์–ด๋ฒ„๋ฆฐ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๋˜๋ฉด, ์ฝ”๋“œ ์ž‘์„ฑ์ž๋Š” override ์—†์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ณด๋‹ค ์•ˆ์ „ํ•œ ์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
  • ์ž๋ฐ”์—์„œ๋Š” annotation์ด๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ์–ธ์–ด์˜ ์ผ๋ถ€๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. (@Override)

Java Annotation

  • ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ metadata๋ฅผ ์ œ๊ณต
    • ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ์–ด์„œ ์ฝ”๋“œ ์‹คํ–‰์—๋Š” ์•„๋ฌด ์˜ํ–ฅ์„ ์•ˆ ๋ฏธ์นจ
  • ์šฉ๋„
    • ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์ •๋ณด๋ฅผ ์ œ๊ณต (@Deprecated, @Override)
    • ์ปดํŒŒ์ผ, ํ˜น์€ ๋ฐฐํฌ ์ค‘์— ์–ด๋–ค ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ

Interface์˜ ์ ‘๊ทผ ์ œ์–ด์ž

  • ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” protected๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœ์€ ๋ชปํ•ด๋„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์™œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์•ˆ๋˜๊ฒŒ ํ•ด๋‘์—ˆ์„๊นŒ?

์™œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” public method๋งŒ ๊ฐ€๋Šฅํ• ๊นŒ?

  • ๊ฐœ๋…์ƒ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‘๋ฉด์ด ๋งž๋‹ฟ๋Š” ๋ฉด์„ ๋งํ•œ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ์— ๊ทธ ์‚ฌ์ด์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ๋“ค์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค.
  • ์—ฌ๊ธฐ์„œ ํŠน์ • ๋ฉ”์„œ๋“œ๋Š” ์—ฐ๊ฒฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด ์˜๋ฏธ์ ์œผ๋กœ ์ด์ƒํ•˜๋‹ค.
  • ์ด๊ฒŒ ์ผ๋ฐ˜์ ์ธ ์–˜๊ธฐ๋‹ค.
  • ์ฃผ๋ฅ˜ ์–ธ์–ด์—์„œ๋Š” public์œผ๋กœ ๊ฐ•์ œํ•˜๋‹ˆ ๋™์˜ํ•˜์ง€ ์•Š์•„๋„ ๋ฐฉ๋ฒ•์€ ์—†๋‹ค.
  • C์˜ ํ—ค๋”ํŒŒ์ผ๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค.
    • header file์„ includeํ•œ ์–ด๋Š๊ณณ์—์„œ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Interface์˜ ์ด๋ฆ„

  • ์•ž์— ๋ถ™์€ I๋Š” ๋ฌด์—‡์ธ๊ฐ€? (ILoggable)
    • Interface์˜ ์•ฝ์ž
  • -able๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ถ™์ผ ์ˆ˜๋„ ์žˆ์Œ
    • ์ธํ„ฐํŽ˜์ด์Šค๋Š” โ€œ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹คโ€์˜ ํ‘œํ˜„์ด๊ธฐ ๋•Œ๋ฌธ์—

Interface๋Š” ๋‹ค์ค‘ ์ƒ์†์˜ ์œ„ํ—˜์ด ์—†๋‹ค

  • ๋‹ค์ค‘ ์ƒ์†์˜ ๋ฌธ์ œ๋Š” ๊ตฌํ˜„์ด ๊ฐ๊ฐ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ• ์ง€ ๋ชจ๋ฅธ๋‹ค์— ์žˆ๋‹ค.
    • ์ฃฝ์Œ์˜ ๋‹ค์ด์•„๋ชฌ๋“œ
    • A๊ฐ€ ์ด๋ฆ„์ด ๊ฐ™์€ ๋ฉ”์„œ๋“œ์˜ B, C๋ฅผ ๋‹ค์ค‘์ƒ์†ํ•œ๋‹ค๋ฉด ๊ตฌํ˜„์ด ๋‘๊ฐœ๋ผ ์–ด๋–ค๊ฑธ ์„ ํƒํ• ์ง€ ๋ชจ๋ฅธ๋‹ค.
  • ์ด๋Ÿฐ ๋ฌธ์ œ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ž์œ ๋กญ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, A์—์„œ ๊ตฌํ˜„์„ ํ•ด์•ผํ•˜๊ณ  ์ด ๋•Œ ์ด๋ฆ„์ด ๊ฐ™๋‹ค๋ฉด ํ•˜๋‚˜๋กœ ํ‰์น  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์–ด๋–ป๊ฒŒ ์ƒ์†ํ•ด๋„ Interface์˜ ๊ตฌํ˜„์€ ํ•˜๋‚˜๋ฟ

  • Interface์—์„œ ์„ ์–ธํ•œ ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„์€ Class์—์„œ ์ƒ๊น€
  • Class ๋‹ค์ค‘ ์ƒ์†์€ ๋ถˆ๊ฐ€๋Šฅ
  • ๋”ฐ๋ผ์„œ ํ•œ ํด๋ž˜์Šค์•ˆ์—์„œ Interface์˜ ๊ตฌํ˜„์€ ๋”ฑ ํ•˜๋‚˜๋งŒ ์กด์žฌ
  • ๊ทธ๋ž˜์„œ ๋‹ค์ค‘ ์ƒ์†์˜ ํ•ด๊ฒฐ๋ฒ•์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•จ
    • ๋‹จ, ๋‹จ์ˆœํžˆ ๊ทธ ์šฉ๋„๋Š” ์•„๋‹˜

๊นŠ์€ ๋ณต์‚ฌ & ์–•์€ ๋ณต์‚ฌ

  • java์—์„œ๋Š” clone()์„ ์‚ฌ์šฉํ•จ
  • ์ด ๋ฐฉ๋ฒ•์ด ์–ด๋ ต๋‹ค ์ƒ๊ฐํ•˜์—ฌ ๋ณต์‚ฌ ์ƒ์„ฑ์ž ๋ฐฉ๋ฒ•๋„ ์‚ฌ์šฉํ•จ
    • public init(other point: Point)
    • ์ž๊ธฐ ์ž์‹ ์˜ ์ž๋ฃŒํ˜•์„ ๋ฐ›์•„ ์ž์‹ ์„ ๋ฆฌํ„ดํ•จ
    • ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณต์‚ฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ
    • swift์˜ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ด struct๋กœ ๋˜์–ด์žˆ์–ด ์ด ๋ฌธ์ œ์—์„œ ์•ฝ๊ฐ„๋” ์ž์œ ๋กญ๊ธดํ•จ

์ •๋ฆฌ

  1. ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (๊ตฌํ˜„๊ณผ ์„ ์–ธ์˜ ๋ถ„๋ฆฌ)
  2. ๋‹ค์ค‘ ์ƒ์†์˜ ๋Œ€์•ˆ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•ต์‹ฌ์€ ๋‹คํ˜•์„ฑ, ๋‹คํ˜•์„ฑ ์—†๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

Reference