<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>하찮은 대학생의 IT 블로그</title>
    <link>https://dupal-homework.tistory.com/</link>
    <description>이것저것 하는 대학생</description>
    <language>ko</language>
    <pubDate>Tue, 2 Jun 2026 18:52:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>멈뭉밈</managingEditor>
    <image>
      <title>하찮은 대학생의 IT 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/6980173/attach/4bd920bcdca2486bb483dfe9be3a3975</url>
      <link>https://dupal-homework.tistory.com</link>
    </image>
    <item>
      <title>iOS 프로그래밍실무_12주차_Open API 기반iOS앱 개발(5)</title>
      <link>https://dupal-homework.tistory.com/150</link>
      <description>&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;1. Navigation Controller 방식&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;가장 일반적인 화면 전환 방식이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;목록 &amp;rarr; 상세 화면&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;홈 &amp;rarr; 설정 화면&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;게시글 &amp;rarr; 게시글 내용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;다음 화면으로 이동&lt;/h2&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let vc = SecondViewController()
navigationController?.pushViewController(vc, animated: true)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;이전 화면으로 돌아가기&lt;/h2&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;navigationController?.popViewController(animated: true)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;구조&lt;/h2&gt;
&lt;pre class=&quot;nginx&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;NavigationController
 └─ FirstViewController
      └─ SecondViewController
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;화면이 스택(Stack) 구조로 관리된다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;뒤로가기 버튼이 자동 생성된다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;실무에서 가장 많이 사용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;2. Present 방식 (모달)&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 화면 위에 새로운 화면을 띄우는 방식이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;로그인 화면&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;팝업&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;작성 화면&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;화면 띄우기&lt;/h2&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let vc = SecondViewController()
present(vc, animated: true)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;화면 닫기&lt;/h2&gt;
&lt;pre class=&quot;isbl&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;dismiss(animated: true)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;독립적인 화면 느낌이다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래에서 위로 올라오는 애니메이션이 기본이다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;닫기 버튼을 직접 구현하는 경우가 많다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;3. Storyboard Segue 방식&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스토리보드에서 화면끼리 직접 연결하는 방식이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;사용 방법&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;ViewController 추가&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;버튼에서 Control + Drag&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;다음 ViewController에 연결&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;Show 또는 Present Modally 선택&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;코드로 실행&lt;/h2&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;performSegue(withIdentifier: &quot;goNext&quot;, sender: nil)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;데이터 전달&lt;/h2&gt;
&lt;pre class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let nextVC = segue.destination as! SecondViewController
    nextVC.name = &quot;홍길동&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;초보자가 배우기 쉽다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;시각적으로 연결 가능하다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;규모가 커지면 관리가 어려워질 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;4. Tab Bar 방식&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하단 탭을 눌러 화면을 전환하는 방식이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;인스타그램&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;유튜브&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;카카오톡&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;구조&lt;/h2&gt;
&lt;pre class=&quot;nginx&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;TabBarController
 ├─ HomeVC
 ├─ SearchVC
 └─ ProfileVC
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;앱의 큰 메뉴 이동에 사용된다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;탭을 누르면 즉시 화면이 전환된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;실무에서 자주 사용하는 구조&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;보통 아래처럼 조합해서 사용한다.&lt;/p&gt;
&lt;pre class=&quot;nginx&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;TabBarController
 ├─ NavigationController
 │    └─ HomeVC
 │         └─ DetailVC
 └─ NavigationController
      └─ SettingVC
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;큰 메뉴 이동 &amp;rarr; TabBar&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;세부 화면 이동 &amp;rarr; NavigationController&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;형태로 많이 구성한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;버튼 클릭 시 화면 이동 예제&lt;/h1&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;@IBAction func nextButton(_ sender: UIButton) {

    let vc = SecondViewController()

    navigationController?.pushViewController(vc, animated: true)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;Storyboard에서 ViewController 가져오기&lt;/h1&gt;
&lt;pre class=&quot;nix&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let storyboard = UIStoryboard(name: &quot;Main&quot;, bundle: nil)

let vc = storyboard.instantiateViewController(
    withIdentifier: &quot;SecondViewController&quot;
)

navigationController?.pushViewController(vc, animated: true)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;※ Storyboard ID 설정이 필요하다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;정리&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;방식특징사용 예시&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Push&lt;/td&gt;
&lt;td&gt;스택 구조&lt;/td&gt;
&lt;td&gt;상세 페이지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Present&lt;/td&gt;
&lt;td&gt;모달 표시&lt;/td&gt;
&lt;td&gt;로그인, 팝업&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Segue&lt;/td&gt;
&lt;td&gt;스토리보드 연결&lt;/td&gt;
&lt;td&gt;간단한 앱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TabBar&lt;/td&gt;
&lt;td&gt;큰 메뉴 이동&lt;/td&gt;
&lt;td&gt;SNS 앱&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 오후 2.16.07.png&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PqGcY/dJMcabRTClO/k1yzEDyuUBXneKzhljxeR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PqGcY/dJMcabRTClO/k1yzEDyuUBXneKzhljxeR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PqGcY/dJMcabRTClO/k1yzEDyuUBXneKzhljxeR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPqGcY%2FdJMcabRTClO%2Fk1yzEDyuUBXneKzhljxeR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;796&quot; height=&quot;428&quot; data-filename=&quot;스크린샷 2026-05-26 오후 2.16.07.png&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 오후 2.17.35.png&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k2rPg/dJMcaaZMVP0/T5tkVlwPmSN7ZC9yPsflm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k2rPg/dJMcaaZMVP0/T5tkVlwPmSN7ZC9yPsflm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k2rPg/dJMcaaZMVP0/T5tkVlwPmSN7ZC9yPsflm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk2rPg%2FdJMcaaZMVP0%2FT5tkVlwPmSN7ZC9yPsflm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;936&quot; height=&quot;502&quot; data-filename=&quot;스크린샷 2026-05-26 오후 2.17.35.png&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 오후 2.41.39.png&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dl3Ifb/dJMcabRTClK/0hYoyRHuNqaXfxTg2zcxWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dl3Ifb/dJMcabRTClK/0hYoyRHuNqaXfxTg2zcxWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dl3Ifb/dJMcabRTClK/0hYoyRHuNqaXfxTg2zcxWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdl3Ifb%2FdJMcabRTClK%2F0hYoyRHuNqaXfxTg2zcxWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;886&quot; height=&quot;229&quot; data-filename=&quot;스크린샷 2026-05-26 오후 2.41.39.png&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;타입 : UIViewController&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/bPQ8Xr/dJMcadPCLEa/AAAAAAAAAAAAAAAAAAAAAHivnaWhTX1b_1hSXAi5S3taXVdrvFLaTVrf5vzmtsai/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=41drH%2BQMLWQyNwzz1zKME9ST5Qs%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/bPQ8Xr/dJMcadPCLEa/AAAAAAAAAAAAAAAAAAAAAHivnaWhTX1b_1hSXAi5S3taXVdrvFLaTVrf5vzmtsai/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=41drH%2BQMLWQyNwzz1zKME9ST5Qs%3D&quot;&gt;&lt;/span&gt;타입 : UIViewController&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 오후 2.46.17.png&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;233&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4KE2K/dJMcabRTClL/3YvkfCpewTxyjtxPtDoU0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4KE2K/dJMcabRTClL/3YvkfCpewTxyjtxPtDoU0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4KE2K/dJMcabRTClL/3YvkfCpewTxyjtxPtDoU0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4KE2K%2FdJMcabRTClL%2F3YvkfCpewTxyjtxPtDoU0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;895&quot; height=&quot;233&quot; data-filename=&quot;스크린샷 2026-05-26 오후 2.46.17.png&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;233&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;바뀐 타입 : DetailViewController&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/cIIKJ9/dJMcagFGBRj/AAAAAAAAAAAAAAAAAAAAAMQt-197DCiDU6iwnlj5XvhejpCPCDIa0w0S76Vg9LJe/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=Y7e2Baawa%2Bw%2Fvtg5l%2Fkp0qumbK8%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/cIIKJ9/dJMcagFGBRj/AAAAAAAAAAAAAAAAAAAAAMQt-197DCiDU6iwnlj5XvhejpCPCDIa0w0S76Vg9LJe/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=Y7e2Baawa%2Bw%2Fvtg5l%2Fkp0qumbK8%3D&quot;&gt;&lt;/span&gt;바뀐 타입 : DetailViewController&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 오후 2.43.33.png&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw4w8d/dJMcaaZMVP1/GbFjpuI9CV4P602yfOFZdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw4w8d/dJMcaaZMVP1/GbFjpuI9CV4P602yfOFZdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw4w8d/dJMcaaZMVP1/GbFjpuI9CV4P602yfOFZdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw4w8d%2FdJMcaaZMVP1%2FGbFjpuI9CV4P602yfOFZdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;923&quot; height=&quot;480&quot; data-filename=&quot;스크린샷 2026-05-26 오후 2.43.33.png&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;3가지 방법&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/cLm0Qp/dJMcaciTtOz/AAAAAAAAAAAAAAAAAAAAAOXDO0tx0JbtsiIz0ACkA8mIyaM3LiTcdX7q_xxdhntk/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=pGCS7FQjEFzZb3Kdut%2BfP%2FYITqM%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/cLm0Qp/dJMcaciTtOz/AAAAAAAAAAAAAAAAAAAAAOXDO0tx0JbtsiIz0ACkA8mIyaM3LiTcdX7q_xxdhntk/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=pGCS7FQjEFzZb3Kdut%2BfP%2FYITqM%3D&quot;&gt;&lt;/span&gt;3가지 방법&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1780295188583&quot; class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let dest = segue.destination as! DetailViewController
        let myIndexPath = table.indexPathForSelectedRow!
        let row = myIndexPath.row
        print(row)
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 코드는 Segue 로 화면 전환이 일어나기 직전에 실행되는 메서드다.&lt;br /&gt;주로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;다음 화면에 데이터를 전달할 때&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;코드 전체를 보면:&lt;/p&gt;
&lt;pre class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let dest = segue.destination as! DetailViewController

    let myIndexPath = table.indexPathForSelectedRow!

    let row = myIndexPath.row

    print(row)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;전체 흐름&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 화면에 UITableView 가 있고,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용자가 셀을 터치하면:&lt;/p&gt;
&lt;pre class=&quot;&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;현재 화면 &amp;rarr; DetailViewController
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;로 이동한다고 가정한 코드다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;한 줄씩 설명&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1.&lt;/h2&gt;
&lt;pre class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;override func prepare(for segue: UIStoryboardSegue, sender: Any?)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Segue가 실행되기 직전에 자동 호출되는 메서드다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;pre class=&quot;&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;화면 전환 직전
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;에 실행된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2.&lt;/h2&gt;
&lt;pre class=&quot;clean&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let dest = segue.destination as! DetailViewController
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이동할 다음 화면(ViewController)을 가져오는 코드다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;pre class=&quot;fix&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;도착할 화면 = DetailViewController
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;라는 의미다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3.&lt;/h2&gt;
&lt;pre class=&quot;gams&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let myIndexPath = table.indexPathForSelectedRow!
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 선택된 테이블 셀의 위치(IndexPath)를 가져온다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;3번째 셀 클릭
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이면:&lt;/p&gt;
&lt;pre class=&quot;less&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;IndexPath(row: 2, section: 0)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;같은 값이 저장된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4.&lt;/h2&gt;
&lt;pre class=&quot;maxima&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let row = myIndexPath.row
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;선택된 행 번호만 가져온다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;2
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5.&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;print(row)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;선택된 행 번호를 출력한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;2
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;출력됨.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;실제 목적&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;보통은 선택한 행 번호를 이용해서&lt;br /&gt;다음 화면에 데이터를 전달한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;pre class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let dest = segue.destination as! DetailViewController

    let myIndexPath = table.indexPathForSelectedRow!

    let row = myIndexPath.row

    dest.movieName = movieList[row]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;흐름 정리&lt;/h1&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;테이블 셀 클릭
    &amp;darr;
prepare 실행
    &amp;darr;
몇 번째 셀인지 확인
    &amp;darr;
다음 화면에 데이터 전달
    &amp;darr;
화면 전환
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;핵심&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 코드의 핵심 목적은:&lt;/p&gt;
&lt;pre class=&quot;&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;사용자가 선택한 셀 정보를
다음 화면으로 전달하기 위함
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 오후 3.22.50.png&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AODtK/dJMcaaZMVPX/IkzalvY8zSTSiaFjaxKMr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AODtK/dJMcaaZMVPX/IkzalvY8zSTSiaFjaxKMr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AODtK/dJMcaaZMVPX/IkzalvY8zSTSiaFjaxKMr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAODtK%2FdJMcaaZMVPX%2FIkzalvY8zSTSiaFjaxKMr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;913&quot; height=&quot;455&quot; data-filename=&quot;스크린샷 2026-05-26 오후 3.22.50.png&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;455&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;오류 해결 방법&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/bK2hh0/dJMcagez21a/AAAAAAAAAAAAAAAAAAAAAEF2PYI3H2Isna1xwIloKJ1Dx1VIoPaKl7zt6zKQLQa4/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=PYrj%2FJaEQfAjjhMlgaYz2Vh8YzA%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/bK2hh0/dJMcagez21a/AAAAAAAAAAAAAAAAAAAAAEF2PYI3H2Isna1xwIloKJ1Dx1VIoPaKl7zt6zKQLQa4/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=PYrj%2FJaEQfAjjhMlgaYz2Vh8YzA%3D&quot;&gt;&lt;/span&gt;오류 해결 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZyqL4/dJMcad3eMCO/22p1ukiXGxkv55D8B2s8Qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZyqL4/dJMcad3eMCO/22p1ukiXGxkv55D8B2s8Qk/img.png&quot; data-origin-width=&quot;431&quot; data-origin-height=&quot;765&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.8237%; margin-right: 10px;&quot; data-widthpercent=&quot;49.4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZyqL4/dJMcad3eMCO/22p1ukiXGxkv55D8B2s8Qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZyqL4%2FdJMcad3eMCO%2F22p1ukiXGxkv55D8B2s8Qk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;431&quot; height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwRAw2/dJMcabEoCnm/vRycZ4J6h9RB0acwnpkaE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwRAw2/dJMcabEoCnm/vRycZ4J6h9RB0acwnpkaE0/img.png&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;752&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.0135%;&quot; data-widthpercent=&quot;50.6&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwRAw2/dJMcabEoCnm/vRycZ4J6h9RB0acwnpkaE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwRAw2%2FdJMcabEoCnm%2FvRycZ4J6h9RB0acwnpkaE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;434&quot; height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRYZ2f/dJMcagFLdx6/xbkDrmqRk0y0afSNg1ifyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRYZ2f/dJMcagFLdx6/xbkDrmqRk0y0afSNg1ifyK/img.png&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;750&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.6396%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;51.24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRYZ2f/dJMcagFLdx6/xbkDrmqRk0y0afSNg1ifyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRYZ2f%2FdJMcagFLdx6%2FxbkDrmqRk0y0afSNg1ifyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;394&quot; height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zZRav/dJMcahkm8my/8tbsA8WjUlAtwGYUAvBPNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zZRav/dJMcahkm8my/8tbsA8WjUlAtwGYUAvBPNk/img.png&quot; data-origin-width=&quot;376&quot; data-origin-height=&quot;752&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.1976%; margin-top: 10px;&quot; data-widthpercent=&quot;48.76&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zZRav/dJMcahkm8my/8tbsA8WjUlAtwGYUAvBPNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzZRav%2FdJMcahkm8my%2F8tbsA8WjUlAtwGYUAvBPNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;376&quot; height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crUkDq/dJMcagZYuMQ/pPEqc9AHs2mHl82q3ubQqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crUkDq/dJMcagZYuMQ/pPEqc9AHs2mHl82q3ubQqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crUkDq/dJMcagZYuMQ/pPEqc9AHs2mHl82q3ubQqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrUkDq%2FdJMcagZYuMQ%2FpPEqc9AHs2mHl82q3ubQqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;225&quot; height=&quot;462&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2026년도 1학기/iOS프로그래밍</category>
      <author>멈뭉밈</author>
      <guid isPermaLink="true">https://dupal-homework.tistory.com/150</guid>
      <comments>https://dupal-homework.tistory.com/150#entry150comment</comments>
      <pubDate>Mon, 1 Jun 2026 15:27:36 +0900</pubDate>
    </item>
    <item>
      <title>iOS 프로그래밍실무_11주차_Open API 기반iOS앱 개발(4)</title>
      <link>https://dupal-homework.tistory.com/149</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오토레이아웃을 구현하는 방법의 장단점&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eUChWx/dJMcajhWJ91/5jOfLEgesKT45paM0gdJUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eUChWx/dJMcajhWJ91/5jOfLEgesKT45paM0gdJUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eUChWx/dJMcajhWJ91/5jOfLEgesKT45paM0gdJUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeUChWx%2FdJMcajhWJ91%2F5jOfLEgesKT45paM0gdJUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;597&quot; height=&quot;341&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pv6yl/dJMcad24Nbz/BNXJwZmNkeuShj48jRQRp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pv6yl/dJMcad24Nbz/BNXJwZmNkeuShj48jRQRp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pv6yl/dJMcad24Nbz/BNXJwZmNkeuShj48jRQRp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpv6yl%2FdJMcad24Nbz%2FBNXJwZmNkeuShj48jRQRp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;558&quot; height=&quot;216&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SnapKit/SnapKit?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/SnapKit/SnapKit?utm_source=chatgpt.com&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1779082616107&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SnapKit/SnapKit: A Swift Autolayout DSL for iOS &amp;amp; OS X&quot; data-og-description=&quot;A Swift Autolayout DSL for iOS &amp;amp; OS X. Contribute to SnapKit/SnapKit development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SnapKit/SnapKit?utm_source=chatgpt.com&quot; data-og-url=&quot;https://github.com/SnapKit/SnapKit&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FGjRJ/dJMb89583iN/D079b5CmFugRKJRQsPMzRk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/Vh1wF/dJMb81fX3IA/gTVMkHkPfJ12LLphuZBMh0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/cjILSo/dJMb887eehE/LQstwxiNIkQz50mjJ15mhk/img.jpg?width=1776&amp;amp;height=394&amp;amp;face=0_0_1776_394&quot;&gt;&lt;a href=&quot;https://github.com/SnapKit/SnapKit?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SnapKit/SnapKit?utm_source=chatgpt.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FGjRJ/dJMb89583iN/D079b5CmFugRKJRQsPMzRk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/Vh1wF/dJMb81fX3IA/gTVMkHkPfJ12LLphuZBMh0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/cjILSo/dJMb887eehE/LQstwxiNIkQz50mjJ15mhk/img.jpg?width=1776&amp;amp;height=394&amp;amp;face=0_0_1776_394');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - SnapKit/SnapKit: A Swift Autolayout DSL for iOS &amp;amp; OS X&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A Swift Autolayout DSL for iOS &amp;amp; OS X. Contribute to SnapKit/SnapKit development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ynsjw/dJMcahdoRH6/ad5XdewuGyAu7rI4NEUHoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ynsjw/dJMcahdoRH6/ad5XdewuGyAu7rI4NEUHoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ynsjw/dJMcahdoRH6/ad5XdewuGyAu7rI4NEUHoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fynsjw%2FdJMcahdoRH6%2Fad5XdewuGyAu7rI4NEUHoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;334&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플 개발자들이많이 사용하는 라이브러리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbVN3M/dJMcaaL45ol/x05nhk8i6vAyVBJNavcDbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbVN3M/dJMcaaL45ol/x05nhk8i6vAyVBJNavcDbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbVN3M/dJMcaaL45ol/x05nhk8i6vAyVBJNavcDbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbVN3M%2FdJMcaaL45ol%2Fx05nhk8i6vAyVBJNavcDbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;740&quot; height=&quot;414&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WHC6d/dJMcagleyaU/Il6iWkydnWlPhTrOyW9sC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WHC6d/dJMcagleyaU/Il6iWkydnWlPhTrOyW9sC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WHC6d/dJMcagleyaU/Il6iWkydnWlPhTrOyW9sC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWHC6d%2FdJMcagleyaU%2FIl6iWkydnWlPhTrOyW9sC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;719&quot; height=&quot;519&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b96X6t/dJMcacXrELb/MMXmOmiKGP4gnfmEuvXSsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b96X6t/dJMcacXrELb/MMXmOmiKGP4gnfmEuvXSsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b96X6t/dJMcacXrELb/MMXmOmiKGP4gnfmEuvXSsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb96X6t%2FdJMcacXrELb%2FMMXmOmiKGP4gnfmEuvXSsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;713&quot; height=&quot;377&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXJXiX/dJMcaiXCnM1/qYkrlogzyl7zyG1iZDgrJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXJXiX/dJMcaiXCnM1/qYkrlogzyl7zyG1iZDgrJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXJXiX/dJMcaiXCnM1/qYkrlogzyl7zyG1iZDgrJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXJXiX%2FdJMcaiXCnM1%2FqYkrlogzyl7zyG1iZDgrJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1153&quot; height=&quot;590&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;185&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QryGf/dJMcadPxg6g/2W7W8HkT4bmmq1Pk0rwK61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QryGf/dJMcadPxg6g/2W7W8HkT4bmmq1Pk0rwK61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QryGf/dJMcadPxg6g/2W7W8HkT4bmmq1Pk0rwK61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQryGf%2FdJMcadPxg6g%2F2W7W8HkT4bmmq1Pk0rwK61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;185&quot; height=&quot;191&quot; data-origin-width=&quot;185&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택뷰&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이드 인스펙터&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;943&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp0gIO/dJMcah5yQ7f/abDKznTKbpEyOjdU5PfS11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp0gIO/dJMcah5yQ7f/abDKznTKbpEyOjdU5PfS11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp0gIO/dJMcah5yQ7f/abDKznTKbpEyOjdU5PfS11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp0gIO%2FdJMcah5yQ7f%2FabDKznTKbpEyOjdU5PfS11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1480&quot; height=&quot;943&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;943&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1185&quot; data-origin-height=&quot;489&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w4rp0/dJMcabxsj7v/XMoPgXyCK5PXKIAqjfUg1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w4rp0/dJMcabxsj7v/XMoPgXyCK5PXKIAqjfUg1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w4rp0/dJMcabxsj7v/XMoPgXyCK5PXKIAqjfUg1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw4rp0%2FdJMcabxsj7v%2FXMoPgXyCK5PXKIAqjfUg1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1185&quot; height=&quot;489&quot; data-origin-width=&quot;1185&quot; data-origin-height=&quot;489&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5S3Rz/dJMcabEe9Sx/k1oXw18fQoZ8u4ErujOEN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5S3Rz/dJMcabEe9Sx/k1oXw18fQoZ8u4ErujOEN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5S3Rz/dJMcabEe9Sx/k1oXw18fQoZ8u4ErujOEN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5S3Rz%2FdJMcabEe9Sx%2Fk1oXw18fQoZ8u4ErujOEN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;829&quot; height=&quot;453&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;453&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCkzdd/dJMcabqJxg2/NkqPmsB6FBioJwd07FLpyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCkzdd/dJMcabqJxg2/NkqPmsB6FBioJwd07FLpyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCkzdd/dJMcabqJxg2/NkqPmsB6FBioJwd07FLpyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCkzdd%2FdJMcabqJxg2%2FNkqPmsB6FBioJwd07FLpyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;688&quot; height=&quot;450&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수동으로 조절하면 이런씩으로 경고 창이 뜸&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(수치로 조정했는데 이게 맞나 헤매고 있는 거임)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;761&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHV1h6/dJMcaf7GAXE/G0oK6mNP2WiSaGkU2tvS4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHV1h6/dJMcaf7GAXE/G0oK6mNP2WiSaGkU2tvS4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHV1h6/dJMcaf7GAXE/G0oK6mNP2WiSaGkU2tvS4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHV1h6%2FdJMcaf7GAXE%2FG0oK6mNP2WiSaGkU2tvS4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;465&quot; height=&quot;761&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;761&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;했지만 보이는 건다름.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(우선순위 때문에 이전에 했던것이 적용 됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;199&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmgLpi/dJMcafNszSQ/fOSkC1yeP3LzOPWqtpSch1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmgLpi/dJMcafNszSQ/fOSkC1yeP3LzOPWqtpSch1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmgLpi/dJMcafNszSQ/fOSkC1yeP3LzOPWqtpSch1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmgLpi%2FdJMcafNszSQ%2FfOSkC1yeP3LzOPWqtpSch1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;199&quot; height=&quot;202&quot; data-origin-width=&quot;199&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 누르면 자동으로 엑스코드에서 해결 해 줌.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zRxRL/dJMcab5jmM9/XOBdHKpLITpOmT0rSEo3nK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zRxRL/dJMcab5jmM9/XOBdHKpLITpOmT0rSEo3nK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zRxRL/dJMcab5jmM9/XOBdHKpLITpOmT0rSEo3nK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzRxRL%2FdJMcab5jmM9%2FXOBdHKpLITpOmT0rSEo3nK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;585&quot; height=&quot;314&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;931&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWu9P8/dJMb99M9Qe6/e1LECZuqh30p0XoTeou8l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWu9P8/dJMb99M9Qe6/e1LECZuqh30p0XoTeou8l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWu9P8/dJMb99M9Qe6/e1LECZuqh30p0XoTeou8l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWu9P8%2FdJMb99M9Qe6%2Fe1LECZuqh30p0XoTeou8l0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;962&quot; height=&quot;931&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;931&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이블을 지우면 보이던 모양으로 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 해결을 위해 스택뷰로 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이어 만들고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PbAQI/dJMcageuE4f/YyfBPzNITyendxytLKpMl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PbAQI/dJMcageuE4f/YyfBPzNITyendxytLKpMl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PbAQI/dJMcageuE4f/YyfBPzNITyendxytLKpMl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPbAQI%2FdJMcageuE4f%2FYyfBPzNITyendxytLKpMl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;613&quot; height=&quot;356&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwSK0d/dJMcageuE4r/OXbUeqkMGu0nA6RnFfBkB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwSK0d/dJMcageuE4r/OXbUeqkMGu0nA6RnFfBkB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwSK0d/dJMcageuE4r/OXbUeqkMGu0nA6RnFfBkB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwSK0d%2FdJMcageuE4r%2FOXbUeqkMGu0nA6RnFfBkB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;551&quot; height=&quot;352&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;925&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chqbde/dJMcaiDmw6b/kXXulJMKbUl692Hf204wPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chqbde/dJMcaiDmw6b/kXXulJMKbUl692Hf204wPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chqbde/dJMcaiDmw6b/kXXulJMKbUl692Hf204wPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fchqbde%2FdJMcaiDmw6b%2FkXXulJMKbUl692Hf204wPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;732&quot; height=&quot;925&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;925&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wnqKG/dJMcahRX85k/6kX5SHc9oOjdKwAY1cs0lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wnqKG/dJMcahRX85k/6kX5SHc9oOjdKwAY1cs0lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wnqKG/dJMcahRX85k/6kX5SHc9oOjdKwAY1cs0lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwnqKG%2FdJMcahRX85k%2F6kX5SHc9oOjdKwAY1cs0lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;626&quot; height=&quot;716&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;716&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;437&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGlvpM/dJMcahRX85O/DvoEHvPkLEqfudrMILwB2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGlvpM/dJMcahRX85O/DvoEHvPkLEqfudrMILwB2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGlvpM/dJMcahRX85O/DvoEHvPkLEqfudrMILwB2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGlvpM%2FdJMcahRX85O%2FDvoEHvPkLEqfudrMILwB2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;437&quot; height=&quot;395&quot; data-origin-width=&quot;437&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽에 있는 타이틀 부분을 H스택뷰(수평)&lt;br /&gt;안쪽에 있는 부분은 W스택뷰(수직)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1779089200468&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//
//  ViewController.swift
//  MovieKjh
//
//  Created by Induk-cs  on 2026/05/04.
//

import UIKit

struct MovieData : Codable {
    let boxOfficeResult : BoxOfficeResult
}
struct BoxOfficeResult : Codable {
    let dailyBoxOfficeList : [DailyBoxOfficeList]
}
struct DailyBoxOfficeList : Codable {
    let movieNm : String
    let audiCnt : String
    let audiAcc : String
    let rank : String
}

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    @IBOutlet weak var table: UITableView!
    var movieData : MovieData?
    
    var movieURL = &quot;https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=36209978a1ca825ed365969b126bfc15&amp;amp;targetDt=&quot;
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&amp;gt; Int {
        return 10
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&amp;gt; UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: &quot;myCell&quot;, for: indexPath) as! MyTableViewCell
//        cell.movieName.text = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].movieNm
        
        if let mRank = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].rank,
           let mName = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].movieNm {
            let emoji: String
            switch mRank {
            case &quot;1&quot;: emoji = &quot; &quot;
            case &quot;2&quot;: emoji = &quot; &quot;
            case &quot;3&quot;: emoji = &quot; &quot;
            default:  emoji = &quot;&amp;bull;&quot;
            }
            cell.movieName.text = &quot;\(emoji) \(mRank)위 \(mName)&quot;
        
        }
        
        if let aAcc = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].audiAcc {
            let numF = NumberFormatter()
            numF.numberStyle = .decimal
            let result = numF.string(for: Int(aAcc))!
            cell.audiAccumulate.text = &quot;누적 : \(result)명&quot;
        }

        if let aCnt = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].audiCnt {
            let numF = NumberFormatter()
            numF.numberStyle = .decimal
            let result = numF.string(for: Int(aCnt))!
            cell.audiCount.text = &quot;어제 : \(result)명&quot;
        }
        
        
//        cell.audiAccumulate.text = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].audiAcc
//        cell.audiCount.text = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].audiCnt
        
    
        //        print(indexPath.description)
        return cell
    }
    
    
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -&amp;gt; String? {
        return &quot; 박스오피스(영화진흥위원회제공:&quot;+makeYesterdayString()+&quot;) &quot;
    }
    
    func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -&amp;gt; String? {
        return &quot;made by Smile Kim&quot;
    }
    
    func numberOfSections(in tableView: UITableView) -&amp;gt; Int {
        return 1
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        table.delegate = self
        table.dataSource = self
        movieURL += makeYesterdayString()
        getData()
    }
    
    func makeYesterdayString() -&amp;gt; String {
        let y = Calendar.current.date(byAdding:.day, value : -1, to : Date())!
        let dateF = DateFormatter()
        dateF.dateFormat = &quot;yyyyMMdd&quot;
        let day = dateF.string(from: y)
        return day
    }
    
    func getData(){
        guard let url = URL(string: movieURL) else { return }// 네트워크 1단계:주소 만들기
        let session = URLSession(configuration: .default)// 네트워크 2단계:택배회사 정하기
        let task = session.dataTask(with: url) { data, response, error in
            if error != nil {
                print(error!)
                return
            }
            guard let JSONData = data else { return }
            //        print(JSONData)
            _ = String(data:JSONData, encoding: .utf8)
            //        print(dataString!)
            
            let decoder = JSONDecoder()
            do{
                let decodedData = try decoder.decode(MovieData.self, from: JSONData)
                print(decodedData.boxOfficeResult.dailyBoxOfficeList[0].movieNm)
                print(decodedData.boxOfficeResult.dailyBoxOfficeList[0].audiAcc)
                print(decodedData.boxOfficeResult.dailyBoxOfficeList[0].audiCnt)
                self.movieData = decodedData
                DispatchQueue.main.async {
                    self.table.reloadData()
                }
            }catch{
                print(error)
            }
        }
        
        task.resume()
    }
    
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1779089218199&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//
//  MyTableViewCell.swift
//  MovieKjh
//
//  Created by Induk-cs  on 2026/05/04.
//

import UIKit

class MyTableViewCell: UITableViewCell {
    @IBOutlet weak var audiAccumulate: UILabel!
    @IBOutlet weak var audiCount: UILabel!
    @IBOutlet weak var movieName: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RMFP5/dJMcafGFB6J/KLzHYHBdR36MwFHceTDuoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RMFP5/dJMcafGFB6J/KLzHYHBdR36MwFHceTDuoK/img.png&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;736&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;48.22&quot; style=&quot;width: 47.656%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RMFP5/dJMcafGFB6J/KLzHYHBdR36MwFHceTDuoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRMFP5%2FdJMcafGFB6J%2FKLzHYHBdR36MwFHceTDuoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;344&quot; height=&quot;736&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1pzy7/dJMcahkcK95/LxwktfVGrx2KMjqChY5121/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1pzy7/dJMcahkcK95/LxwktfVGrx2KMjqChY5121/img.png&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;763&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.1812%;&quot; data-widthpercent=&quot;51.78&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1pzy7/dJMcahkcK95/LxwktfVGrx2KMjqChY5121/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1pzy7%2FdJMcahkcK95%2FLxwktfVGrx2KMjqChY5121%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;383&quot; height=&quot;763&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/byCbkz/dJMcabc8sRw/xwuFJqB7rP7tvtmSGdFNBk/MovieKjh%202.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;MovieKjh 2.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.05MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>2026년도 1학기/iOS프로그래밍</category>
      <author>멈뭉밈</author>
      <guid isPermaLink="true">https://dupal-homework.tistory.com/149</guid>
      <comments>https://dupal-homework.tistory.com/149#entry149comment</comments>
      <pubDate>Mon, 18 May 2026 14:05:47 +0900</pubDate>
    </item>
    <item>
      <title>정보보안_파이썬_Y2K 레트로 채팅 프로그램 제작</title>
      <link>https://dupal-homework.tistory.com/148</link>
      <description>&lt;p data-end=&quot;52&quot; data-start=&quot;26&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4PIHU/dJMcad21nIK/ErCQA8BRTMf7hJ7Kk4W4x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4PIHU/dJMcad21nIK/ErCQA8BRTMf7hJ7Kk4W4x0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4PIHU/dJMcad21nIK/ErCQA8BRTMf7hJ7Kk4W4x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4PIHU%2FdJMcad21nIK%2FErCQA8BRTMf7hJ7Kk4W4x0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;705&quot; height=&quot;734&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2133&quot; data-origin-height=&quot;737&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgRmrO/dJMcaja3tnR/5BKMTQF3Rn4MOePhmQ0FD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgRmrO/dJMcaja3tnR/5BKMTQF3Rn4MOePhmQ0FD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgRmrO/dJMcaja3tnR/5BKMTQF3Rn4MOePhmQ0FD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgRmrO%2FdJMcaja3tnR%2F5BKMTQF3Rn4MOePhmQ0FD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2133&quot; height=&quot;737&quot; data-origin-width=&quot;2133&quot; data-origin-height=&quot;737&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1 data-end=&quot;72&quot; data-start=&quot;59&quot; data-section-id=&quot;1nkvvqj&quot;&gt;&lt;br /&gt;&lt;br /&gt;  기본 채팅 기능&lt;/h1&gt;
&lt;p data-end=&quot;118&quot; data-start=&quot;74&quot; data-ke-size=&quot;size16&quot;&gt;✅ 여러 명 접속 가능&lt;br /&gt;✅ 실시간 채팅&lt;br /&gt;✅ 닉네임 표시&lt;br /&gt;✅ 시간 표시&lt;/p&gt;
&lt;p data-end=&quot;123&quot; data-start=&quot;120&quot; data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[CHAT] [16:40] 감자
안녕&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;170&quot; data-start=&quot;167&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;183&quot; data-start=&quot;172&quot; data-section-id=&quot;7qxv6v&quot;&gt;  접속자 기능&lt;/h1&gt;
&lt;p data-end=&quot;192&quot; data-start=&quot;185&quot; data-ke-size=&quot;size16&quot;&gt;✅ 입장 알림&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[SYSTEM] 감자님이 입장했습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;244&quot; data-start=&quot;237&quot; data-ke-size=&quot;size16&quot;&gt;✅ 퇴장 알림&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[SYSTEM] 감자님이 퇴장했습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;306&quot; data-start=&quot;289&quot; data-ke-size=&quot;size16&quot;&gt;✅ 현재 접속자 목록 자동 표시&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;[USERS]
감자 / 멍멍이 / 아르&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;369&quot; data-start=&quot;351&quot; data-ke-size=&quot;size16&quot;&gt;새 유저 들어오면 자동 갱신  &lt;/p&gt;
&lt;hr data-end=&quot;374&quot; data-start=&quot;371&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;388&quot; data-start=&quot;376&quot; data-section-id=&quot;1xsaw2i&quot;&gt; ️ 귓속말 기능&lt;/h1&gt;
&lt;p data-end=&quot;394&quot; data-start=&quot;390&quot; data-ke-size=&quot;size16&quot;&gt;명령어:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;/w 닉네임 메시지&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;431&quot; data-start=&quot;428&quot; data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;/w 감자 안녕&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;466&quot; data-start=&quot;463&quot; data-ke-size=&quot;size16&quot;&gt;출력:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[WHISPER] [16:41] 멍멍이 &amp;rarr; 감자
안녕&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;522&quot; data-start=&quot;519&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;535&quot; data-start=&quot;524&quot; data-section-id=&quot;y6gj00&quot;&gt;  명령어 기능&lt;/h1&gt;
&lt;p data-end=&quot;541&quot; data-start=&quot;537&quot; data-ke-size=&quot;size16&quot;&gt;명령어:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;/?&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;570&quot; data-start=&quot;567&quot; data-ke-size=&quot;size16&quot;&gt;출력:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;[COMMAND]

/? : 명령어 보기
/w 닉네임 메시지 : 귓속말
end : 채팅 종료
IMAGE 버튼 : 이미지 전송&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;666&quot; data-start=&quot;663&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;683&quot; data-start=&quot;668&quot; data-section-id=&quot;gzxtjo&quot;&gt; ️ 이미지 전송 기능&lt;/h1&gt;
&lt;p data-end=&quot;736&quot; data-start=&quot;685&quot; data-ke-size=&quot;size16&quot;&gt;✅ IMAGE 버튼&lt;br /&gt;✅ 이미지 선택&lt;br /&gt;✅ 채팅창 내부 출력&lt;br /&gt;✅ 이미지 미리보기 표시&lt;/p&gt;
&lt;p data-end=&quot;742&quot; data-start=&quot;738&quot; data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;hr data-end=&quot;747&quot; data-start=&quot;744&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;760&quot; data-start=&quot;749&quot; data-section-id=&quot;q2j4rf&quot;&gt;  디자인 기능&lt;/h1&gt;
&lt;p data-end=&quot;825&quot; data-start=&quot;762&quot; data-ke-size=&quot;size16&quot;&gt;✅ 레트로 블루 감성&lt;br /&gt;✅ BLUE WEB CHAT 타이틀&lt;br /&gt;✅ 파란 CRT 느낌&lt;br /&gt;✅ 채팅창 일체형 디자인&lt;/p&gt;
&lt;p data-end=&quot;848&quot; data-start=&quot;827&quot; data-ke-size=&quot;size16&quot;&gt;거의 2000년대 웹메신저 감성  ✨&lt;/p&gt;
&lt;hr data-end=&quot;853&quot; data-start=&quot;850&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;866&quot; data-start=&quot;855&quot; data-section-id=&quot;185pz6k&quot;&gt; ️ 서버 기능&lt;/h1&gt;
&lt;p data-end=&quot;908&quot; data-start=&quot;868&quot; data-ke-size=&quot;size16&quot;&gt;✅ 멀티 클라이언트 지원&lt;br /&gt;✅ 스레드 기반 처리&lt;br /&gt;✅ 서버 로그 출력&lt;/p&gt;
&lt;p data-end=&quot;916&quot; data-start=&quot;910&quot; data-ke-size=&quot;size16&quot;&gt;터미널에서:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[SYSTEM] 감자님 입장했습니다.

[CHAT] [16:52] 감자
안녕&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;995&quot; data-start=&quot;983&quot; data-ke-size=&quot;size16&quot;&gt;전부 볼 수 있음  &lt;/p&gt;
&lt;hr data-end=&quot;1000&quot; data-start=&quot;997&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1014&quot; data-start=&quot;1002&quot; data-section-id=&quot;fym95q&quot;&gt;  네트워크 기능&lt;/h1&gt;
&lt;p data-end=&quot;1079&quot; data-start=&quot;1016&quot; data-ke-size=&quot;size16&quot;&gt;✅ TCP 소켓 통신&lt;br /&gt;✅ localhost 연결&lt;br /&gt;✅ 포트 7777 사용&lt;br /&gt;✅ socket reuse 처리&lt;/p&gt;
&lt;hr data-end=&quot;1084&quot; data-start=&quot;1081&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1099&quot; data-start=&quot;1086&quot; data-section-id=&quot;1aqdkak&quot;&gt;  사용 라이브러리&lt;/h1&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;socket
threading
tkinter
PIL (pillow)
datetime&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;thread_client2.py&lt;/p&gt;
&lt;pre id=&quot;code_1778658100095&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import socket
import threading

def thread_recv(client_socket, addr):
    while True:
        recv_data = client_socket.recv(1024)

        print(f&quot;{addr}에서 보낸 메시지 : {recv_data.decode()}&quot;)

        # 에코 전송
        client_socket.sendall(recv_data)

        # 종료 처리
        if recv_data.decode().strip() == &quot;end&quot;:
            print(f&quot;{addr}에서 종료하고 싶어합니다.&quot;)

            client_socket.close()
            break


# 1. 소켓 생성
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2. 바인딩
sock.bind((&quot;&quot;, 7777)) #고침

# 3. 접속 대기
sock.listen()

print(&quot;The Server Start.....&quot;)

# 4. 접속 수락
conn, addr = sock.accept()

# 쓰레드 생성
recv_handler = threading.Thread(
    target=thread_recv,
    args=(conn, addr)
)

recv_handler.start()&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;thread_server2.py&lt;/p&gt;
&lt;pre id=&quot;code_1778658127459&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import socket
import threading
from datetime import datetime

clients = {}  # 닉네임 : 소켓


# 전체 전송
def broadcast(message):

    for client_socket in list(clients.values()):

        try:

            client_socket.send(
                message.encode(&quot;utf-8&quot;)
            )

        except:

            pass


# 현재 접속자 전송
def send_user_list():

    user_list = &quot; / &quot;.join(clients.keys())

    broadcast(f&quot;[USERS]\n{user_list}&quot;)


# 클라이언트 처리
def thread_recv(client_socket, addr):

    nickname = client_socket.recv(1024).decode(&quot;utf-8&quot;).strip()

    if nickname == &quot;&quot;:
        nickname = &quot;guest&quot;

    clients[nickname] = client_socket

    # 입장 알림
    broadcast(
        f&quot;[SYSTEM] {nickname}님이 입장했습니다.&quot;
    )

    # 명령어 안내
    broadcast(
        &quot;[SYSTEM] /? 를 입력하면 명령어를 볼 수 있습니다.&quot;
    )

    # 현재 접속자
    send_user_list()

    while True:

        try:

            recv_data = client_socket.recv(4096)

            if not recv_data:
                break

            msg = recv_data.decode(&quot;utf-8&quot;).strip()

            now = datetime.now().strftime(&quot;%H:%M&quot;)

            # 종료
            if msg == &quot;end&quot;:

                break

            # 명령어
            elif msg == &quot;/?&quot;:

                help_msg = (
                    &quot;[COMMAND]\n&quot;
                    &quot;──────── COMMAND ────────\n&quot;
                    &quot;/? : 명령어 보기\n&quot;
                    &quot;/w 닉네임 메시지 : 귓속말\n&quot;
                    &quot;end : 채팅 종료\n&quot;
                    &quot;IMAGE 버튼 : 이미지 전송\n&quot;
                    &quot;────────────────────────&quot;
                )

                client_socket.send(
                    help_msg.encode(&quot;utf-8&quot;)
                )

            # 귓속말
            elif msg.startswith(&quot;/w&quot;):

                parts = msg.split(&quot; &quot;, 2)

                if len(parts) &amp;gt;= 3:

                    target = parts[1]

                    whisper_msg = parts[2]

                    if target in clients:

                        send_msg = (
                            f&quot;[WHISPER] &quot;
                            f&quot;[{now}] &quot;
                            f&quot;{nickname} &amp;rarr; {target}\n&quot;
                            f&quot;{whisper_msg}&quot;
                        )

                        clients[target].send(
                            send_msg.encode(&quot;utf-8&quot;)
                        )

                        client_socket.send(
                            send_msg.encode(&quot;utf-8&quot;)
                        )

                    else:

                        client_socket.send(
                            &quot;[SYSTEM] 유저를 찾을 수 없습니다.&quot;.encode(&quot;utf-8&quot;)
                        )

            # 이미지
            elif msg.startswith(&quot;[IMAGE]&quot;):

                image_path = msg.replace(
                    &quot;[IMAGE]&quot;,
                    &quot;&quot;
                )

                broadcast(
                    f&quot;[IMAGE]{nickname}|{image_path}&quot;
                )

            # 일반 채팅
            else:

                send_msg = (
                    f&quot;[CHAT] &quot;
                    f&quot;[{now}] &quot;
                    f&quot;{nickname}\n&quot;
                    f&quot;{msg}&quot;
                )

                broadcast(send_msg)

        except:

            break

    # 퇴장 처리
    if nickname in clients:

        del clients[nickname]

    broadcast(
        f&quot;[SYSTEM] {nickname}님이 퇴장했습니다.&quot;
    )

    send_user_list()

    client_socket.close()


# 서버 생성
sock = socket.socket(
    socket.AF_INET,
    socket.SOCK_STREAM
)

sock.setsockopt(
    socket.SOL_SOCKET,
    socket.SO_REUSEADDR,
    1
)

sock.bind((&quot;&quot;, 7777))

sock.listen()

print(&quot;BLUE WEB CHAT SERVER START&quot;)

while True:

    conn, addr = sock.accept()

    recv_handler = threading.Thread(
        target=thread_recv,
        args=(conn, addr)
    )

    recv_handler.start()&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gui_client.py&lt;/p&gt;
&lt;pre id=&quot;code_1778658160426&quot; class=&quot;nix&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import tkinter
import socket

from threading import Thread

from tkinter import simpledialog
from tkinter import filedialog

from PIL import Image, ImageTk


image_refs = []


# 텍스트 추가
def add_text(message, tag=&quot;normal&quot;):

    chat_text.config(state=&quot;normal&quot;)

    chat_text.insert(
        tkinter.END,
        message + &quot;\n\n&quot;,
        tag
    )

    chat_text.see(tkinter.END)

    chat_text.config(state=&quot;disabled&quot;)


# 이미지 추가
def add_image(nickname, image_path):

    chat_text.config(state=&quot;normal&quot;)

    chat_text.insert(
        tkinter.END,
        f&quot;[ IMAGE ] {nickname}\n&quot;,
        &quot;image_title&quot;
    )

    try:

        img = Image.open(image_path)

        img.thumbnail((220, 220))

        photo = ImageTk.PhotoImage(img)

        image_refs.append(photo)

        chat_text.image_create(
            tkinter.END,
            image=photo
        )

        chat_text.insert(
            tkinter.END,
            &quot;\n\n&quot;
        )

    except:

        chat_text.insert(
            tkinter.END,
            &quot;[이미지 출력 실패]\n\n&quot;,
            &quot;system&quot;
        )

    chat_text.see(tkinter.END)

    chat_text.config(state=&quot;disabled&quot;)


# 메시지 전송
def send(event=None):

    msg = input_msg.get().strip()

    if msg == &quot;&quot;:
        return

    sock.send(msg.encode(&quot;utf-8&quot;))

    input_msg.set(&quot;&quot;)

    if msg == &quot;end&quot;:

        sock.close()

        win.quit()


# 이미지 전송
def send_image():

    filepath = filedialog.askopenfilename(
        filetypes=[
            (
                &quot;Image Files&quot;,
                &quot;*.png;*.jpg;*.jpeg;*.gif&quot;
            )
        ]
    )

    if filepath:

        sock.send(
            f&quot;[IMAGE]{filepath}&quot;.encode(&quot;utf-8&quot;)
        )


# 메시지 수신
def recvMessage():

    try:

        while True:

            msg = sock.recv(4096).decode(&quot;utf-8&quot;)

            # 시스템
            if msg.startswith(&quot;[SYSTEM]&quot;):

                add_text(msg, &quot;system&quot;)

            # 접속자
            elif msg.startswith(&quot;[USERS]&quot;):

                users = msg.replace(
                    &quot;[USERS]\n&quot;,
                    &quot;&quot;
                )

                add_text(
                    &quot;──────── ONLINE ────────\n&quot;
                    + users +
                    &quot;\n────────────────────────&quot;,
                    &quot;users&quot;
                )

            # 명령어
            elif msg.startswith(&quot;[COMMAND]&quot;):

                add_text(msg, &quot;command&quot;)

            # 귓속말
            elif msg.startswith(&quot;[WHISPER]&quot;):

                add_text(msg, &quot;whisper&quot;)

            # 이미지
            elif msg.startswith(&quot;[IMAGE]&quot;):

                data = msg.replace(
                    &quot;[IMAGE]&quot;,
                    &quot;&quot;
                )

                nickname, image_path = data.split(&quot;|&quot;, 1)

                add_image(
                    nickname,
                    image_path
                )

            # 일반 채팅
            elif msg.startswith(&quot;[CHAT]&quot;):

                add_text(
                    msg.replace(&quot;[CHAT] &quot;, &quot;&quot;),
                    &quot;chat&quot;
                )

            else:

                add_text(msg)

    except:

        add_text(
            &quot;[SYSTEM] 서버 종료&quot;,
            &quot;system&quot;
        )


# 종료
def on_delete():

    try:

        sock.send(&quot;end&quot;.encode(&quot;utf-8&quot;))

        sock.close()

    except:

        pass

    win.destroy()


# GUI 생성
win = tkinter.Tk()

win.geometry(&quot;700x700&quot;)

win.configure(bg=&quot;#f5f5f5&quot;)


# 닉네임
name = simpledialog.askstring(
    &quot;nickname&quot;,
    &quot;닉네임 입력&quot;
)

if name is None or name.strip() == &quot;&quot;:
    name = &quot;guest&quot;


# 창 제목
win.title(f&quot;BLUE WEB CHAT :: {name}&quot;)


# 상단 제목
title = tkinter.Label(
    win,
    text=f&quot;BLUE WEB CHAT :: {name}&quot;,
    font=(&quot;Courier New&quot;, 24, &quot;bold&quot;),
    fg=&quot;#0033ff&quot;,
    bg=&quot;#f5f5f5&quot;
)

title.pack(pady=15)


# 부제목
sub_title = tkinter.Label(
    win,
    text=&quot;RETRO STYLE NETWORK MESSENGER&quot;,
    font=(&quot;Courier New&quot;, 11),
    fg=&quot;#0033ff&quot;,
    bg=&quot;#f5f5f5&quot;
)

sub_title.pack()


# 장식선
line = tkinter.Label(
    win,
    text=&quot;******************************************************&quot;,
    font=(&quot;Courier New&quot;, 10),
    fg=&quot;#0033ff&quot;,
    bg=&quot;#f5f5f5&quot;
)

line.pack(pady=10)


# 채팅 프레임
chat_frame = tkinter.Frame(
    win,
    bg=&quot;#ffffff&quot;,
    highlightbackground=&quot;#0033ff&quot;,
    highlightthickness=1
)

chat_frame.pack(
    padx=20,
    pady=10,
    fill=tkinter.BOTH,
    expand=True
)


# 스크롤
scroll = tkinter.Scrollbar(chat_frame)

scroll.pack(
    side=tkinter.RIGHT,
    fill=tkinter.Y
)


# 채팅창
chat_text = tkinter.Text(
    chat_frame,
    font=(&quot;Courier New&quot;, 12),
    fg=&quot;#0033ff&quot;,
    bg=&quot;#ffffff&quot;,
    yscrollcommand=scroll.set,
    wrap=&quot;word&quot;,
    borderwidth=0
)

chat_text.pack(
    side=tkinter.LEFT,
    fill=tkinter.BOTH,
    expand=True
)

scroll.config(command=chat_text.yview)


# 태그 스타일
chat_text.tag_config(
    &quot;system&quot;,
    foreground=&quot;#0033ff&quot;,
    font=(&quot;Courier New&quot;, 11, &quot;bold&quot;)
)

chat_text.tag_config(
    &quot;users&quot;,
    foreground=&quot;#0033ff&quot;,
    font=(&quot;Courier New&quot;, 11, &quot;bold&quot;)
)

chat_text.tag_config(
    &quot;command&quot;,
    foreground=&quot;#0033ff&quot;,
    font=(&quot;Courier New&quot;, 11)
)

chat_text.tag_config(
    &quot;whisper&quot;,
    foreground=&quot;#0033ff&quot;,
    font=(&quot;Courier New&quot;, 11, &quot;italic&quot;)
)

chat_text.tag_config(
    &quot;chat&quot;,
    foreground=&quot;#0033ff&quot;,
    font=(&quot;Courier New&quot;, 12)
)

chat_text.tag_config(
    &quot;image_title&quot;,
    foreground=&quot;#0033ff&quot;,
    font=(&quot;Courier New&quot;, 11, &quot;bold&quot;)
)

chat_text.config(state=&quot;disabled&quot;)


# 하단 프레임
bottom_frame = tkinter.Frame(
    win,
    bg=&quot;#f5f5f5&quot;
)

bottom_frame.pack(
    fill=tkinter.X,
    padx=20,
    pady=15
)


# 입력 변수
input_msg = tkinter.StringVar()


# 입력창
inputbox = tkinter.Entry(
    bottom_frame,
    textvariable=input_msg,
    font=(&quot;Courier New&quot;, 14),
    fg=&quot;#0033ff&quot;,
    bg=&quot;#ffffff&quot;,
    insertbackground=&quot;#0033ff&quot;,
    highlightbackground=&quot;#0033ff&quot;,
    highlightthickness=1
)

inputbox.pack(
    side=tkinter.LEFT,
    fill=tkinter.X,
    expand=True,
    ipady=12
)

inputbox.bind(&quot;&amp;lt;Return&amp;gt;&quot;, send)


# 이미지 버튼
image_button = tkinter.Button(
    bottom_frame,
    text=&quot;IMAGE&quot;,
    command=send_image,
    font=(&quot;Courier New&quot;, 10, &quot;bold&quot;),
    fg=&quot;#0033ff&quot;,
    bg=&quot;#ffffff&quot;,
    activeforeground=&quot;#ffffff&quot;,
    activebackground=&quot;#0033ff&quot;,
    relief=&quot;solid&quot;,
    borderwidth=1
)

image_button.pack(
    side=tkinter.RIGHT,
    padx=5,
    ipadx=10,
    ipady=10
)


# 전송 버튼
send_button = tkinter.Button(
    bottom_frame,
    text=&quot;SEND&quot;,
    command=send,
    font=(&quot;Courier New&quot;, 10, &quot;bold&quot;),
    fg=&quot;#0033ff&quot;,
    bg=&quot;#ffffff&quot;,
    activeforeground=&quot;#ffffff&quot;,
    activebackground=&quot;#0033ff&quot;,
    relief=&quot;solid&quot;,
    borderwidth=1
)

send_button.pack(
    side=tkinter.RIGHT,
    padx=5,
    ipadx=10,
    ipady=10
)


# 종료 이벤트
win.protocol(
    &quot;WM_DELETE_WINDOW&quot;,
    on_delete
)


# 서버 연결
IP = &quot;localhost&quot;

PORT = 7777

sock = socket.socket(
    socket.AF_INET,
    socket.SOCK_STREAM
)

sock.connect((IP, PORT))


# 닉네임 전송
sock.send(name.encode(&quot;utf-8&quot;))


# 수신 쓰레드
receive_thread = Thread(
    target=recvMessage
)

receive_thread.daemon = True

receive_thread.start()


# 포커스
inputbox.focus()


# 실행
win.mainloop()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0U25r/dJMcafT8UFi/UQLlqZx7Hh97BIqdfEBscK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0U25r/dJMcafT8UFi/UQLlqZx7Hh97BIqdfEBscK/img.png&quot; style=&quot;width: 44.7257%; margin-right: 10px;&quot; data-origin-width=&quot;1277&quot; data-origin-height=&quot;1032&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;45.25&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0U25r/dJMcafT8UFi/UQLlqZx7Hh97BIqdfEBscK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0U25r%2FdJMcafT8UFi%2FUQLlqZx7Hh97BIqdfEBscK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1277&quot; height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/butN9c/dJMcadhIcwN/csfDKkMzxy5rufJYmLdrV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/butN9c/dJMcadhIcwN/csfDKkMzxy5rufJYmLdrV0/img.png&quot; style=&quot;width: 54.1115%;&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;855&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;54.75&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/butN9c/dJMcadhIcwN/csfDKkMzxy5rufJYmLdrV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbutN9c%2FdJMcadhIcwN%2FcsfDKkMzxy5rufJYmLdrV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;855&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkrzu6/dJMcahxECbe/10KNly6LgMgmrhS8cRaeP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkrzu6/dJMcahxECbe/10KNly6LgMgmrhS8cRaeP0/img.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;734&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.7548%; margin-right: 10px;&quot; data-widthpercent=&quot;50.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkrzu6/dJMcahxECbe/10KNly6LgMgmrhS8cRaeP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkrzu6%2FdJMcahxECbe%2F10KNly6LgMgmrhS8cRaeP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;706&quot; height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnYLh5/dJMcaaeelFr/SnCaNnwbfFjCS7nijLlRgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnYLh5/dJMcaaeelFr/SnCaNnwbfFjCS7nijLlRgK/img.png&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;743&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.0825%;&quot; data-widthpercent=&quot;49.66&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnYLh5/dJMcaaeelFr/SnCaNnwbfFjCS7nijLlRgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnYLh5%2FdJMcaaeelFr%2FSnCaNnwbfFjCS7nijLlRgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;705&quot; height=&quot;743&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/YPNMs/dJMcahj87d4/kpOzyiLTnS2BzTzI2YvqTk/Network%20Programming.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Network Programming.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.02MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>2026년도 1학기/정보 보안</category>
      <author>멈뭉밈</author>
      <guid isPermaLink="true">https://dupal-homework.tistory.com/148</guid>
      <comments>https://dupal-homework.tistory.com/148#entry148comment</comments>
      <pubDate>Wed, 13 May 2026 16:45:12 +0900</pubDate>
    </item>
    <item>
      <title>iOS 프로그래밍실무_10주차_Open API 기반iOS앱 개발(3)</title>
      <link>https://dupal-homework.tistory.com/147</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do&quot;&gt;https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778485086459&quot; style=&quot;color: #333333; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do&quot; data-og-source-url=&quot;https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do&quot; data-og-host=&quot;www.kobis.or.kr&quot; data-og-description=&quot;제공서비스 영화관입장권통합전산망이 제공하는 오픈API서비스 모음입니다. 사용 가능한 서비스를 확인하고 서비스별 인터페이스 정보를 조회합니다.&quot; data-og-title=&quot;영화진흥위원회 오픈API&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do&quot; data-source-url=&quot;https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;영화진흥위원회 오픈API&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;제공서비스 영화관입장권통합전산망이 제공하는 오픈API서비스 모음입니다. 사용 가능한 서비스를 확인하고 서비스별 인터페이스 정보를 조회합니다.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;www.kobis.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;뒷 부분 오늘 날자로 바꾸고&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1778485086460&quot; class=&quot;bash&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;  &quot;boxOfficeResult&quot;: {
    &quot;boxofficeType&quot;: &quot;일별 박스오피스&quot;,
    &quot;showRange&quot;: &quot;20260510~20260510&quot;,
    &quot;dailyBoxOfficeList&quot;: [
      {
        &quot;rnum&quot;: &quot;1&quot;,
        &quot;rank&quot;: &quot;1&quot;,
        &quot;rankInten&quot;: &quot;1&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20259773&quot;,
        &quot;movieNm&quot;: &quot;슈퍼 마리오 갤럭시&quot;,
        &quot;openDt&quot;: &quot;2026-04-29&quot;,
        &quot;salesAmt&quot;: &quot;799924360&quot;,
        &quot;salesShare&quot;: &quot;28.9&quot;,
        &quot;salesInten&quot;: &quot;-17890220&quot;,
        &quot;salesChange&quot;: &quot;-2.2&quot;,
        &quot;salesAcc&quot;: &quot;12724669750&quot;,
        &quot;audiCnt&quot;: &quot;82482&quot;,
        &quot;audiInten&quot;: &quot;-1543&quot;,
        &quot;audiChange&quot;: &quot;-1.8&quot;,
        &quot;audiAcc&quot;: &quot;1318717&quot;,
        &quot;scrnCnt&quot;: &quot;1422&quot;,
        &quot;showCnt&quot;: &quot;4618&quot;
      },
      {
        &quot;rnum&quot;: &quot;2&quot;,
        &quot;rank&quot;: &quot;2&quot;,
        &quot;rankInten&quot;: &quot;-1&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20259791&quot;,
        &quot;movieNm&quot;: &quot;악마는 프라다를 입는다 2&quot;,
        &quot;openDt&quot;: &quot;2026-04-29&quot;,
        &quot;salesAmt&quot;: &quot;709778320&quot;,
        &quot;salesShare&quot;: &quot;25.6&quot;,
        &quot;salesInten&quot;: &quot;-171168170&quot;,
        &quot;salesChange&quot;: &quot;-19.4&quot;,
        &quot;salesAcc&quot;: &quot;12150628470&quot;,
        &quot;audiCnt&quot;: &quot;68337&quot;,
        &quot;audiInten&quot;: &quot;-15964&quot;,
        &quot;audiChange&quot;: &quot;-18.9&quot;,
        &quot;audiAcc&quot;: &quot;1221631&quot;,
        &quot;scrnCnt&quot;: &quot;1132&quot;,
        &quot;showCnt&quot;: &quot;3898&quot;
      },
      {
        &quot;rnum&quot;: &quot;3&quot;,
        &quot;rank&quot;: &quot;3&quot;,
        &quot;rankInten&quot;: &quot;0&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20254121&quot;,
        &quot;movieNm&quot;: &quot;살목지&quot;,
        &quot;openDt&quot;: &quot;2026-04-08&quot;,
        &quot;salesAmt&quot;: &quot;581454750&quot;,
        &quot;salesShare&quot;: &quot;21.0&quot;,
        &quot;salesInten&quot;: &quot;-90855500&quot;,
        &quot;salesChange&quot;: &quot;-13.5&quot;,
        &quot;salesAcc&quot;: &quot;30967865120&quot;,
        &quot;audiCnt&quot;: &quot;56204&quot;,
        &quot;audiInten&quot;: &quot;-8532&quot;,
        &quot;audiChange&quot;: &quot;-13.2&quot;,
        &quot;audiAcc&quot;: &quot;3022843&quot;,
        &quot;scrnCnt&quot;: &quot;1088&quot;,
        &quot;showCnt&quot;: &quot;3653&quot;
      },
      {
        &quot;rnum&quot;: &quot;4&quot;,
        &quot;rank&quot;: &quot;4&quot;,
        &quot;rankInten&quot;: &quot;0&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20261782&quot;,
        &quot;movieNm&quot;: &quot;프로젝트 헤일메리&quot;,
        &quot;openDt&quot;: &quot;2026-03-18&quot;,
        &quot;salesAmt&quot;: &quot;257972810&quot;,
        &quot;salesShare&quot;: &quot;9.3&quot;,
        &quot;salesInten&quot;: &quot;-61661530&quot;,
        &quot;salesChange&quot;: &quot;-19.3&quot;,
        &quot;salesAcc&quot;: &quot;31576050620&quot;,
        &quot;audiCnt&quot;: &quot;20769&quot;,
        &quot;audiInten&quot;: &quot;-4527&quot;,
        &quot;audiChange&quot;: &quot;-17.9&quot;,
        &quot;audiAcc&quot;: &quot;2782964&quot;,
        &quot;scrnCnt&quot;: &quot;608&quot;,
        &quot;showCnt&quot;: &quot;1047&quot;
      },
      {
        &quot;rnum&quot;: &quot;5&quot;,
        &quot;rank&quot;: &quot;5&quot;,
        &quot;rankInten&quot;: &quot;0&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20240532&quot;,
        &quot;movieNm&quot;: &quot;짱구&quot;,
        &quot;openDt&quot;: &quot;2026-04-22&quot;,
        &quot;salesAmt&quot;: &quot;125904100&quot;,
        &quot;salesShare&quot;: &quot;4.5&quot;,
        &quot;salesInten&quot;: &quot;-6795680&quot;,
        &quot;salesChange&quot;: &quot;-5.1&quot;,
        &quot;salesAcc&quot;: &quot;3669868060&quot;,
        &quot;audiCnt&quot;: &quot;12231&quot;,
        &quot;audiInten&quot;: &quot;-682&quot;,
        &quot;audiChange&quot;: &quot;-5.3&quot;,
        &quot;audiAcc&quot;: &quot;376605&quot;,
        &quot;scrnCnt&quot;: &quot;494&quot;,
        &quot;showCnt&quot;: &quot;869&quot;
      },
      {
        &quot;rnum&quot;: &quot;6&quot;,
        &quot;rank&quot;: &quot;6&quot;,
        &quot;rankInten&quot;: &quot;0&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20242837&quot;,
        &quot;movieNm&quot;: &quot;왕과 사는 남자&quot;,
        &quot;openDt&quot;: &quot;2026-02-04&quot;,
        &quot;salesAmt&quot;: &quot;83398400&quot;,
        &quot;salesShare&quot;: &quot;3.0&quot;,
        &quot;salesInten&quot;: &quot;-4351430&quot;,
        &quot;salesChange&quot;: &quot;-5&quot;,
        &quot;salesAcc&quot;: &quot;162501475130&quot;,
        &quot;audiCnt&quot;: &quot;8286&quot;,
        &quot;audiInten&quot;: &quot;-372&quot;,
        &quot;audiChange&quot;: &quot;-4.3&quot;,
        &quot;audiAcc&quot;: &quot;16833524&quot;,
        &quot;scrnCnt&quot;: &quot;385&quot;,
        &quot;showCnt&quot;: &quot;566&quot;
      },
      {
        &quot;rnum&quot;: &quot;7&quot;,
        &quot;rank&quot;: &quot;7&quot;,
        &quot;rankInten&quot;: &quot;0&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20262685&quot;,
        &quot;movieNm&quot;: &quot;란 12.3&quot;,
        &quot;openDt&quot;: &quot;2026-04-22&quot;,
        &quot;salesAmt&quot;: &quot;41936150&quot;,
        &quot;salesShare&quot;: &quot;1.5&quot;,
        &quot;salesInten&quot;: &quot;-2007610&quot;,
        &quot;salesChange&quot;: &quot;-4.6&quot;,
        &quot;salesAcc&quot;: &quot;2302425760&quot;,
        &quot;audiCnt&quot;: &quot;4210&quot;,
        &quot;audiInten&quot;: &quot;-112&quot;,
        &quot;audiChange&quot;: &quot;-2.6&quot;,
        &quot;audiAcc&quot;: &quot;230387&quot;,
        &quot;scrnCnt&quot;: &quot;297&quot;,
        &quot;showCnt&quot;: &quot;398&quot;
      },
      {
        &quot;rnum&quot;: &quot;8&quot;,
        &quot;rank&quot;: &quot;8&quot;,
        &quot;rankInten&quot;: &quot;0&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20262947&quot;,
        &quot;movieNm&quot;: &quot;모탈 컴뱃 2&quot;,
        &quot;openDt&quot;: &quot;2026-05-06&quot;,
        &quot;salesAmt&quot;: &quot;27477950&quot;,
        &quot;salesShare&quot;: &quot;1.0&quot;,
        &quot;salesInten&quot;: &quot;-10056190&quot;,
        &quot;salesChange&quot;: &quot;-26.8&quot;,
        &quot;salesAcc&quot;: &quot;136112040&quot;,
        &quot;audiCnt&quot;: &quot;2340&quot;,
        &quot;audiInten&quot;: &quot;-819&quot;,
        &quot;audiChange&quot;: &quot;-25.9&quot;,
        &quot;audiAcc&quot;: &quot;12049&quot;,
        &quot;scrnCnt&quot;: &quot;335&quot;,
        &quot;showCnt&quot;: &quot;404&quot;
      },
      {
        &quot;rnum&quot;: &quot;9&quot;,
        &quot;rank&quot;: &quot;9&quot;,
        &quot;rankInten&quot;: &quot;0&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20247648&quot;,
        &quot;movieNm&quot;: &quot;내 이름은&quot;,
        &quot;openDt&quot;: &quot;2026-04-15&quot;,
        &quot;salesAmt&quot;: &quot;13356750&quot;,
        &quot;salesShare&quot;: &quot;0.5&quot;,
        &quot;salesInten&quot;: &quot;-415750&quot;,
        &quot;salesChange&quot;: &quot;-3&quot;,
        &quot;salesAcc&quot;: &quot;1828145980&quot;,
        &quot;audiCnt&quot;: &quot;1540&quot;,
        &quot;audiInten&quot;: &quot;-5&quot;,
        &quot;audiChange&quot;: &quot;-0.3&quot;,
        &quot;audiAcc&quot;: &quot;204746&quot;,
        &quot;scrnCnt&quot;: &quot;97&quot;,
        &quot;showCnt&quot;: &quot;122&quot;
      },
      {
        &quot;rnum&quot;: &quot;10&quot;,
        &quot;rank&quot;: &quot;10&quot;,
        &quot;rankInten&quot;: &quot;1&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20262775&quot;,
        &quot;movieNm&quot;: &quot;기동전사 건담: 섬광의 하사웨이 키르케의 마녀&quot;,
        &quot;openDt&quot;: &quot;2026-04-22&quot;,
        &quot;salesAmt&quot;: &quot;8243550&quot;,
        &quot;salesShare&quot;: &quot;0.3&quot;,
        &quot;salesInten&quot;: &quot;-2494900&quot;,
        &quot;salesChange&quot;: &quot;-23.2&quot;,
        &quot;salesAcc&quot;: &quot;504187900&quot;,
        &quot;audiCnt&quot;: &quot;819&quot;,
        &quot;audiInten&quot;: &quot;-330&quot;,
        &quot;audiChange&quot;: &quot;-28.7&quot;,
        &quot;audiAcc&quot;: &quot;41278&quot;,
        &quot;scrnCnt&quot;: &quot;50&quot;,
        &quot;showCnt&quot;: &quot;53&quot;
      }
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;네트워킹 4단계&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/onCKj/dJMcaaectyJ/fGejkb3AfPbqUUSmxIfeA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/onCKj/dJMcaaectyJ/fGejkb3AfPbqUUSmxIfeA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/onCKj/dJMcaaectyJ/fGejkb3AfPbqUUSmxIfeA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FonCKj%2FdJMcaaectyJ%2FfGejkb3AfPbqUUSmxIfeA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;529&quot; height=&quot;349&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;454&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MLGPH/dJMcaa6lehf/uiqBotNqyYc436zpLmiI61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MLGPH/dJMcaa6lehf/uiqBotNqyYc436zpLmiI61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MLGPH/dJMcaa6lehf/uiqBotNqyYc436zpLmiI61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMLGPH%2FdJMcaa6lehf%2FuiqBotNqyYc436zpLmiI61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;454&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;454&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;484&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cu9lF3/dJMcai4iezh/zWolkG3nXvdImWPVKzi0J1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cu9lF3/dJMcai4iezh/zWolkG3nXvdImWPVKzi0J1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cu9lF3/dJMcai4iezh/zWolkG3nXvdImWPVKzi0J1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcu9lF3%2FdJMcai4iezh%2FzWolkG3nXvdImWPVKzi0J1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;484&quot; height=&quot;376&quot; data-origin-width=&quot;484&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;네트워킹 1단계 : URL 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PoBYS/dJMcai4iezf/8Kf7wjVmCkJqzczRyk4TK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PoBYS/dJMcai4iezf/8Kf7wjVmCkJqzczRyk4TK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PoBYS/dJMcai4iezf/8Kf7wjVmCkJqzczRyk4TK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPoBYS%2FdJMcai4iezf%2F8Kf7wjVmCkJqzczRyk4TK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;826&quot; height=&quot;461&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HaBMp/dJMcai4iezn/kYDtXk65xhEV7tUB73rk80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HaBMp/dJMcai4iezn/kYDtXk65xhEV7tUB73rk80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HaBMp/dJMcai4iezn/kYDtXk65xhEV7tUB73rk80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHaBMp%2FdJMcai4iezn%2FkYDtXk65xhEV7tUB73rk80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683&quot; height=&quot;412&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;init?(...)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;122&quot; data-end=&quot;150&quot;&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Failable Initializer&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;✨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;152&quot; data-end=&quot;154&quot;&gt;즉:&lt;/p&gt;
&lt;blockquote style=&quot;font-family: 'Noto Serif KR'; background-color: #000000; color: #333333; text-align: center;&quot; data-ke-style=&quot;style1&quot; data-start=&quot;156&quot; data-end=&quot;177&quot;&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;158&quot; data-end=&quot;177&quot;&gt;&amp;ldquo;초기화 실패 가능성 있는 생성자&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;179&quot; data-end=&quot;189&quot;&gt;라는 뜻이에요  &lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;191&quot; data-end=&quot;197&quot;&gt;예를 들면:&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;URL(string: &quot;잘못된 주소&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;235&quot; data-end=&quot;267&quot;&gt;는 URL 만들다 실패할 수 있으니까 init? 사용!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;269&quot; data-end=&quot;289&quot;&gt;반대로 절대 실패 안 하는 생성자는:&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;gams&quot;&gt;&lt;code&gt;init(...)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;315&quot; data-end=&quot;326&quot;&gt;처럼 ? 없음 ✅&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;328&quot; data-end=&quot;333&quot;&gt;정리하면:&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;문법의미
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-start=&quot;335&quot; data-end=&quot;452&quot;&gt;
&lt;tbody data-start=&quot;357&quot; data-end=&quot;452&quot;&gt;
&lt;tr data-start=&quot;357&quot; data-end=&quot;381&quot;&gt;
&lt;td data-start=&quot;357&quot; data-end=&quot;368&quot; data-col-size=&quot;sm&quot;&gt;init()&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-start=&quot;368&quot; data-end=&quot;381&quot;&gt;무조건 생성 성공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;382&quot; data-end=&quot;417&quot;&gt;
&lt;td data-start=&quot;382&quot; data-end=&quot;394&quot; data-col-size=&quot;sm&quot;&gt;init?()&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-start=&quot;394&quot; data-end=&quot;417&quot;&gt;실패 가능 (nil 반환 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;418&quot; data-end=&quot;452&quot;&gt;
&lt;td data-start=&quot;418&quot; data-end=&quot;430&quot; data-col-size=&quot;sm&quot;&gt;init!()&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-start=&quot;430&quot; data-end=&quot;452&quot;&gt;실패 가능하지만 강제 언래핑 ⚠️&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;454&quot; data-end=&quot;501&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot;&gt;Swift의 ?는 거의 &amp;ldquo;이거 삐끗하면 nil 된다&amp;rdquo; 경고 스티커 느낌이에요  &lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;454&quot; data-end=&quot;501&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cljNGa/dJMcai4iezg/kiJQhDWkk5QL5mezfhzKj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cljNGa/dJMcai4iezg/kiJQhDWkk5QL5mezfhzKj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cljNGa/dJMcai4iezg/kiJQhDWkk5QL5mezfhzKj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcljNGa%2FdJMcai4iezg%2FkiJQhDWkk5QL5mezfhzKj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;474&quot; height=&quot;223&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;223&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;네트워킹 2단계 : URLSession 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;882&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5btoq/dJMcaa6lehg/3mkawMV5Ko1DWIrAmvnAAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5btoq/dJMcaa6lehg/3mkawMV5Ko1DWIrAmvnAAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5btoq/dJMcaa6lehg/3mkawMV5Ko1DWIrAmvnAAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5btoq%2FdJMcaa6lehg%2F3mkawMV5Ko1DWIrAmvnAAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;882&quot; height=&quot;504&quot; data-origin-width=&quot;882&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/duz93T/dJMcahRTcuA/pmGaW5xca8yrNZKRavwZlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/duz93T/dJMcahRTcuA/pmGaW5xca8yrNZKRavwZlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/duz93T/dJMcahRTcuA/pmGaW5xca8yrNZKRavwZlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fduz93T%2FdJMcahRTcuA%2FpmGaW5xca8yrNZKRavwZlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;791&quot; height=&quot;461&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcazxo/dJMcaa6legX/KKCbzqcaJunnOgppbAY1uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcazxo/dJMcaa6legX/KKCbzqcaJunnOgppbAY1uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcazxo/dJMcaa6legX/KKCbzqcaJunnOgppbAY1uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdcazxo%2FdJMcaa6legX%2FKKCbzqcaJunnOgppbAY1uK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;796&quot; height=&quot;340&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;엔터를 누르면 후엥 클로저로 바뀜&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/siPzn/dJMcaa6legY/kr6yg1kMDrgxUgBGcyjpwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/siPzn/dJMcaa6legY/kr6yg1kMDrgxUgBGcyjpwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/siPzn/dJMcaa6legY/kr6yg1kMDrgxUgBGcyjpwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsiPzn%2FdJMcaa6legY%2Fkr6yg1kMDrgxUgBGcyjpwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;819&quot; height=&quot;190&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AMRxS/dJMcai4ieze/ScGmusS6Mly0stXTpqKuyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AMRxS/dJMcai4ieze/ScGmusS6Mly0stXTpqKuyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AMRxS/dJMcai4ieze/ScGmusS6Mly0stXTpqKuyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAMRxS%2FdJMcai4ieze%2FScGmusS6Mly0stXTpqKuyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;722&quot; height=&quot;164&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;164&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;에러가 있으면 바로 끝내라. (하지만 링크를 넣 것만 해서 오류가 날 수 없음.)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb799F/dJMcai4iezj/AZoONPL0uvfbq802FKasi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb799F/dJMcai4iezj/AZoONPL0uvfbq802FKasi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb799F/dJMcai4iezj/AZoONPL0uvfbq802FKasi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb799F%2FdJMcai4iezj%2FAZoONPL0uvfbq802FKasi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;883&quot; height=&quot;511&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/shrny/dJMcaa6lehi/goYIGJM3bwitkwPelLFTXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/shrny/dJMcaa6lehi/goYIGJM3bwitkwPelLFTXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/shrny/dJMcaa6lehi/goYIGJM3bwitkwPelLFTXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fshrny%2FdJMcaa6lehi%2FgoYIGJM3bwitkwPelLFTXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;870&quot; height=&quot;433&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nb4dw/dJMcaaectyT/k3insPRiEgumQF6A7pB030/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nb4dw/dJMcaaectyT/k3insPRiEgumQF6A7pB030/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nb4dw/dJMcaaectyT/k3insPRiEgumQF6A7pB030/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnb4dw%2FdJMcaaectyT%2Fk3insPRiEgumQF6A7pB030%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;855&quot; height=&quot;509&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;509&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FVqxH/dJMcaaectyV/tr5wcYmKGX3dOavhuuoRw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FVqxH/dJMcaaectyV/tr5wcYmKGX3dOavhuuoRw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FVqxH/dJMcaaectyV/tr5wcYmKGX3dOavhuuoRw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFVqxH%2FdJMcaaectyV%2Ftr5wcYmKGX3dOavhuuoRw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;878&quot; height=&quot;400&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Codable은 JSON 데이터를 Swift 구조체로 자동 변환하려고 써요 ✨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;47&quot; data-end=&quot;77&quot;&gt;지금 주인님이 받은 건 이런 &amp;ldquo;문자 덩어리&amp;rdquo; 상태예요:&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{&quot;movieNm&quot;:&quot;슈퍼 마리오 갤럭시&quot;,&quot;rank&quot;:&quot;1&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;141&quot; data-end=&quot;165&quot;&gt;근데 우리는 이런 식으로 쓰고 싶잖아요  &lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;movieData.boxOfficeResult.dailyBoxOfficeList[0].movieNm&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;249&quot; data-end=&quot;261&quot;&gt;그래서 Swift한테:&lt;/p&gt;
&lt;blockquote style=&quot;font-family: 'Noto Serif KR'; background-color: #000000; color: #333333; text-align: center;&quot; data-ke-style=&quot;style1&quot; data-start=&quot;263&quot; data-end=&quot;289&quot;&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;265&quot; data-end=&quot;289&quot;&gt;&amp;ldquo;이 JSON 모양은 이 구조체랑 연결돼!&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;291&quot; data-end=&quot;316&quot;&gt;라고 알려주는 게 Codable이에요  &lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;318&quot; data-end=&quot;320&quot;&gt;즉:&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;gauss&quot;&gt;&lt;code&gt;struct DailyBoxOfficeList : Codable {
    let movieNm : String
    let rank : String
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;435&quot; data-end=&quot;463&quot;&gt;이렇게 적으면&lt;br /&gt;JSONDecoder가 자동으로:&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;&quot;movieNm&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;501&quot; data-end=&quot;502&quot;&gt;&amp;rarr;&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;movieNm&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;538&quot; data-end=&quot;546&quot;&gt;에 넣어줘요 ✨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;548&quot; data-end=&quot;580&quot;&gt;안 쓰면 직접 하나하나 딕셔너리 까야 돼서 지옥 열림  &lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;json[&quot;boxOfficeResult&quot;][&quot;dailyBoxOfficeList&quot;][0][&quot;movieNm&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;668&quot; data-end=&quot;683&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot;&gt;이런 거 계속 해야 함  &lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;668&quot; data-end=&quot;683&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WSVXy/dJMcaa6lehh/dEFkcwcck4kkUL7TMLt6ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WSVXy/dJMcaa6lehh/dEFkcwcck4kkUL7TMLt6ak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WSVXy/dJMcaa6lehh/dEFkcwcck4kkUL7TMLt6ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWSVXy%2FdJMcaa6lehh%2FdEFkcwcck4kkUL7TMLt6ak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;645&quot; height=&quot;520&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;817&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/evwIot/dJMcai4iezm/LOKenY2RwdRGEWXFlCvjw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/evwIot/dJMcai4iezm/LOKenY2RwdRGEWXFlCvjw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/evwIot/dJMcai4iezm/LOKenY2RwdRGEWXFlCvjw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FevwIot%2FdJMcai4iezm%2FLOKenY2RwdRGEWXFlCvjw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;817&quot; height=&quot;452&quot; data-origin-width=&quot;817&quot; data-origin-height=&quot;452&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vQWFA/dJMcaaectyW/iz7Ao7VKplmto9VZ1vmQk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vQWFA/dJMcaaectyW/iz7Ao7VKplmto9VZ1vmQk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vQWFA/dJMcaaectyW/iz7Ao7VKplmto9VZ1vmQk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvQWFA%2FdJMcaaectyW%2Fiz7Ao7VKplmto9VZ1vmQk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;264&quot; height=&quot;505&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;추가 예정&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1778485086477&quot; class=&quot;bash&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;//
//  ViewController.swift
//  MovieKjh
//
//  Created by Induk-cs  on 2026/05/04.
//

import UIKit

// JSON 전체 구조
struct MovieData : Codable {
    let boxOfficeResult : BoxOfficeResult
}

// boxOfficeResult 안쪽 구조
struct BoxOfficeResult : Codable {
    let dailyBoxOfficeList : [DailyBoxOfficeList]
}

// 영화 한 개 정보 구조
struct DailyBoxOfficeList : Codable {
    let movieNm : String // 영화 제목
    let audiCnt : String // 하루 관객수
    let audiAcc : String // 누적 관객수
    let rank : String // 순위
}

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    @IBOutlet weak var table: UITableView!
    
    // 영화 데이터를 저장할 변수
    var movieData : MovieData?
    
    // API 주소
    var movieURL = &quot;https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=[개인주소]&amp;amp;targetDt=&quot;
    
    // 테이블 셀 개수
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&amp;gt; Int {
        return 10
    }
    
    // 셀 안에 데이터 넣기
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&amp;gt; UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: &quot;myCell&quot;, for: indexPath) as! MyTableViewCell
        
        // API에서 받아온 영화 제목 넣기
        cell.movieName.text = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].movieNm
        
//        print(indexPath.description)
        
        return cell
    }
    
    // 섹션 개수
    func numberOfSections(in tableView: UITableView) -&amp;gt; Int {
        return 1
    }
    
    // 화면 시작 시 실행
    override func viewDidLoad() {
        super.viewDidLoad()
        
        table.delegate = self
        table.dataSource = self
        
        // 어제 날짜를 URL 뒤에 붙임
        movieURL += makeYesterdayString()
        
        // 데이터 가져오기 실행
        getData()
    }
    
    // 어제 날짜 만들기 함수
    func makeYesterdayString() -&amp;gt; String {
        
        // 현재 날짜에서 하루 빼기
        let y = Calendar.current.date(byAdding:.day, value : -1, to : Date())!
        
        // 날짜 포맷 설정
        let dateF = DateFormatter()
        dateF.dateFormat = &quot;yyyyMMdd&quot;
        
        // 날짜 문자열로 변환
        let day = dateF.string(from: y)
        
        return day
    }
    
    // API 데이터 가져오기
    func getData(){
        
        // 네트워크 1단계: 주소 만들기
        guard let url = URL(string: movieURL) else { return }
        
        // 네트워크 2단계: URLSession 만들기
        let session = URLSession(configuration: .default)
        
        // 네트워크 요청 시작
        let task = session.dataTask(with: url) { data, response, error in
            
            // 에러 확인
            if error != nil {
                print(error!)
                return
            }
            
            // 데이터 확인
            guard let JSONData = data else { return }
            
//            print(JSONData)
            
            // 데이터를 문자열로 변환
            _ = String(data:JSONData, encoding: .utf8)
            
//            print(dataString!)
            
            // JSONDecoder 생성
            let decoder = JSONDecoder()
            
            do{
                
                // JSON 데이터를 구조체로 변환
                let decodedData = try decoder.decode(MovieData.self, from: JSONData)
                
                // 첫 번째 영화 정보 출력
                print(decodedData.boxOfficeResult.dailyBoxOfficeList[0].movieNm)
                print(decodedData.boxOfficeResult.dailyBoxOfficeList[0].audiAcc)
                print(decodedData.boxOfficeResult.dailyBoxOfficeList[0].audiCnt)
                
                // 데이터를 변수에 저장
                self.movieData = decodedData
                
                // 메인 쓰레드에서 테이블 새로고침
                DispatchQueue.main.async {
                    self.table.reloadData()
                }
                
            }catch{
                
                // 에러 출력
                print(error)
            }
        }
        
        // 네트워크 실행
        task.resume()
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/loMvu/dJMcaaectyS/xnLmm6KkcR5kNtBiI6o0K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/loMvu/dJMcaaectyS/xnLmm6KkcR5kNtBiI6o0K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/loMvu/dJMcaaectyS/xnLmm6KkcR5kNtBiI6o0K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FloMvu%2FdJMcaaectyS%2FxnLmm6KkcR5kNtBiI6o0K0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;345&quot; height=&quot;748&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2026년도 1학기/iOS프로그래밍</category>
      <author>멈뭉밈</author>
      <guid isPermaLink="true">https://dupal-homework.tistory.com/147</guid>
      <comments>https://dupal-homework.tistory.com/147#entry147comment</comments>
      <pubDate>Mon, 11 May 2026 16:40:25 +0900</pubDate>
    </item>
    <item>
      <title>iOS프로그래밍_9주차_Open API 기반iOS앱 개발(1)RESTful/JSON/Open API</title>
      <link>https://dupal-homework.tistory.com/145</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777872480408&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;영화진흥위원회 오픈API&quot; data-og-description=&quot;OPEN API 서비스 영화진흥위원회 영화관입장권통합전산망에서 제공하는 오픈API 서비스로 더욱 풍요롭고 편안한 영화 서비스를 즐겨보세요.&quot; data-og-host=&quot;www.kobis.or.kr&quot; data-og-source-url=&quot;https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do&quot; data-og-url=&quot;https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;영화진흥위원회 오픈API&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;OPEN API 서비스 영화진흥위원회 영화관입장권통합전산망에서 제공하는 오픈API 서비스로 더욱 풍요롭고 편안한 영화 서비스를 즐겨보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.kobis.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키를 만들고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=36209978a1ca825ed365969b126bfc15&amp;amp;targetDt=20260503&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=자신의키targetDt=20260503&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sb0Wv/dJMcaakRppM/dX4K2ke5Y05IrIVZMur9hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sb0Wv/dJMcaakRppM/dX4K2ke5Y05IrIVZMur9hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sb0Wv/dJMcaakRppM/dX4K2ke5Y05IrIVZMur9hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsb0Wv%2FdJMcaakRppM%2FdX4K2ke5Y05IrIVZMur9hk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;796&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 뜸&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zow7e/dJMcaiiSZtK/9zqWbkVxNesBYWTzCJtJn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zow7e/dJMcaiiSZtK/9zqWbkVxNesBYWTzCJtJn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zow7e/dJMcaiiSZtK/9zqWbkVxNesBYWTzCJtJn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzow7e%2FdJMcaiiSZtK%2F9zqWbkVxNesBYWTzCJtJn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;662&quot; height=&quot;614&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 순위와 같다&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://codebeautify.org/jsonviewer&quot;&gt;https://codebeautify.org/jsonviewer&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777872444977&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/x8FVM/dJMb87gadcb/NRLZbE8J0uQznGYCmPUMj1/img.png?width=1329&amp;amp;height=553&amp;amp;face=870_353_948_438,https://scrap.kakaocdn.net/dn/IKl60/dJMb88e4oOU/ZTYkn0WV0tOuADK0x0zKp1/img.png?width=1329&amp;amp;height=553&amp;amp;face=870_353_948_438&quot; data-og-url=&quot;https://codebeautify.org/jsonviewer&quot; data-og-source-url=&quot;https://codebeautify.org/jsonviewer&quot; data-og-host=&quot;codebeautify.org&quot; data-og-description=&quot;Online JSON Viewer, JSON Beautifier and Formatter to beautify and tree view of JSON data - It works as JSON Pretty Print to pretty print JSON data.&quot; data-og-title=&quot;Best JSON Viewer and JSON Beautifier Online&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://codebeautify.org/jsonviewer&quot; data-source-url=&quot;https://codebeautify.org/jsonviewer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Best JSON Viewer and JSON Beautifier Online&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Online JSON Viewer, JSON Beautifier and Formatter to beautify and tree view of JSON data - It works as JSON Pretty Print to pretty print JSON data.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;codebeautify.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;json 데이터를 간편하게 확인할 수 있게 해주는 사이트&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.24.20.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;829&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z5Knj/dJMcag6sqop/8qj1kDRbzdZIKkAgADEvH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z5Knj/dJMcag6sqop/8qj1kDRbzdZIKkAgADEvH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z5Knj/dJMcag6sqop/8qj1kDRbzdZIKkAgADEvH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ5Knj%2FdJMcag6sqop%2F8qj1kDRbzdZIKkAgADEvH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1046&quot; height=&quot;829&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.24.20.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;829&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1777872372746&quot; class=&quot;clojure&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;{
  &quot;boxOfficeResult&quot;: {
    &quot;boxofficeType&quot;: &quot;일별 박스오피스&quot;,
    &quot;showRange&quot;: &quot;20260427~20260427&quot;,
    &quot;dailyBoxOfficeList&quot;: [
      {
        &quot;rnum&quot;: &quot;1&quot;,
        &quot;rank&quot;: &quot;1&quot;,
        &quot;rankInten&quot;: &quot;0&quot;,
        &quot;rankOldAndNew&quot;: &quot;OLD&quot;,
        &quot;movieCd&quot;: &quot;20254121&quot;,
        &quot;movieNm&quot;: &quot;살목지&quot;,
        &quot;openDt&quot;: &quot;2026-04-08&quot;,
        &quot;salesAmt&quot;: &quot;432784450&quot;,
        &quot;salesShare&quot;: &quot;38.6&quot;,
        &quot;salesInten&quot;: &quot;-700312300&quot;,
        &quot;salesChange&quot;: &quot;-61.8&quot;,
        &quot;salesAcc&quot;: &quot;20954778170&quot;,
        &quot;audiCnt&quot;: &quot;41902&quot;,
        &quot;audiInten&quot;: &quot;-67177&quot;,
        &quot;audiChange&quot;: &quot;-61.6&quot;,
        &quot;audiAcc&quot;: &quot;2025660&quot;,
        &quot;scrnCnt&quot;: &quot;1114&quot;,
        &quot;showCnt&quot;: &quot;4129&quot;
      },
      {
      
      ...
      
      }
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위와 같은 json 데이터의 데이터 모델을 swift 로 만들면 아래와 같다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1777872372748&quot; class=&quot;typescript&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;import Foundation

// 최상위 응답
struct BoxOfficeResponse: Codable {
    let boxOfficeResult: BoxOfficeResult
}

// boxOfficeResult
struct BoxOfficeResult: Codable {
    let boxofficeType: String
    let showRange: String
    let dailyBoxOfficeList: [DailyBoxOffice]

    enum CodingKeys: String, CodingKey {
        case boxofficeType
        case showRange
        case dailyBoxOfficeList
    }
}

// dailyBoxOfficeList 내부 객체
struct DailyBoxOffice: Codable {
    let rnum: String
    let rank: String
    let rankInten: String
    let rankOldAndNew: String
    let movieCd: String
    let movieNm: String
    let openDt: String
    let salesAmt: String
    let salesShare: String
    let salesInten: String
    let salesChange: String
    let salesAcc: String
    let audiCnt: String
    let audiInten: String
    let audiChange: String
    let audiAcc: String
    let scrnCnt: String
    let showCnt: String

    enum CodingKeys: String, CodingKey {
        case rnum
        case rank
        case rankInten
        case rankOldAndNew
        case movieCd
        case movieNm
        case openDt
        case salesAmt
        case salesShare
        case salesInten
        case salesChange
        case salesAcc
        case audiCnt
        case audiInten
        case audiChange
        case audiAcc
        case scrnCnt
        case showCnt
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f3c000; color: #000000;&quot;&gt;&lt;b&gt;URI vs URL&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.33.06.png&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;483&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OHSZm/dJMcadPmOyO/fEaTmYLmVDR3CFgknbKTOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OHSZm/dJMcadPmOyO/fEaTmYLmVDR3CFgknbKTOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OHSZm/dJMcadPmOyO/fEaTmYLmVDR3CFgknbKTOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOHSZm%2FdJMcadPmOyO%2FfEaTmYLmVDR3CFgknbKTOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;770&quot; height=&quot;483&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.33.06.png&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;483&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;uri 와 url 차이&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/FhCF8/dJMcadPiGr0/AAAAAAAAAAAAAAAAAAAAAEPuOrFEP47talKDeuylTTSwpN_bIwdR4msDJ5qJdYYm/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=QlvPmO2wtgpJ9RhgRc4sivYcglA%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/FhCF8/dJMcadPiGr0/AAAAAAAAAAAAAAAAAAAAAEPuOrFEP47talKDeuylTTSwpN_bIwdR4msDJ5qJdYYm/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=QlvPmO2wtgpJ9RhgRc4sivYcglA%3D&quot;&gt;&lt;/span&gt;uri 와 url 차이&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;RESTful&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.35.59.png&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k4cr2/dJMcadBOcnE/ZLCfBixgMJ64F3jTiaPttk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k4cr2/dJMcadBOcnE/ZLCfBixgMJ64F3jTiaPttk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k4cr2/dJMcadBOcnE/ZLCfBixgMJ64F3jTiaPttk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk4cr2%2FdJMcadBOcnE%2FZLCfBixgMJ64F3jTiaPttk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;894&quot; height=&quot;520&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.35.59.png&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;RESTful하다는 것은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;URL은 자원(데이터)을 나타내고, HTTP 메서드(GET, POST, PUT, DELETE 등)로 그 자원에 대한 행동을 표현하는 방식&lt;/b&gt;이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;!~JSON 데이터 구조 2가지 : 객체, 배열~!&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.42.32.png&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yScTs/dJMcadu3Ekz/vs1s6aKyOcGLltwwQgOKJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yScTs/dJMcadu3Ekz/vs1s6aKyOcGLltwwQgOKJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yScTs/dJMcadu3Ekz/vs1s6aKyOcGLltwwQgOKJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyScTs%2FdJMcadu3Ekz%2Fvs1s6aKyOcGLltwwQgOKJ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;723&quot; height=&quot;444&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.42.32.png&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;444&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;JSON의 데이터 구조 두가지 : 객체, 배열&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/MXjqy/dJMcahRJ8ps/AAAAAAAAAAAAAAAAAAAAAJYnMYzEjsEcvEJ3H4YxvnDekTHGb5XtOZZx_e43_uce/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=nwI4i5gZG%2BHb312s%2B2FWMdny%2BsE%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/MXjqy/dJMcahRJ8ps/AAAAAAAAAAAAAAAAAAAAAJYnMYzEjsEcvEJ3H4YxvnDekTHGb5XtOZZx_e43_uce/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=nwI4i5gZG%2BHb312s%2B2FWMdny%2BsE%3D&quot;&gt;&lt;/span&gt;JSON의 데이터 구조 두가지 : 객체, 배열&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.48.54.png&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTQWjt/dJMcadPmOyR/lEieoMgySKHlAqg2lIVUyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTQWjt/dJMcadPmOyR/lEieoMgySKHlAqg2lIVUyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTQWjt/dJMcadPmOyR/lEieoMgySKHlAqg2lIVUyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTQWjt%2FdJMcadPmOyR%2FlEieoMgySKHlAqg2lIVUyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;915&quot; height=&quot;458&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.48.54.png&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;458&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;원하는 데이터만 데이터모델로 만들기&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/bveASS/dJMcadaGYtg/AAAAAAAAAAAAAAAAAAAAAD9MKGgReR6bswRRd3lWOqYPNYHri5qoFJFgEPZTYwyP/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=q9Yj0ASQz4qJOpOLFdyBagEDRI4%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/bveASS/dJMcadaGYtg/AAAAAAAAAAAAAAAAAAAAAD9MKGgReR6bswRRd3lWOqYPNYHri5qoFJFgEPZTYwyP/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=q9Yj0ASQz4qJOpOLFdyBagEDRI4%3D&quot;&gt;&lt;/span&gt;원하는 데이터만 데이터모델로 만들기&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.49.27.png&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpjgPR/dJMcadu3EkD/frDWUya2oY1jtWxlDbNU2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpjgPR/dJMcadu3EkD/frDWUya2oY1jtWxlDbNU2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpjgPR/dJMcadu3EkD/frDWUya2oY1jtWxlDbNU2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpjgPR%2FdJMcadu3EkD%2FfrDWUya2oY1jtWxlDbNU2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;785&quot; height=&quot;487&quot; data-filename=&quot;스크린샷 2026-04-28 오후 2.49.27.png&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #1f2328; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;td&gt;인증&lt;/td&gt;
&lt;td&gt;HTTPS&lt;/td&gt;
&lt;td&gt;CORS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #f6f8fa;&quot;&gt;
&lt;td&gt;&lt;a style=&quot;color: #0969da;&quot; href=&quot;https://www.cloudmersive.com/image-recognition-and-processing-api&quot;&gt;Cloudmersive&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;이미지 캡션, 얼굴 인식, NSFW 분류&lt;/td&gt;
&lt;td&gt;apiKey&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a style=&quot;background-color: #ffffff; color: #0969da; text-align: start;&quot; href=&quot;https://discordapp.com/developers/docs/intro&quot;&gt;Discord&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot;&gt;Discord용 봇를 만들고 Discord를 외부 플랫폼에 통합합니다.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot;&gt;OAuth&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;공공 데이터 활용 사례 모음&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.data.go.kr/tcs/puc/selectPublicUseCaseListView.do&quot;&gt;https://www.data.go.kr/tcs/puc/selectPublicUseCaseListView.do&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777872372754&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/EhJV4/dJMb8U8WCOK/AAAAAAAAAAAAAAAAAAAAAO29U-_szJz_SIOKNt53i7M_dl0wHLbxq1aQnvu3MU0U/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=jm5PZ9U9mIQotmtXtShFVl9VcEM%3D&quot; data-og-url=&quot;https://www.data.go.kr/tcs/puc/selectPublicUseCaseListView.do&quot; data-og-source-url=&quot;https://www.data.go.kr/tcs/puc/selectPublicUseCaseListView.do&quot; data-og-host=&quot;www.data.go.kr&quot; data-og-description=&quot;국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유&amp;bull;활용할 수 있도록 공공데이터(Datase&quot; data-og-title=&quot;공공데이터 포털&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.data.go.kr/tcs/puc/selectPublicUseCaseListView.do&quot; data-source-url=&quot;https://www.data.go.kr/tcs/puc/selectPublicUseCaseListView.do&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;공공데이터 포털&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유&amp;bull;활용할 수 있도록 공공데이터(Datase&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;www.data.go.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;제미나이 api 키&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ai.google.dev/gemini-api/docs/api-key?hl=ko&quot;&gt;https://ai.google.dev/gemini-api/docs/api-key?hl=ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777872372754&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/bpgPLu/dJMb81G0nvG/AAAAAAAAAAAAAAAAAAAAAOdCEhKHCTjCcmNT-xT39H6hy6nHSDL67d3eYHZHk3IB/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=xpQ5j0WB3c5VHWhysP4yDBkz8G0%3D&quot; data-og-url=&quot;https://ai.google.dev/gemini-api/docs/api-key?hl=ko&quot; data-og-source-url=&quot;https://ai.google.dev/gemini-api/docs/api-key?hl=ko&quot; data-og-host=&quot;ai.google.dev&quot; data-og-description=&quot;Gemini API 키를 가져와 5분 이내에 빌드를 시작하세요.&quot; data-og-title=&quot;Gemini API 키 사용 &amp;nbsp;|&amp;nbsp; Google AI for Developers&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://ai.google.dev/gemini-api/docs/api-key?hl=ko&quot; data-source-url=&quot;https://ai.google.dev/gemini-api/docs/api-key?hl=ko&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Gemini API 키 사용 &amp;nbsp;|&amp;nbsp; Google AI for Developers&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Gemini API 키를 가져와 5분 이내에 빌드를 시작하세요.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;ai.google.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;실습&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;constraints 를 추가해서 table view가 화면에 꽉 차도록 설정한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 사진을 보면 네 개의 constraints 가 추가된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 3.26.19.png&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HDIfL/dJMcadu3Eku/rXhAJmAGIpK6YBM7AV0TX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HDIfL/dJMcadu3Eku/rXhAJmAGIpK6YBM7AV0TX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HDIfL/dJMcadu3Eku/rXhAJmAGIpK6YBM7AV0TX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHDIfL%2FdJMcadu3Eku%2FrXhAJmAGIpK6YBM7AV0TX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;777&quot; height=&quot;709&quot; data-filename=&quot;스크린샷 2026-04-28 오후 3.26.19.png&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;709&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1777872372755&quot; class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;func numberOfSections(in tableView: UITableView) -&amp;gt; Int {
        return 2
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;UITableViewDataSource 채택했을 때,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;필수 메서드는 아니지만 section 을 지정하려면 사용해야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기본적으로 1 이 되어 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 3.43.11.png&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ED6uM/dJMcadBOcng/H84I7fdKpuJ5k27m9CnkkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ED6uM/dJMcadBOcng/H84I7fdKpuJ5k27m9CnkkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ED6uM/dJMcadBOcng/H84I7fdKpuJ5k27m9CnkkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FED6uM%2FdJMcadBOcng%2FH84I7fdKpuJ5k27m9CnkkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;716&quot; height=&quot;316&quot; data-filename=&quot;스크린샷 2026-04-28 오후 3.43.11.png&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;필수 메서드 X&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/bh2x2g/dJMb99TIKoc/AAAAAAAAAAAAAAAAAAAAANNUJdG5RVGhd12yPGmqhMdmdKA5bBs0UX6s3GeA_DuI/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=gsUhdCErUCwecnH%2Be%2B4DfFoAvnM%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/bh2x2g/dJMb99TIKoc/AAAAAAAAAAAAAAAAAAAAANNUJdG5RVGhd12yPGmqhMdmdKA5bBs0UX6s3GeA_DuI/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=gsUhdCErUCwecnH%2Be%2B4DfFoAvnM%3D&quot;&gt;&lt;/span&gt;필수 메서드 X&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;프로토콜에 있는 메서드의 앞에 optional 이 있으면 필수 메서드가 아니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 3.44.50.png&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;483&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciyIDm/dJMcadBOcne/VtLqRkwif8vgPo9YTKkyhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciyIDm/dJMcadBOcne/VtLqRkwif8vgPo9YTKkyhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciyIDm/dJMcadBOcne/VtLqRkwif8vgPo9YTKkyhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciyIDm%2FdJMcadBOcne%2FVtLqRkwif8vgPo9YTKkyhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;726&quot; height=&quot;483&quot; data-filename=&quot;스크린샷 2026-04-28 오후 3.44.50.png&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;483&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;필수 메서드 O&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/dq5MVy/dJMcaipBJQo/AAAAAAAAAAAAAAAAAAAAAG65pWKMM6A6ihONuAFZE76R3L8h_wKcULmpIvccXwZt/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=1xFSJu7gQqun3BZqliASmkLgBDI%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/dq5MVy/dJMcaipBJQo/AAAAAAAAAAAAAAAAAAAAAG65pWKMM6A6ihONuAFZE76R3L8h_wKcULmpIvccXwZt/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=1xFSJu7gQqun3BZqliASmkLgBDI%3D&quot;&gt;&lt;/span&gt;필수 메서드 O&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;위처럼 optional 이 없고 밑에 Required 가 있으면 프로토콜을 채택하면 반드시 구현해야 하는 필수 메서드이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 3.49.50.png&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;744&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uFG4K/dJMcadPmOyE/wxNphKKiryKPFfaOO3Qkd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uFG4K/dJMcadPmOyE/wxNphKKiryKPFfaOO3Qkd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uFG4K/dJMcadPmOyE/wxNphKKiryKPFfaOO3Qkd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuFG4K%2FdJMcadPmOyE%2FwxNphKKiryKPFfaOO3Qkd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;846&quot; height=&quot;744&quot; data-filename=&quot;스크린샷 2026-04-28 오후 3.49.50.png&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;744&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;identifier&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/NcbHS/dJMcacbQHjm/AAAAAAAAAAAAAAAAAAAAAJ7cQiecv_okdMCftlp77A5kbYgKlw1Oul1IZOdYRlQA/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=r%2FOMUKE2qgxkw%2BQ0fVYE1X5d79Y%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/NcbHS/dJMcacbQHjm/AAAAAAAAAAAAAAAAAAAAAJ7cQiecv_okdMCftlp77A5kbYgKlw1Oul1IZOdYRlQA/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=r%2FOMUKE2qgxkw%2BQ0fVYE1X5d79Y%3D&quot;&gt;&lt;/span&gt;identifier&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;처음 TableViewCell을 만들면 identifier가 비어 있는 것을 알 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;입력하면 자동으로 myCell 이라고 변경된 것을 알 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 3.51.08.png&quot; data-origin-width=&quot;217&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oe6MQ/dJMcadBOcnk/DK9uQYGvEw0Ix4FBMFFKn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oe6MQ/dJMcadBOcnk/DK9uQYGvEw0Ix4FBMFFKn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oe6MQ/dJMcadBOcnk/DK9uQYGvEw0Ix4FBMFFKn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foe6MQ%2FdJMcadBOcnk%2FDK9uQYGvEw0Ix4FBMFFKn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;217&quot; height=&quot;191&quot; data-filename=&quot;스크린샷 2026-04-28 오후 3.51.08.png&quot; data-origin-width=&quot;217&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;아래 시험 문제 나옴&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 4.19.13.png&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boqHO6/dJMcadu3Ekx/Yi3WCGScYckAqOtGdZrkrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boqHO6/dJMcadu3Ekx/Yi3WCGScYckAqOtGdZrkrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boqHO6/dJMcadu3Ekx/Yi3WCGScYckAqOtGdZrkrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboqHO6%2FdJMcadu3Ekx%2FYi3WCGScYckAqOtGdZrkrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;796&quot; height=&quot;247&quot; data-filename=&quot;스크린샷 2026-04-28 오후 4.19.13.png&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;247&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;다운캐스팅 하기 전&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/cPkeuA/dJMcaciCJt0/AAAAAAAAAAAAAAAAAAAAAMNqddjzzUPKBCUXEwjrkEwe0wnA7Nj2EWyNYjDL9AKL/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=kEGmXLpsvlgakOzW6V%2B5kCLDwPI%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/cPkeuA/dJMcaciCJt0/AAAAAAAAAAAAAAAAAAAAAMNqddjzzUPKBCUXEwjrkEwe0wnA7Nj2EWyNYjDL9AKL/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=kEGmXLpsvlgakOzW6V%2B5kCLDwPI%3D&quot;&gt;&lt;/span&gt;다운캐스팅 하기 전&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-28 오후 4.20.28.png&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ch5GmB/dJMcadu3Ekv/5GFi1a5gO4TcHNjGbkTad1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ch5GmB/dJMcadu3Ekv/5GFi1a5gO4TcHNjGbkTad1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch5GmB/dJMcadu3Ekv/5GFi1a5gO4TcHNjGbkTad1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fch5GmB%2FdJMcadu3Ekv%2F5GFi1a5gO4TcHNjGbkTad1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;885&quot; height=&quot;228&quot; data-filename=&quot;스크린샷 2026-04-28 오후 4.20.28.png&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;다운캐스팅 한 후&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/bMEh4E/dJMcafzE1AY/AAAAAAAAAAAAAAAAAAAAANZmH9d4ZJDyoedJGjlIs-TT9XYLsdguKpRrVhAxGQoT/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=sD%2BcjEul0g955949fT6ihJSYILA%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/bMEh4E/dJMcafzE1AY/AAAAAAAAAAAAAAAAAAAAANZmH9d4ZJDyoedJGjlIs-TT9XYLsdguKpRrVhAxGQoT/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=sD%2BcjEul0g955949fT6ihJSYILA%3D&quot;&gt;&lt;/span&gt;다운캐스팅 한 후&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 처럼 다운캐스팅을 해야 myTableViewCell 형으로 바뀐다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;완성본&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkCND1/dJMcadBOm2l/xNwhkOw1sVJIxj9V17IiMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkCND1/dJMcadBOm2l/xNwhkOw1sVJIxj9V17IiMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkCND1/dJMcadBOm2l/xNwhkOw1sVJIxj9V17IiMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkCND1%2FdJMcadBOm2l%2FxNwhkOw1sVJIxj9V17IiMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;344&quot; height=&quot;728&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;728&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/b8PYat/dJMcajhLOnv/3LtKjMzexsBrtJN2KmYRI0/MovieKjh.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;MovieKjh.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.04MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2026년도 1학기/iOS프로그래밍</category>
      <author>멈뭉밈</author>
      <guid isPermaLink="true">https://dupal-homework.tistory.com/145</guid>
      <comments>https://dupal-homework.tistory.com/145#entry145comment</comments>
      <pubDate>Mon, 4 May 2026 15:58:11 +0900</pubDate>
    </item>
    <item>
      <title>iOS프로그래밍_7주차_열거형(enum), 구조체(struct)클래스vs.구조체vs. 열거형</title>
      <link>https://dupal-homework.tistory.com/141</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(시험에 나옴) .을 찍어서 접근하는게 열거형의 접근 방식이다 (.찍어서 접근하면 열거형 쓰는거다)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOwMRF/dJMcageacJ0/LZxbxJydyNzNRQC00fF6h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOwMRF/dJMcageacJ0/LZxbxJydyNzNRQC00fF6h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOwMRF/dJMcageacJ0/LZxbxJydyNzNRQC00fF6h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOwMRF%2FdJMcageacJ0%2FLZxbxJydyNzNRQC00fF6h0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;363&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;363&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;대표적으로 enum(열거형)을 지원하는 주요 언어들을 카테고리별로 정리&lt;/b&gt;&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;1. 정적 타입 언어 (클래식 enum 지원)&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우리가 흔히 아는 &amp;ldquo;진짜 enum&amp;rdquo; 느낌&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;C&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;C++&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Java&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;C#&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Kotlin&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Swift&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Go (iota 기반 enum 패턴)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Rust&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;D&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Zig&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;2. 함수형 / 현대 언어 (강력한 enum or ADT)&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;단순 enum보다 더 강력 (패턴 매칭 가능)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Scala&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Haskell&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;OCaml&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;F#&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Elm&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이쪽은 enum이라기보다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&amp;ldquo;Algebraic Data Type (ADT)&amp;rdquo;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;형태&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;3. 스크립트 / 동적 언어 (유사 enum 또는 공식 지원)&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예전엔 없었는데 요즘 많이 생김&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Python (Enum 클래스)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;TypeScript&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;JavaScript (객체로 흉내)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;PHP (8.1부터 enum)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Ruby (심볼/enum gem)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Lua (테이블로 구현)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;4. 시스템 / 저수준 / 특수 언어&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;임베디드, 성능 중심&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Ada&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Nim&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Crystal&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;V&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;5. 데이터/쿼리 언어 (의외로 있음)&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;SQL (ENUM 타입 &amp;ndash; MySQL 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;핵심 정리 (중요)&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;enum은 사실&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;거의 모든 &amp;ldquo;현대 언어&amp;rdquo;가 지원&lt;/b&gt;한다고 보면 됨&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;다만 형태가 다름:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;C/Java &amp;rarr; 단순 값 집합&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Rust/Swift &amp;rarr; 강력한 타입 시스템&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;JS/Python &amp;rarr; 객체 기반 흉내 or 클래스&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt; 한 줄 정리&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;enum 없는 언어가 더 드물다&amp;rdquo; 수준이라고 보면 됨&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776663107312&quot; class=&quot;crystal&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;enum Compass {
    case North
    case South
    case East
    case West
}
//var x : Compass // Compass형 인스턴스 x
print(Compass.North) // North
var x = Compass.West
print(type(of:x)) // Compass
x = .East //Compass.East 와 같음
print(x) // East&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;열거형 변수는 한 번 정의한 다음에는 이름을 쓰지 않아도 된다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;.East 는 Compass가 생략된 것이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이미 정의를 해둬서 컴파일러가 알고 있기 때문에 생략할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776663107314&quot; class=&quot;groovy&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;enum Compass {
    case North
    case South
    case East
    case West
}
var direction : Compass
direction = .South
switch direction { //switch의 비교값이 열거형 Compass
case .North: //direction이 .North이면 &quot;북&quot; 출력
    print(&quot;북&quot;)
case .South:
    print(&quot;남&quot;)
case .East:
    print(&quot;동&quot;)
case .West:
    print(&quot;서&quot;) //모든 열거형 case를 포함하면 default 없어도 됨
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위와 같이 switch 문에서도 사용할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 오후 2.20.10.png&quot; data-origin-width=&quot;262&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y5el5/dJMcad2KeaO/hWXa4hU8s68Xzw5xlGUVC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y5el5/dJMcad2KeaO/hWXa4hU8s68Xzw5xlGUVC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y5el5/dJMcad2KeaO/hWXa4hU8s68Xzw5xlGUVC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy5el5%2FdJMcad2KeaO%2FhWXa4hU8s68Xzw5xlGUVC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;262&quot; height=&quot;272&quot; data-filename=&quot;스크린샷 2026-04-14 오후 2.20.10.png&quot; data-origin-width=&quot;262&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;열거형에 멤버에 접근할 때는 .을 찍으면 자동으로 나온다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776663107315&quot; class=&quot;crystal&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;enum Week {
    case Mon,Tue,Wed,Thur,Fri,Sat,Sun
    func printWeek() { //메서드도 가능
        switch self {
        case .Mon, .Tue, .Wed, .Thur, .Fri:
            print(&quot;주중&quot;)
        case .Sat, .Sun:
            print(&quot;주말&quot;)
        }
    }
}
Week.Sun.printWeek()&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이런식으로 메서드도 열거형에서 만들 수 있음&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776663107316&quot; class=&quot;processing&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;enum Color: Int { //원시값(rawValue) 지정
    case red
    case green = 2
    case blue
}
print(Color.red) //red
print(Color.blue)
print(Color.green)
print(Color.red.rawValue) //0
print(Color.blue.rawValue)
print(Color.green.rawValue)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;red&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;blue&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;green&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;3&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776663107317&quot; class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;enum Week: String {
    case Monday = &quot;월&quot;
    case Tuesday = &quot;화&quot;
    case Wednesday = &quot;수&quot;
    case Thursday = &quot;목&quot;
    case Friday = &quot;금&quot;
    case Saturday //값이 지정되지 않으면 case 이름이 할당됨
    case Sunday // = &quot;Sunday&quot;
}
print(Week.Monday) //Monday
print(Week.Monday.rawValue) //월
print(Week.Sunday)
print(Week.Saturday)
print(Week.Sunday.rawValue)
print(Week.Saturday.rawValue)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;Monday&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;월&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;Sunday&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;Saturday&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;Sunday&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;Saturday&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776663107318&quot; class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;enum Date {
    case intDate(Int,Int,Int) //(int,Int,Int)형 연관값을 갖는 intDate
    case stringDate(String) //String형 연관값을 값는 stringDate
}
var todayDate = Date.intDate(2025,4,30)
//todayDate = Date.stringDate(&quot;2025년 5월 20일&quot;) //주석처리하면?
switch todayDate {
case .intDate(let year, let month, let day):
    print(&quot;\(year)년 \(month)월 \(day)일&quot;)
case .stringDate(let date):
    print(date)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;2025&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;년&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;월&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;30&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;일&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;pre class=&quot;crystal&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;public enum Optional&amp;lt;Wrapped&amp;gt; {
    case none
    case some(Wrapped)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  이건 바로&lt;br /&gt;&lt;b&gt;Swift에서 Optional의 실제 내부 구조&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  쉽게 말하면&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우리가 평소에 쓰는 이거:&lt;/p&gt;
&lt;pre class=&quot;dart&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var name: String? = &quot;홍길동&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사실은 이렇게 생김:&lt;/p&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var name: Optional&amp;lt;String&amp;gt; = .some(&quot;홍길동&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre class=&quot;delphi&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var name: Optional&amp;lt;String&amp;gt; = .none
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  구조 해석&lt;/h2&gt;
&lt;pre class=&quot;xml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Optional&amp;lt;Wrapped&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Wrapped = 실제 값 타입 (예: String, Int)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;즉 &amp;rarr; &amp;ldquo;값을 감싸는 타입&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;enum case 두 개 의미&lt;/h3&gt;
&lt;pre class=&quot;fortran&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;case none
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;값 없음 (nil)&lt;/p&gt;
&lt;pre class=&quot;ada&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;case some(Wrapped)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;값 있음 (실제 값 저장)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  실제 동작 예&lt;/h2&gt;
&lt;pre class=&quot;excel&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var num: Int? = 10
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내부적으로는:&lt;/p&gt;
&lt;pre class=&quot;excel&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var num: Optional&amp;lt;Int&amp;gt; = .some(10)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;pre class=&quot;excel&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var num: Int? = nil
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내부적으로는:&lt;/p&gt;
&lt;pre class=&quot;excel&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var num: Optional&amp;lt;Int&amp;gt; = .none
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;왜 enum으로 만들었냐?&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;값이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;있냐 / 없냐를 안전하게 구분하려고&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;C나 Java처럼 하면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;null 때문에 터짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Swift는:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;.some(value)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;.none&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;두 경우를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;강제로 구분하게 만듦&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;그래서 switch가 가능&lt;/h2&gt;
&lt;pre class=&quot;ceylon&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;if let value = num {
    print(value)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이건 사실 내부적으로:&lt;/p&gt;
&lt;pre class=&quot;ceylon&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;switch num {
case .some(let value):
    print(value)
case .none:
    break
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이거랑 똑같은 구조야&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  핵심 요약&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Optional은 특별한 문법이 아니라&lt;br /&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;그냥 enum이다&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;값이 있으면 .some(value)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;없으면 .none&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;?는 Optional의 축약 문법&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  한 줄로 정리&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  Optional = 값이 있을 수도 있고 없을 수도 있는 enum&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;전체 코드 다시 보기&lt;/h2&gt;
&lt;pre class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let age: Int? = 30 // Optional(30)

switch age {
case .none:
    print(&quot;나이 정보가 없습니다.&quot;)

case .some(let a) where a &amp;lt; 20:
    print(&quot;\(a)살 미성년자입니다&quot;)

case .some(let a) where a &amp;lt; 71:
    print(&quot;\(a)살 성인입니다&quot;)

default:
    print(&quot;경로우대입니다&quot;)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;1. age의 실제 모습&lt;/h1&gt;
&lt;pre class=&quot;clean&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let age: Int? = 30
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이건 내부적으로:&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Optional.some(30)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;값 있음 &amp;rarr; .some(30)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;값 없음 &amp;rarr; .none&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;2. switch는 어떻게 동작하냐&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;핵심:&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위에서부터 순서대로 &amp;ldquo;조건이 맞는 case 하나만 실행&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;3. 하나씩 매칭 과정&lt;/h1&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;① 첫 번째&lt;/h3&gt;
&lt;pre class=&quot;fortran&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;case .none:
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;age는 .some(30)이라서 ❌ (nil 아님)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;② 두 번째&lt;/h3&gt;
&lt;pre class=&quot;xquery&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;case .some(let a) where a &amp;lt; 20:
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;.some(30) &amp;rarr; a = 30&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;조건: 30 &amp;lt; 20 ❌&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이것도 실패&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;③ 세 번째&lt;/h3&gt;
&lt;pre class=&quot;xquery&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;case .some(let a) where a &amp;lt; 71:
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;.some(30) &amp;rarr; a = 30&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;조건: 30 &amp;lt; 71&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 처음으로 조건이 맞음 &amp;rarr; 실행됨&lt;/p&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;print(&quot;30살 성인입니다&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 switch 끝남 (아래 안 내려감)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;④ default는?&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이미 위에서 매칭됐기 때문에 실행 안 됨&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;핵심 포인트 3개&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1&amp;nbsp; &amp;nbsp; .some(let a) 의미&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Optional에서 값 꺼내는 것&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;.some(30) &amp;rarr; a = 30
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2&amp;nbsp; &amp;nbsp; where의 역할&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추가 조건 필터&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;xquery&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;case .some(let a) where a &amp;lt; 20
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;=&lt;br /&gt;&amp;ldquo;값이 있고, 그 값이 20 미만이면&amp;rdquo;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;switch는 하나만 실행됨&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;조건 맞는 첫 번째 case에서 끝&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;흐름 한 줄 요약&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;.some(30) &amp;rarr;&lt;br /&gt;&amp;rarr; .none ❌&lt;br /&gt;&amp;rarr; &amp;lt;20 ❌&lt;br /&gt;&amp;rarr; &amp;lt;71 ✅&amp;rarr; 실행 &amp;rarr; 끝&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;결과&lt;/h1&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;30살 성인입니다
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;진짜 중요한 이해&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 코드는 사실 이렇게 생각하면 쉽다:&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;if age == nil {
    ...
} else if age &amp;lt; 20 {
    ...
} else if age &amp;lt; 71 {
    ...
} else {
    ...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;근데 Swift는 Optional이라서&lt;br /&gt;&lt;b&gt;.some, .none으로 나눠서 처리하는 것&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;구조체&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무/학습에서 자주 쓰이는 struct 지원 언어들&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;1. 전통적인 struct (C 계열 핵심)&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;구조체&amp;rdquo;의 기본 개념&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;C&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;C++&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Objective-C&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;필드(데이터) 묶는 용도&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;C는 메서드 없음, C++은 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;2. 현대 언어 (값 타입 struct 중요)&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;요즘 개발에서 많이 쓰는 형태&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Swift&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Go&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Rust&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Kotlin (data class가 사실상 struct 역할)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;D&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Zig&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;값 타입 (복사됨)&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;메서드 가능&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;불변성/안정성 강조&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;3. .NET / 시스템 언어&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;C# (struct 키워드 존재)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;값 타입&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;클래스와 구분됨 (stack vs heap 개념)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;4. 시스템/성능 중심 언어&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Nim&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Crystal&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;V&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;5. 함수형/혼합 언어 (유사 개념)&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;struct라는 키워드는 없지만 비슷한 개념 존재&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Scala (case class)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Haskell (record)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;OCaml&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;struct 없는 대신 대체 개념 사용하는 언어&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Java &amp;rarr; class만 있음&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;JavaScript &amp;rarr; 객체(Object)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Python &amp;rarr; class / dataclass&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Ruby &amp;rarr; class&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이런 언어들은&lt;br /&gt;&lt;b&gt;struct 대신 class/객체로 통합해서 사용&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;핵심 정리&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;struct는 크게 2가지 스타일로 나뉨:&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.&amp;nbsp; C 스타일&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;그냥 데이터 묶음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 현대 스타일 (Swift, Rust 등)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;값 타입 + 메서드 + 불변성&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;거의 &amp;ldquo;가벼운 클래스&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;한 줄 요약&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;struct는 &amp;ldquo;데이터 묶는 타입&amp;rdquo;인데, 현대 언어에서는 거의 &amp;ldquo;값 타입 객체&amp;rdquo;까지 발전한 개념&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 오후 2.44.32.png&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csiUTk/dJMcaaLMw6I/lWE69mzj0YfLhLzP2uSsB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csiUTk/dJMcaaLMw6I/lWE69mzj0YfLhLzP2uSsB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csiUTk/dJMcaaLMw6I/lWE69mzj0YfLhLzP2uSsB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsiUTk%2FdJMcaaLMw6I%2FlWE69mzj0YfLhLzP2uSsB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;788&quot; height=&quot;452&quot; data-filename=&quot;스크린샷 2026-04-14 오후 2.44.32.png&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;452&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 오후 2.47.47.png&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p039q/dJMcad2KeaN/6MEA1azGcLbDSDiNmvZH50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p039q/dJMcad2KeaN/6MEA1azGcLbDSDiNmvZH50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p039q/dJMcad2KeaN/6MEA1azGcLbDSDiNmvZH50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp039q%2FdJMcad2KeaN%2F6MEA1azGcLbDSDiNmvZH50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;714&quot; height=&quot;361&quot; data-filename=&quot;스크린샷 2026-04-14 오후 2.47.47.png&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;361&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;swift 의 기본적인 array 배열형도 구조체와 제네릭 타입으로 만들어졌다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;구조체와 클래스의 차이점&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;구조체는 인스턴스 값 타입, 클래스의 인스턴스는 참조 타입 이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;구조체는 상속 불가다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776663107331&quot; class=&quot;arduino&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;struct Resolution { //구조체 정의
    var width = 1024 //프로퍼티
    var height = 768
}
let myComputer = Resolution() //인스턴스 생성
print(myComputer.width)

let yourComputer = Resolution(width: 200, height: 300)
print(yourComputer.height)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;구조체에서는 모든 프로퍼티를 초기화 하는 initializer 가 자동 생성 된다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;클래스에서는 직접 만들어야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 오후 3.14.14.png&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qNcvL/dJMcad2KeaR/q84hVc7eytUCPmz727MEq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qNcvL/dJMcad2KeaR/q84hVc7eytUCPmz727MEq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qNcvL/dJMcad2KeaR/q84hVc7eytUCPmz727MEq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqNcvL%2FdJMcad2KeaR%2Fq84hVc7eytUCPmz727MEq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;820&quot; height=&quot;445&quot; data-filename=&quot;스크린샷 2026-04-14 오후 3.14.14.png&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;445&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DaUDq/dJMcaf7mHoi/JCJkVUsmD1hP8bIuBqaS01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DaUDq/dJMcaf7mHoi/JCJkVUsmD1hP8bIuBqaS01/img.png&quot; data-alt=&quot;주석으로 되어 있는게 memberwise init이다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DaUDq/dJMcaf7mHoi/JCJkVUsmD1hP8bIuBqaS01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDaUDq%2FdJMcaf7mHoi%2FJCJkVUsmD1hP8bIuBqaS01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;918&quot; height=&quot;376&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;주석으로 되어 있는게 memberwise init이다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(중요/시험)1. memberwise initializer&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;memberwise initializer는&lt;br /&gt;구조체의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 프로퍼티를 하나씩 받아서 초기화해주는 기본 생성자&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Swift에서는 struct를 만들면, 별도로 생성자를 안 써도 자동으로 만들어준다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. 지금 코드 기준으로 보면&lt;/h2&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;struct Resolution {
    var width = 1024
    var height = 768
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 구조체를 정의하면 Swift가 내부적으로 이런 생성자를 자동으로 만들어준다:&lt;/p&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;init(width: Int, height: Int) {
    self.width = width
    self.height = height
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이게 바로 memberwise initializer 이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. 코드에서의 쓰임새&lt;/h2&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let yourComputer = Resolution(width: 200, height: 300)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분이 memberwise initializer를 사용한 거다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;width에 200&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;height에 300&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;을 직접 넣어서 객체를 만든 것&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4. 기본값이 있는데도 왜 가능한 이유&lt;/h2&gt;
&lt;pre class=&quot;maxima&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var width = 1024
var height = 768
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 기본값이 있어도, memberwise initializer는 여전히 생성된다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 두 가지 방식이 다 가능하다:&lt;/p&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Resolution()                    // 기본값 사용
Resolution(width: 200, height: 300)  // 직접 지정
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5. 중요한 특징&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1) struct에만 자동 생성된다&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;struct &amp;rarr; 자동 생성됨&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;class &amp;rarr; 자동 생성 안 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2) 직접 init을 만들면 사라질 수 있다&lt;/h3&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;struct Resolution {
    var width = 1024
    var height = 768

    init() {
        width = 0
        height = 0
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 직접 init을 만들면&lt;br /&gt;기본 memberwise initializer (init(width:height:))는 더 이상 자동 생성되지 않는다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3) 내부 프로퍼티를 그대로 초기화&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이름 그대로:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;member(프로퍼티)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;wise(하나씩)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 프로퍼티를 하나씩 받아서 초기화한다는 의미다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;6. 한 줄 정리&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;memberwise initializer는&lt;br /&gt;&lt;b&gt;struct의 모든 프로퍼티를 매개변수로 받아 자동으로 초기화해주는 기본 생성자&lt;/b&gt;다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776663107336&quot; class=&quot;maxima&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;struct Resolution {
    var width = 1024
    var height = 768
}
class VideoMode {
    var resolution = Resolution()
    var frameRate = 0.0
}
let myVideo = VideoMode()
print(myVideo.resolution.height, myVideo.frameRate)
// 점(.)이 많아질수록 타고타고 들어가는 것이다.&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 오후 3.23.08.png&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSn37M/dJMcaartYNe/coLXokEglGLw1XvwTYEh4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSn37M/dJMcaartYNe/coLXokEglGLw1XvwTYEh4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSn37M/dJMcaartYNe/coLXokEglGLw1XvwTYEh4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSn37M%2FdJMcaartYNe%2FcoLXokEglGLw1XvwTYEh4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;831&quot; height=&quot;398&quot; data-filename=&quot;스크린샷 2026-04-14 오후 3.23.08.png&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;subscript는 안나옴&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/wuF2m/dJMcaiCWSb4/AAAAAAAAAAAAAAAAAAAAAJ9gL-2qdKRFWpILzuZ54mUY2x-63eFfuysdxAcm5Pv-/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=eVTtEc2QhnUvlUzdNKZDvWakIy4%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/wuF2m/dJMcaiCWSb4/AAAAAAAAAAAAAAAAAAAAAJ9gL-2qdKRFWpILzuZ54mUY2x-63eFfuysdxAcm5Pv-/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=eVTtEc2QhnUvlUzdNKZDvWakIy4%3D&quot;&gt;&lt;/span&gt;subscript는 안나옴&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 오후 3.24.39.png&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkaytW/dJMcad2KeaM/35v9kB4hZdDlpsIq7hQAa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkaytW/dJMcad2KeaM/35v9kB4hZdDlpsIq7hQAa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkaytW/dJMcad2KeaM/35v9kB4hZdDlpsIq7hQAa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkaytW%2FdJMcad2KeaM%2F35v9kB4hZdDlpsIq7hQAa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;793&quot; height=&quot;219&quot; data-filename=&quot;스크린샷 2026-04-14 오후 3.24.39.png&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;219&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;class만 상속 가능 !중요 포인트!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776663107338&quot; class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;class Human {
    var age : Int = 1
}
var kim = Human()
var lee = kim //참조 타입
print(kim.age, lee.age)
lee.age = 20
print(kim.age, lee.age)
kim.age = 30
print(kim.age, lee.age)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. 클래스 정의&lt;/h2&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;class Human {
    var age : Int = 1
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Human은 클래스&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;age 프로퍼티 기본값은 1&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. 인스턴스 생성&lt;/h2&gt;
&lt;pre class=&quot;isbl&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var kim = Human()
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Human 객체 하나 생성됨&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;메모리 어딘가에 객체가 만들어지고&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;kim은 그 객체를 &amp;ldquo;가리키는 참조&amp;rdquo;를 가지고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 상태:&lt;/p&gt;
&lt;pre class=&quot;isbl&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;kim ──&amp;gt; Human(age: 1)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. 참조 복사&lt;/h2&gt;
&lt;pre class=&quot;actionscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var lee = kim
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 중요한 포인트:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;값이 복사된 게 아니라&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;참조(주소)가 복사됨&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, 같은 객체를 가리킴&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 상태:&lt;/p&gt;
&lt;pre class=&quot;isbl&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;kim ─┐
     ├──&amp;gt; Human(age: 1)
lee ─┘
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4. 첫 번째 출력&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;print(kim.age, lee.age)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결과:&lt;/p&gt;
&lt;pre class=&quot;basic&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;1 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이유:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;둘 다 같은 객체를 보고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5. lee로 값 변경&lt;/h2&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;lee.age = 20
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;lee가 가리키는 객체의 age를 바꿈&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;그런데 그 객체는 kim도 같이 보고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 상태:&lt;/p&gt;
&lt;pre class=&quot;isbl&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;kim ─┐
     ├──&amp;gt; Human(age: 20)
lee ─┘
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;6. 두 번째 출력&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;print(kim.age, lee.age)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결과:&lt;/p&gt;
&lt;pre class=&quot;basic&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;20 20
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이유:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;같은 객체를 공유하고 있기 때문&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;7. kim으로 값 변경&lt;/h2&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;kim.age = 30
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;역시 같은 객체 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 상태:&lt;/p&gt;
&lt;pre class=&quot;isbl&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;kim ─┐
     ├──&amp;gt; Human(age: 30)
lee ─┘
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;8. 세 번째 출력&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;print(kim.age, lee.age)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결과:&lt;/p&gt;
&lt;pre class=&quot;basic&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;30 30
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;핵심 개념&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;class는 참조 타입&lt;/h3&gt;
&lt;pre class=&quot;actionscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var lee = kim
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이건&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&amp;ldquo;복사&amp;rdquo;가 아니라&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&amp;ldquo;같은 객체를 같이 사용&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;struct였다면?&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만약 struct였다면:&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var lee = kim
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 값이 복사됨&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 한쪽 바꿔도 다른 쪽 영향 없음&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;한 줄 정리&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 코드는&lt;br /&gt;&lt;b&gt;class는 값을 복사하는 게 아니라, 같은 객체를 참조하기 때문에 한쪽을 바꾸면 다른 쪽도 같이 바뀐다&lt;/b&gt;는 걸 보여주는 예제다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 오후 3.37.17.png&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpMAwR/dJMcaaLMw6F/LqwFKDPa4qREgzZ3qTEy60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpMAwR/dJMcaaLMw6F/LqwFKDPa4qREgzZ3qTEy60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpMAwR/dJMcaaLMw6F/LqwFKDPa4qREgzZ3qTEy60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpMAwR%2FdJMcaaLMw6F%2FLqwFKDPa4qREgzZ3qTEy60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;834&quot; height=&quot;452&quot; data-filename=&quot;스크린샷 2026-04-14 오후 3.37.17.png&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;452&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776663107342&quot; class=&quot;maxima&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;struct Resolution {
    var width = 0
    var height = 0
}
class VideoMode {
    var resolution = Resolution()
    var frameRate = 0
    var name: String?
}
var hd = Resolution(width: 1920, height: 1080)
//자동 Memberwise Initializer
var highDef = hd
//구조체는 값타입(value type)
print(hd.width, highDef.width)
hd.width = 1024
print(hd.width, highDef.width)
var xMonitor = VideoMode()
xMonitor.resolution = hd
xMonitor.name = &quot;LG&quot;
xMonitor.frameRate = 30
print(xMonitor.frameRate)
var yMonitor = xMonitor
//클래스는 참조타입(reference type)
yMonitor.frameRate = 25
print(yMonitor.frameRate)
print(xMonitor.frameRate)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 코드는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;struct(값 타입)&lt;/b&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;class(참조 타입)&lt;/b&gt;의 차이를 한 번에 보여주는 예제이다.&lt;br /&gt;앞부분과 뒷부분이 서로 다른 개념을 설명하고 있으니 나눠서 보자.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;1. struct 부분 (값 타입)&lt;/h1&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;struct Resolution {
    var width = 0
    var height = 0
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;구조체 정의. width, height를 가지는 단순 데이터 타입.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1-1. 값 복사&lt;/h2&gt;
&lt;pre class=&quot;maxima&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var hd = Resolution(width: 1920, height: 1080)
var highDef = hd
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 중요한 점:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;highDef = hd 는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;값 복사&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;완전히 별개의 객체가 만들어짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 상태:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;hd        -&amp;gt; (1920, 1080)
highDef   -&amp;gt; (1920, 1080)  // 복사본
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1-2. 출력&lt;/h2&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;print(hd.width, highDef.width)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결과:&lt;/p&gt;
&lt;pre class=&quot;basic&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;1920 1920
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1-3. 값 변경&lt;/h2&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;hd.width = 1024
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 상태는:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;hd        -&amp;gt; (1024, 1080)
highDef   -&amp;gt; (1920, 1080)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1-4. 다시 출력&lt;/h2&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;print(hd.width, highDef.width)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결과:&lt;/p&gt;
&lt;pre class=&quot;basic&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;1024 1920
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;핵심:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;struct는 복사되기 때문에 서로 영향 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;2. class 부분 (참조 타입)&lt;/h1&gt;
&lt;pre class=&quot;dart&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;class VideoMode {
    var resolution = Resolution()
    var frameRate = 0
    var name: String?
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;resolution은 struct&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;VideoMode 자체는 class&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2-1. 객체 생성&lt;/h2&gt;
&lt;pre class=&quot;isbl&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var xMonitor = VideoMode()
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;VideoMode 객체 하나 생성됨&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2-2. 값 설정&lt;/h2&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;xMonitor.resolution = hd
xMonitor.name = &quot;LG&quot;
xMonitor.frameRate = 30
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 주의:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;resolution = hd &amp;rarr; struct이므로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;값 복사됨&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2-3. 출력&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;print(xMonitor.frameRate)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결과:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;30
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2-4. 참조 복사&lt;/h2&gt;
&lt;pre class=&quot;actionscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var yMonitor = xMonitor
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기 핵심:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;class이므로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;참조 복사&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;같은 객체를 가리킴&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상태:&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;xMonitor ─┐
          ├──&amp;gt; VideoMode 객체
yMonitor ─┘
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2-5. 값 변경&lt;/h2&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;yMonitor.frameRate = 25
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;같은 객체를 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2-6. 출력&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;print(yMonitor.frameRate)   // 25
print(xMonitor.frameRate)   // 25
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결과:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;25
25
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이유:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;둘 다 같은 객체를 보고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;핵심 비교&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;struct (Resolution)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;값 타입&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;대입 시 복사됨&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;서로 영향 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;clean&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;hd -&amp;gt; 복사 -&amp;gt; highDef
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;class (VideoMode)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;참조 타입&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;대입 시 주소 공유&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;서로 영향 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;properties&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;xMonitor ─┐
          ├── 같은 객체
yMonitor ─┘
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;추가로 중요한 포인트 하나&lt;/h1&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;xMonitor.resolution = hd
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;resolution은 struct이기 때문에&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;여기서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;값 복사 발생&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;class 안에 struct가 들어있어도&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;struct는 여전히 값 타입으로 동작&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;한 줄 정리&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 코드는&lt;br /&gt;&lt;b&gt;struct는 복사되는 값 타입이라 독립적으로 동작하고, class는 같은 객체를 공유하는 참조 타입이라 한쪽 변경이 다른 쪽에도 영향을 준다&lt;/b&gt;는 것을 보여준다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-14 오후 3.47.55.png&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xX1fe/dJMcad2KeaS/BvzIQMbZkH4kmcKnG9t5Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xX1fe/dJMcad2KeaS/BvzIQMbZkH4kmcKnG9t5Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xX1fe/dJMcad2KeaS/BvzIQMbZkH4kmcKnG9t5Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxX1fe%2FdJMcad2KeaS%2FBvzIQMbZkH4kmcKnG9t5Ek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;806&quot; height=&quot;437&quot; data-filename=&quot;스크린샷 2026-04-14 오후 3.47.55.png&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;핵심 기준 (가장 중요한 한 줄)&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;ldquo;복사되어도 되는 데이터인가?&amp;rdquo; &amp;rarr; struct&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;ldquo;하나의 상태를 여러 곳에서 공유해야 하는가?&amp;rdquo; &amp;rarr; class&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;1. struct를 써야 하는 경우 (값 타입)&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;✔ 특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;값이 복사됨&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;서로 영향 없음&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;안전함 (side effect 없음)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;✔ 이런 상황에서 사용&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1) 단순 데이터 묶음&lt;/h3&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;struct Resolution {
    var width: Int
    var height: Int
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;좌표, 크기, 색상 같은 것&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2) 독립적인 값이어야 할 때&lt;/h3&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var a = Resolution(width: 100, height: 100)
var b = a
b.width = 200
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;a는 영향을 받으면 안 되는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3) 불변성이 중요한 경우&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let user = User(name: &quot;kim&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;값이 바뀌면 안 되는 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4) 계산 중심 데이터&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;좌표, 수학 값, 설정값&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;✔ Swift 공식 스타일&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Swift는 기본적으로&lt;/span&gt;&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;2. class를 써야 하는 경우 (참조 타입)&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;✔ 특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;하나의 객체를 여러 곳에서 공유&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;상태가 계속 변함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;✔ 이런 상황에서 사용&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1) 여러 곳에서 같은 객체를 써야 할 때&lt;/h3&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var a = Human()
var b = a
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;a, b가 같은 사람을 가리켜야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2) 상태를 공유해야 하는 경우&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;로그인 사용자&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;앱 상태&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;네트워크 매니저&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3) 상속이 필요한 경우&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;class Animal {}
class Dog: Animal {}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;struct는 상속이 안 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4) identity(정체성)가 중요한 경우&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&amp;ldquo;이 사람은 같은 사람인가?&amp;rdquo;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&amp;ldquo;이 객체는 동일한 객체인가?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;dts&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;if a === b { }  // 같은 객체인지 비교
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;3. 비교 정리&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기준structclass&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;타입&lt;/td&gt;
&lt;td&gt;값 타입&lt;/td&gt;
&lt;td&gt;참조 타입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;복사&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;X (참조 공유)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;상속&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;용도&lt;/td&gt;
&lt;td&gt;데이터&lt;/td&gt;
&lt;td&gt;객체/상태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;안정성&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;td&gt;상대적으로 낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;4. 실무에서 많이 쓰는 기준&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;struct 쓰는 경우&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;DTO (데이터 전달 객체)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;모델 데이터&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;좌표, 크기, 값&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;API 응답 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;class 쓰는 경우&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;ViewController&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Manager (NetworkManager 등)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;상태 공유 객체&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;싱글톤&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;5. 중요한 직관&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;struct&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &amp;ldquo;이건 그냥 값이다&amp;rdquo;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;class&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &amp;ldquo;이건 하나의 존재다&amp;rdquo;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;6. 한 줄 정리&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;struct는 &amp;ldquo;복사되는 데이터&amp;rdquo;,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;class는 &amp;ldquo;공유되는 객체&amp;rdquo;라고 생각하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;프로그래밍 언어에서 value 타입과 reference 타입의 차이&lt;/h2&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;1. 가장 중요한 차이 (한 줄)&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Value 타입 = 값을 복사해서 사용&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Reference 타입 = 같은 객체를 공유해서 사용&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;2. 메모리 관점에서 차이&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2-1. Value 타입&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var a = 10
var b = a
b = 20
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동작:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;a의 값이 b로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;복사됨&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;서로 완전히 독립&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상태:&lt;/p&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;a = 10
b = 20
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2-2. Reference 타입&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;class Person {
    var age = 10
}

var a = Person()
var b = a
b.age = 20
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동작:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;a와 b는 같은 객체를 가리킴&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;값이 아니라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;주소(참조)&lt;/b&gt;를 공유&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상태:&lt;/p&gt;
&lt;pre class=&quot;isbl&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;a ─┐
   ├──&amp;gt; Person(age: 20)
b ─┘
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;3. 핵심 차이 정리&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;구분Value 타입Reference 타입&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;저장&lt;/td&gt;
&lt;td&gt;값 자체&lt;/td&gt;
&lt;td&gt;주소(참조)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;복사&lt;/td&gt;
&lt;td&gt;값 복사&lt;/td&gt;
&lt;td&gt;참조 복사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;영향&lt;/td&gt;
&lt;td&gt;서로 영향 없음&lt;/td&gt;
&lt;td&gt;서로 영향 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;예&lt;/td&gt;
&lt;td&gt;struct, Int, String&lt;/td&gt;
&lt;td&gt;class&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;4. 코드로 비교&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Value 타입 (struct)&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;struct User {
    var age: Int
}

var u1 = User(age: 10)
var u2 = u1

u2.age = 20

print(u1.age) // 10
print(u2.age) // 20
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 서로 영향 없음&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Reference 타입 (class)&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;class User {
    var age: Int = 10
}

var u1 = User()
var u2 = u1

u2.age = 20

print(u1.age) // 20
print(u2.age) // 20
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 같은 객체라서 같이 바뀜&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;5. 왜 중요한가&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 차이 때문에:&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Value 타입&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;안전함&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;버그 적음&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;예측 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Reference 타입&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;공유 가능&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;상태 관리 가능&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;대신 사이드 이펙트 발생 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;6. 직관적으로 이해하는 방법&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Value 타입&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &amp;ldquo;복사해서 쓰는 종이&amp;rdquo;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Reference 타입&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &amp;ldquo;같은 구글 문서 링크 공유&amp;rdquo;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Value: 각자 따로 수정&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Reference: 한 명 수정하면 다 바뀜&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;7. Swift 기준 예&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Value 타입: struct, enum, Int, String, Array&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Reference 타입: class&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. 한 줄 정리&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Value 타입은 데이터를 복사해서 사용하고,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Reference 타입은 하나의 데이터를 여러 곳에서 공유한다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2026년도 1학기/iOS프로그래밍</category>
      <author>멈뭉밈</author>
      <guid isPermaLink="true">https://dupal-homework.tistory.com/141</guid>
      <comments>https://dupal-homework.tistory.com/141#entry141comment</comments>
      <pubDate>Mon, 20 Apr 2026 14:04:19 +0900</pubDate>
    </item>
    <item>
      <title>iOS 프로그래밍실무_6주차_옵셔널 체이닝(Optional Chaining)</title>
      <link>https://dupal-homework.tistory.com/139</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-07 오후 2.16.42.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSKnrl/dJMcajaKG5U/ZrcRoCB9KZwxn4FwD1PaG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSKnrl/dJMcajaKG5U/ZrcRoCB9KZwxn4FwD1PaG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSKnrl/dJMcajaKG5U/ZrcRoCB9KZwxn4FwD1PaG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSKnrl%2FdJMcajaKG5U%2FZrcRoCB9KZwxn4FwD1PaG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;201&quot; data-filename=&quot;스크린샷 2026-04-07 오후 2.16.42.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;201&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Swift에서 UITableViewDataSource 를 채택하면 conform을 해야한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-07 오후 2.20.06.png&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AU79G/dJMb99MKlWZ/5TmoqmOsoaVJwfq6SQssdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AU79G/dJMb99MKlWZ/5TmoqmOsoaVJwfq6SQssdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AU79G/dJMb99MKlWZ/5TmoqmOsoaVJwfq6SQssdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAU79G%2FdJMb99MKlWZ%2F5TmoqmOsoaVJwfq6SQssdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;650&quot; height=&quot;349&quot; data-filename=&quot;스크린샷 2026-04-07 오후 2.20.06.png&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-07 오후 2.24.27.png&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lxRsP/dJMcajaKG5Y/99AxGk7kJTkioSr1JIJR3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lxRsP/dJMcajaKG5Y/99AxGk7kJTkioSr1JIJR3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lxRsP/dJMcajaKG5Y/99AxGk7kJTkioSr1JIJR3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlxRsP%2FdJMcajaKG5Y%2F99AxGk7kJTkioSr1JIJR3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;671&quot; height=&quot;720&quot; data-filename=&quot;스크린샷 2026-04-07 오후 2.24.27.png&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;table view cell 직접 디자인 하기 위한 arrtibute 설정&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/bowvfo/dJMcadIiybG/AAAAAAAAAAAAAAAAAAAAACTlHdiDh5MthdAmnTEgbmSUpWz910E4Ml2M9fsTiYV5/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=Bwd3U6eDztd3Oo%2FjLtokmAuAux0%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/bowvfo/dJMcadIiybG/AAAAAAAAAAAAAAAAAAAAACTlHdiDh5MthdAmnTEgbmSUpWz910E4Ml2M9fsTiYV5/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=Bwd3U6eDztd3Oo%2FjLtokmAuAux0%3D&quot;&gt;&lt;/span&gt;table view cell 직접 디자인 하기 위한 arrtibute 설정&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-07 오후 2.42.52.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dm4xX6/dJMcajaKG59/ZslpmjKaS8w8FNJKSlVF21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dm4xX6/dJMcajaKG59/ZslpmjKaS8w8FNJKSlVF21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dm4xX6/dJMcajaKG59/ZslpmjKaS8w8FNJKSlVF21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdm4xX6%2FdJMcajaKG59%2FZslpmjKaS8w8FNJKSlVF21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1372&quot; height=&quot;534&quot; data-filename=&quot;스크린샷 2026-04-07 오후 2.42.52.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;didSelectRowAt - cell 이 선택되었을 때 반응&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/bb3wx6/dJMcaaY8LAe/AAAAAAAAAAAAAAAAAAAAALRkN-_3-Pp10A5i1Q3jMr7d-T0YxcWBTao84oa4U80p/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=7SRZHj4flSkkNKCsE0M7orV3hgg%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/bb3wx6/dJMcaaY8LAe/AAAAAAAAAAAAAAAAAAAAALRkN-_3-Pp10A5i1Q3jMr7d-T0YxcWBTao84oa4U80p/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=7SRZHj4flSkkNKCsE0M7orV3hgg%3D&quot;&gt;&lt;/span&gt;didSelectRowAt - cell 이 선택되었을 때 반응&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f6e199; color: #ee2323;&quot;&gt;&lt;b&gt;didSelectRowAt&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-07 오후 3.04.56.png&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/saw4z/dJMb99MKlW1/piBvoYZeVzyIL2FGRgNlY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/saw4z/dJMb99MKlW1/piBvoYZeVzyIL2FGRgNlY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/saw4z/dJMb99MKlW1/piBvoYZeVzyIL2FGRgNlY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsaw4z%2FdJMb99MKlW1%2FpiBvoYZeVzyIL2FGRgNlY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;701&quot; height=&quot;395&quot; data-filename=&quot;스크린샷 2026-04-07 오후 3.04.56.png&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;아주 중요한 문법! 시험에 나옴!&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/c5bROI/dJMcajhrJus/AAAAAAAAAAAAAAAAAAAAAOT7bDBBjyk3XabP8zxmzpB_mixhFByGxHFoLFwOTj1G/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=haJv0EkhCnEri2cdxdTkY5akC1A%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/c5bROI/dJMcajhrJus/AAAAAAAAAAAAAAAAAAAAAOT7bDBBjyk3XabP8zxmzpB_mixhFByGxHFoLFwOTj1G/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=haJv0EkhCnEri2cdxdTkY5akC1A%3D&quot;&gt;&lt;/span&gt;아주 중요한 문법! 시험에 나옴!&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776057094089&quot; class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;class Person {
    var name: String
    var age: Int
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}
let kim: Person = Person(name: &quot;Kim&quot;, age: 20)
print(kim.age)
let han: Person? = Person(name: &quot;Han&quot;, age: 25)
print(han!.age)
print(han?.age) //Optional(25), 옵셔널 체이닝
print((han?.age)!)
if let hanAge = han?.age {
    print(hanAge)
} else {
    print(&quot;nil&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;옵셔널형의 프로퍼티나 메서드 호출 뒤에 &quot;?&quot; 사용&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatgpt.com/s/t_69d4a599f22c8191addb36e9127cbb67&quot;&gt;https://chatgpt.com/s/t_69d4a599f22c8191addb36e9127cbb67&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1776057094091&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/thf8s/dJMb9gxma7o/AAAAAAAAAAAAAAAAAAAAAGQk9PVOD0T5t74x86fugpkFufraJF4TI8hE7gESt9tm/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=GLY3snLoWGxk54obJZeUBwaFURg%3D&quot; data-og-url=&quot;https://chatgpt.com/s/t_69d4a599f22c8191addb36e9127cbb67&quot; data-og-source-url=&quot;https://chatgpt.com/s/t_69d4a599f22c8191addb36e9127cbb67&quot; data-og-host=&quot;chatgpt.com&quot; data-og-description=&quot;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&quot; data-og-title=&quot;Shared Content&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://chatgpt.com/s/t_69d4a599f22c8191addb36e9127cbb67&quot; data-source-url=&quot;https://chatgpt.com/s/t_69d4a599f22c8191addb36e9127cbb67&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Shared Content&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;chatgpt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-07 오후 3.36.07.png&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8OGvo/dJMcac3MmPa/AS1WBIOGiYyZI5FcrX3vkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8OGvo/dJMcac3MmPa/AS1WBIOGiYyZI5FcrX3vkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8OGvo/dJMcac3MmPa/AS1WBIOGiYyZI5FcrX3vkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8OGvo%2FdJMcac3MmPa%2FAS1WBIOGiYyZI5FcrX3vkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;672&quot; height=&quot;508&quot; data-filename=&quot;스크린샷 2026-04-07 오후 3.36.07.png&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatgpt.com/s/t_69d4a6eb8860819187337869ef8da659&quot;&gt;https://chatgpt.com/s/t_69d4a6eb8860819187337869ef8da659&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1776057094092&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/Ke6ik/dJMb9aKFR12/AAAAAAAAAAAAAAAAAAAAAAyqQVRiajembF-9X2M9ApvBp-rYd9vMzC7WboKGBtlZ/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=nQhABhskAmM%2F8f4HSffYrsDj2rU%3D&quot; data-og-url=&quot;https://chatgpt.com/s/t_69d4a6eb8860819187337869ef8da659&quot; data-og-source-url=&quot;https://chatgpt.com/s/t_69d4a6eb8860819187337869ef8da659&quot; data-og-host=&quot;chatgpt.com&quot; data-og-description=&quot;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&quot; data-og-title=&quot;Shared Content&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://chatgpt.com/s/t_69d4a6eb8860819187337869ef8da659&quot; data-source-url=&quot;https://chatgpt.com/s/t_69d4a6eb8860819187337869ef8da659&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Shared Content&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;chatgpt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-07 오후 3.45.36.png&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;231&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIRbRI/dJMcajaKG5S/NWKoJ5zvzDLFA1Je32NFPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIRbRI/dJMcajaKG5S/NWKoJ5zvzDLFA1Je32NFPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIRbRI/dJMcajaKG5S/NWKoJ5zvzDLFA1Je32NFPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIRbRI%2FdJMcajaKG5S%2FNWKoJ5zvzDLFA1Je32NFPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;738&quot; height=&quot;231&quot; data-filename=&quot;스크린샷 2026-04-07 오후 3.45.36.png&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;231&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatgpt.com/s/t_69d4a8d4bc988191a3935d54119274ac&quot;&gt;https://chatgpt.com/s/t_69d4a8d4bc988191a3935d54119274ac&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1776057094092&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/Al3Ec/dJMb9jOnHxu/AAAAAAAAAAAAAAAAAAAAAO7enPtIv9JuAwzUqNPVIjCl6jqOk7zacCifZuby29U8/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=CsyVcudnG%2B%2F6XS8DYn1LEUBHDmI%3D&quot; data-og-url=&quot;https://chatgpt.com/s/t_69d4a8d4bc988191a3935d54119274ac&quot; data-og-source-url=&quot;https://chatgpt.com/s/t_69d4a8d4bc988191a3935d54119274ac&quot; data-og-host=&quot;chatgpt.com&quot; data-og-description=&quot;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&quot; data-og-title=&quot;Shared Content&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://chatgpt.com/s/t_69d4a8d4bc988191a3935d54119274ac&quot; data-source-url=&quot;https://chatgpt.com/s/t_69d4a8d4bc988191a3935d54119274ac&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Shared Content&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;chatgpt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-07 오후 3.49.55.png&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nnCc2/dJMcajaKG5Q/t3JAjNY0Iw8Im6J0cLXaX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nnCc2/dJMcajaKG5Q/t3JAjNY0Iw8Im6J0cLXaX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nnCc2/dJMcajaKG5Q/t3JAjNY0Iw8Im6J0cLXaX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnnCc2%2FdJMcajaKG5Q%2Ft3JAjNY0Iw8Im6J0cLXaX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;279&quot; data-filename=&quot;스크린샷 2026-04-07 오후 3.49.55.png&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776057094093&quot; class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;func myPrint &amp;lt;T&amp;gt;(a: T, b: T) {
    print(b,a)
}
myPrint(a:1,b:2)
myPrint(a:2.5,b:3.5)
myPrint(a: &quot;aaaaa&quot;, b: &quot;bbbbb&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결정되지 않은 자료형은 T 로 나타낸다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776057094093&quot; class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;class Box&amp;lt;T&amp;gt; {
    var item: T
    init(item: T) {
        self.item = item
    }
    func getItem() -&amp;gt; T {
        return item
    }
}
let intBox = Box&amp;lt;Int&amp;gt;(item: 123)//, generic class는 이렇게 쓰지만 타입 추론으로 &amp;lt;Int&amp;gt; 생략 가능
print(intBox.getItem()) // 12
let stringBox = Box&amp;lt;String&amp;gt;(item: &quot;Hello&quot;) // Box&amp;lt;String&amp;gt;(item: &quot;Hello&quot;)
print(stringBox.getItem()) // Hello&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776057094095&quot; class=&quot;markdown&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;var number : [Int] = []
var odd = [Int]()
var even : Array&amp;lt;Int&amp;gt; = Array()
print(number) //[]&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;세 가지 방법 모두 빈 배열을 만드는 방법이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;빈 배열을 append 함수를 이용해서 값을 넣어준 다음에 사용 가능하다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776057094095&quot; class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;var x = [0,0,0,0,0]
print(x)
var x1 = Array(repeating: 0, count: 5)
print(x1)
var x2 = Array(repeating: &quot;AB&quot;, count: 10)
print(x2)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;[0, 0, 0, 0, 0]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;[0, 0, 0, 0, 0]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;[&quot;AB&quot;, &quot;AB&quot;, &quot;AB&quot;, &quot;AB&quot;, &quot;AB&quot;, &quot;AB&quot;, &quot;AB&quot;, &quot;AB&quot;, &quot;AB&quot;, &quot;AB&quot;]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;같은 값으로 배열을 채울 때는 Array(repeating: count: ) 를 사용&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776057094096&quot; class=&quot;dart&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;let num = [1, 2, 3, 4]
var x = [Int]()
print(num.isEmpty) //배열이 비어있나? false
print(x.isEmpty)
if num.isEmpty {
    print(&quot;비어 있습니다&quot;)
}
else {
    print(num.count) //배열 항목의 개수
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;false&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;true&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;4&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;.isEmpty 로 배열이 비어 있는지 확인할 수 있고,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;.count 로 배열 항목의 개수를 알 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776057094097&quot; class=&quot;maxima&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;let num = [1, 2, 3, 4]
let num1 = [Int]()
print(num.first, num.last)//Optional(1) Optional(4)
print(num1.first, num1.last)//nil nil
if let f = num.first, let l = num.last {
    print(f,l) //1 4
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;.first 와 .last 를 사용하면 배열의 첫 번째와 마지막의 값을 알 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Optional 형으로 나온다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만약에, 빈 배열이라면 nil 이 나온다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776057094098&quot; class=&quot;yaml&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;//let x = [1, 2, 3, 4] // 불변 배열은 초깃값에서 변경 불가
//x.append(5)

var num = [1, 2, 3]
print(num)

num.append(4)
print(num)

num.append(contentsOf: [6, 7, 8])
print(num) // [1, 2, 3, 4, 6, 7, 8]

num.insert(5, at: 4)
print(num) // [1, 2, 3, 4, 5, 6, 7, 8]

num.remove(at: 3)
print(num) // [1, 2, 3, 5, 6, 7, 8]

num.removeLast()
print(num) // [1, 2, 3, 5, 6, 7]

print(num.firstIndex(of: 2)) // Optional(1), 2가 처음으로 나오는 첨자

if let i = num.firstIndex(of: 2) {
    // 2가 처음으로 저장된 방의 값을 20으로 바꿈
    num[i] = 20 // num[1] = 20
}

print(num) // [1, 20, 3, 5, 6, 7]

num = num + num
print(num) // [1, 20, 3, 5, 6, 7, 1, 20, 3, 5, 6, 7]

num += [8, 9]
print(num) // [1, 20, 3, 5, 6, 7, 1, 20, 3, 5, 6, 7, 8, 9]

num.removeAll()
print(num) // []&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1776057094100&quot; class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;var num = [1,5,3,2,4]
num.sort() //오름차순 정렬하여 원본 변경
print(num) //[1, 2, 3, 4, 5]
num[0...4] = [2,3,4,5,1]
num.sort(by:&amp;gt;) //내림차순 정렬하여 원본 변경
print(num) //[5, 4, 3, 2, 1]
num[0...4] = [2,3,4,5,1]
num.reverse() //반대로 정렬하여 원본 변경
print(num) //[1, 5, 4, 3, 2]
print(num.sorted()) //오름차순 정렬 결과를 리턴하고, 원본은 그대로, var x = num.sorted()
//[1, 2, 3, 4, 5]
print(num) //[1, 5, 4, 3, 2]
print(num.sorted(by:&amp;gt;)) //내림차순 정렬 결과를 리턴하고, 원본은 그대로
//[5, 4, 3, 2, 1]
print(num)//[1, 5, 4, 3, 2]&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;sort는 원본을 변경 / sorted는 원본을 변경하지 않음&lt;/p&gt;</description>
      <category>2026년도 1학기/iOS프로그래밍</category>
      <author>멈뭉밈</author>
      <guid isPermaLink="true">https://dupal-homework.tistory.com/139</guid>
      <comments>https://dupal-homework.tistory.com/139#entry139comment</comments>
      <pubDate>Mon, 13 Apr 2026 14:17:40 +0900</pubDate>
    </item>
    <item>
      <title>홍은표는 이거 봐라</title>
      <link>https://dupal-homework.tistory.com/138</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/8Rh6p/dJMcacCImNM/Jr6luXPGWVHdZgKfFA1dVK/b01.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;b01.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.48MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1586&quot; data-origin-height=&quot;1390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Aedl1/dJMcaax70B4/fjwaVK5pkyQ5HkG1bwas10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Aedl1/dJMcaax70B4/fjwaVK5pkyQ5HkG1bwas10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Aedl1/dJMcaax70B4/fjwaVK5pkyQ5HkG1bwas10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAedl1%2FdJMcaax70B4%2FfjwaVK5pkyQ5HkG1bwas10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1586&quot; height=&quot;1390&quot; data-origin-width=&quot;1586&quot; data-origin-height=&quot;1390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;build.gradle&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;implementation 'org.springframework.boot:spring-boot-starter-validation'&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨 밑에 추가&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코끼리 꼮 눌러야댐ㅇㅇ&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;BoardDTO.JAVA&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1775725181598&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.b01.dto;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.BatchSize;

import java.time.LocalDateTime;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BoardDTO {
    private Long bno;
    @NotEmpty
    @Size(min = 3, max = 100)
    private String title;
    @NotEmpty
    private String content;
    @NotEmpty

    private String writer;
    private LocalDateTime regDate;
    private LocalDateTime modDate;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;pre id=&quot;code_1775725240805&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BoardController&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1775725248822&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.b01.controller;

import com.example.b01.dto.BoardDTO;
import com.example.b01.dto.PageRequestDTO;
import com.example.b01.dto.PageResponseDTO;
import com.example.b01.service.BoardService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
@RequestMapping(&quot;/board&quot;)
@Log4j2
@RequiredArgsConstructor
public class BoardController {
    private final BoardService boardService;

    @GetMapping(&quot;/list&quot;)
    public void list(PageRequestDTO pageRequestDTO, Model model) {
        PageResponseDTO&amp;lt;BoardDTO&amp;gt; responseDTO = boardService.list(pageRequestDTO);
        log.info(responseDTO);
        model.addAttribute(&quot;responseDTO&quot;, responseDTO);
    }

    @GetMapping(&quot;/register&quot;)
    public void registerGET(){

    }

    @PostMapping(&quot;/register&quot;)
    public String registerPost(@Valid BoardDTO boardDTO, BindingResult bindingResult,
                               RedirectAttributes redirectAttributes){
        log.info(&quot;board POST register.......&quot;);
        if(bindingResult.hasErrors()) {
            log.info(&quot;has errors.......&quot;);
            redirectAttributes.addFlashAttribute(&quot;errors&quot;,
                    bindingResult.getAllErrors() );
            return &quot;redirect:/board/register&quot;;
        }
        log.info(boardDTO);
        Long bno  = boardService.register(boardDTO);
        redirectAttributes.addFlashAttribute(&quot;result&quot;, bno);
        return &quot;redirect:/board/list&quot;;
    }


}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;register.html&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;1056&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/12U4h/dJMcad2CBuh/XHozhFILBeRLN7KO0Se8v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/12U4h/dJMcad2CBuh/XHozhFILBeRLN7KO0Se8v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/12U4h/dJMcad2CBuh/XHozhFILBeRLN7KO0Se8v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F12U4h%2FdJMcad2CBuh%2FXHozhFILBeRLN7KO0Se8v1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1522&quot; height=&quot;1056&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;1056&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1775725271230&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;
      xmlns:layout=&quot;http://www.ultraq.net.nz/thymeleaf/layout&quot;
      layout:decorate=&quot;~{layout/basic.html}&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Board Register&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;div layout:fragment=&quot;content&quot;&amp;gt;
    &amp;lt;div class=&quot;row mt-3&quot;&amp;gt;
        &amp;lt;div class=&quot;col&quot;&amp;gt;
            &amp;lt;div class=&quot;card&quot;&amp;gt;
                &amp;lt;div class=&quot;card-header&quot;&amp;gt;
                    Board Register
                &amp;lt;/div&amp;gt;
                &amp;lt;div class=&quot;card-body&quot;&amp;gt;
                    &amp;lt;form action=&quot;/board/register&quot; method=&quot;post&quot;&amp;gt;
                        &amp;lt;div class=&quot;input-group mb-3&quot;&amp;gt;
                            &amp;lt;span class=&quot;input-group-text&quot;&amp;gt;Title&amp;lt;/span&amp;gt;
                            &amp;lt;input type=&quot;text&quot; name=&quot;title&quot; class=&quot;form-control&quot; placeholder=&quot;Title&quot;&amp;gt;
                        &amp;lt;/div&amp;gt;

                        &amp;lt;div class=&quot;input-group mb-3&quot;&amp;gt;
                            &amp;lt;span class=&quot;input-group-text&quot;&amp;gt;Content&amp;lt;/span&amp;gt;
                            &amp;lt;textarea class=&quot;form-control col-sm-5&quot; rows=&quot;5&quot; name=&quot;content&quot;&amp;gt;&amp;lt;/textarea&amp;gt;
                        &amp;lt;/div&amp;gt;

                        &amp;lt;div class=&quot;input-group mb-3&quot;&amp;gt;
                            &amp;lt;span class=&quot;input-group-text&quot;&amp;gt;Writer&amp;lt;/span&amp;gt;
                            &amp;lt;input type=&quot;text&quot; name=&quot;writer&quot; class=&quot;form-control&quot; placeholder=&quot;Writer&quot;&amp;gt;

                        &amp;lt;/div&amp;gt;

                        &amp;lt;div class=&quot;my-4&quot;&amp;gt;
                            &amp;lt;div class=&quot;float-end&quot;&amp;gt;
                                &amp;lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot;&amp;gt;Submit&amp;lt;/button&amp;gt;
                                &amp;lt;button type=&quot;reset&quot; class=&quot;btn btn-secondary&quot;&amp;gt;Reset&amp;lt;/button&amp;gt;
                            &amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/form&amp;gt;

                &amp;lt;/div&amp;gt;&amp;lt;!--end card body--&amp;gt;

            &amp;lt;/div&amp;gt;&amp;lt;!--end card--&amp;gt;
        &amp;lt;/div&amp;gt;&amp;lt;!-- end col--&amp;gt;
    &amp;lt;/div&amp;gt;&amp;lt;!-- end row--&amp;gt;
&amp;lt;/div&amp;gt;


&amp;lt;script layout:fragment=&quot;script&quot; th:inline=&quot;javascript&quot;&amp;gt;



&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;645&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by2dUg/dJMcacCIgDa/fUwV8PVRep0qEB84fYeHJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by2dUg/dJMcacCIgDa/fUwV8PVRep0qEB84fYeHJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by2dUg/dJMcacCIgDa/fUwV8PVRep0qEB84fYeHJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby2dUg%2FdJMcacCIgDa%2FfUwV8PVRep0qEB84fYeHJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;944&quot; height=&quot;645&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;645&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정 폼 만들어짐&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알림창을 만들거임&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무것도 입력을 하지 않으면 알람창이 뜸&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsc4lP/dJMcaaLEIKE/URgvVmelXtPIY6l2B0C1l1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsc4lP/dJMcaaLEIKE/URgvVmelXtPIY6l2B0C1l1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsc4lP/dJMcaaLEIKE/URgvVmelXtPIY6l2B0C1l1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdsc4lP%2FdJMcaaLEIKE%2FURgvVmelXtPIY6l2B0C1l1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;949&quot; height=&quot;588&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1082&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qpmYP/dJMcadO4ZO9/o1cT9rmUjk9hZ3qfKaxdPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qpmYP/dJMcadO4ZO9/o1cT9rmUjk9hZ3qfKaxdPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qpmYP/dJMcadO4ZO9/o1cT9rmUjk9hZ3qfKaxdPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqpmYP%2FdJMcadO4ZO9%2Fo1cT9rmUjk9hZ3qfKaxdPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1082&quot; height=&quot;473&quot; data-origin-width=&quot;1082&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775725450438&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script layout:fragment=&quot;script&quot; th:inline=&quot;javascript&quot;&amp;gt;
    const errors = [[${errors}]]
    console.log(errors)
    let errorMsg = ''
    if(errors){
        for (let i = 0; i &amp;lt; errors.length; i++) {
            errorMsg += `${errors[i].field}은(는) ${errors[i].code} \n`
        }
        alert(errorMsg)
    }

&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;register 하단부분에 이거 추가하면 알람창 추가 됨&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇번쨰 게시글인지 확인하는 알람 창 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn6tBh/dJMcacWY4op/Y8CW4BzFKEtXeHxYy5DYok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn6tBh/dJMcacWY4op/Y8CW4BzFKEtXeHxYy5DYok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn6tBh/dJMcacWY4op/Y8CW4BzFKEtXeHxYy5DYok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn6tBh%2FdJMcacWY4op%2FY8CW4BzFKEtXeHxYy5DYok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;942&quot; height=&quot;644&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;644&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;list.html&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1775727171187&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    //show model
    const result =[[${result}]]
    if(result) {
       alert(result)
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1283&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DTA7K/dJMb99Tu1lO/W13D3H0tQtpCasg4kzn1t0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DTA7K/dJMb99Tu1lO/W13D3H0tQtpCasg4kzn1t0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DTA7K/dJMb99Tu1lO/W13D3H0tQtpCasg4kzn1t0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDTA7K%2FdJMb99Tu1lO%2FW13D3H0tQtpCasg4kzn1t0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1283&quot; height=&quot;441&quot; data-origin-width=&quot;1283&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcm6Fh/dJMcaarmhOn/KELVrQkr0DHKOCRkQg9Uek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcm6Fh/dJMcaarmhOn/KELVrQkr0DHKOCRkQg9Uek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcm6Fh/dJMcaarmhOn/KELVrQkr0DHKOCRkQg9Uek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcm6Fh%2FdJMcaarmhOn%2FKELVrQkr0DHKOCRkQg9Uek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;949&quot; height=&quot;864&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;864&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보면 101번째 내용이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정 만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;839&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VE1Ix/dJMcagkMuL3/pVrKwqdkERns6RmLuEBnDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VE1Ix/dJMcagkMuL3/pVrKwqdkERns6RmLuEBnDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VE1Ix/dJMcagkMuL3/pVrKwqdkERns6RmLuEBnDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVE1Ix%2FdJMcagkMuL3%2FpVrKwqdkERns6RmLuEBnDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;942&quot; height=&quot;839&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;839&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;read만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1589&quot; data-origin-height=&quot;867&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3LtAO/dJMcagE7Trg/W4lQdgClYbpAmcPcFxH2wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3LtAO/dJMcagE7Trg/W4lQdgClYbpAmcPcFxH2wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3LtAO/dJMcagE7Trg/W4lQdgClYbpAmcPcFxH2wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3LtAO%2FdJMcagE7Trg%2FW4lQdgClYbpAmcPcFxH2wk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1589&quot; height=&quot;867&quot; data-origin-width=&quot;1589&quot; data-origin-height=&quot;867&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775732390489&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;
      xmlns:layout=&quot;http://www.ultraq.net.nz/thymeleaf/layout&quot;
      layout:decorate=&quot;~{layout/basic.html}&quot;&amp;gt;

&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Board Read&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;div layout:fragment=&quot;content&quot;&amp;gt;
    &amp;lt;div class=&quot;row mt-3&quot;&amp;gt;
        &amp;lt;div class=&quot;col&quot;&amp;gt;
            &amp;lt;div class=&quot;card&quot;&amp;gt;
                &amp;lt;div class=&quot;card-header&quot;&amp;gt;
                    Board Read
                &amp;lt;/div&amp;gt;
                &amp;lt;div class=&quot;card-body&quot;&amp;gt;
                    &amp;lt;div class=&quot;input-group mb-3&quot;&amp;gt;
                        &amp;lt;span class=&quot;input-group-text&quot;&amp;gt;Bno&amp;lt;/span&amp;gt;
                        &amp;lt;input type=&quot;text&quot; class=&quot;form-control&quot; th:value=&quot;${dto.bno}&quot; readonly&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;input-group mb-3&quot;&amp;gt;
                        &amp;lt;span class=&quot;input-group-text&quot;&amp;gt;Title&amp;lt;/span&amp;gt;
                        &amp;lt;input type=&quot;text&quot; class=&quot;form-control&quot; th:value=&quot;${dto.title}&quot; readonly&amp;gt;
                    &amp;lt;/div&amp;gt;

                    &amp;lt;div class=&quot;input-group mb-3&quot;&amp;gt;
                        &amp;lt;span class=&quot;input-group-text&quot;&amp;gt;Content&amp;lt;/span&amp;gt;
                        &amp;lt;textarea class=&quot;form-control col-sm-5&quot; rows=&quot;5&quot; readonly&amp;gt;[[${dto.content}]]&amp;lt;/textarea&amp;gt;
                    &amp;lt;/div&amp;gt;

                    &amp;lt;div class=&quot;input-group mb-3&quot;&amp;gt;
                        &amp;lt;span class=&quot;input-group-text&quot;&amp;gt;Writer&amp;lt;/span&amp;gt;
                        &amp;lt;input type=&quot;text&quot; class=&quot;form-control&quot; th:value=&quot;${dto.writer}&quot; readonly&amp;gt;
                    &amp;lt;/div&amp;gt;

                    &amp;lt;div class=&quot;input-group mb-3&quot;&amp;gt;
                        &amp;lt;span class=&quot;input-group-text&quot;&amp;gt;RegDate&amp;lt;/span&amp;gt;
                        &amp;lt;input type=&quot;text&quot; class=&quot;form-control&quot; th:value=&quot;${#temporals.format(dto.regDate, 'yyyy-MM-dd HH:mm:ss')}&quot; readonly&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;input-group mb-3&quot;&amp;gt;
                        &amp;lt;span class=&quot;input-group-text&quot;&amp;gt;ModDate&amp;lt;/span&amp;gt;
                        &amp;lt;input type=&quot;text&quot; class=&quot;form-control&quot; th:value=&quot;${#temporals.format(dto.modDate, 'yyyy-MM-dd HH:mm:ss')}&quot; readonly&amp;gt;
                    &amp;lt;/div&amp;gt;

                    &amp;lt;div class=&quot;my-4&quot;&amp;gt;
                        &amp;lt;div class=&quot;float-end&quot; th:with=&quot;link = ${pageRequestDTO.getLink()}&quot;&amp;gt;
                            &amp;lt;a th:href=&quot;|@{/board/list}?${link}|&quot; class=&quot;text-decoration-none&quot;&amp;gt;
                                &amp;lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&amp;gt;List&amp;lt;/button&amp;gt;
                            &amp;lt;/a&amp;gt;

                            &amp;lt;a th:href=&quot;|@{/board/modify(bno=${dto.bno})}&amp;amp;${link}|&quot; class=&quot;text-decoration-none&quot;&amp;gt;
                                &amp;lt;button type=&quot;button&quot; class=&quot;btn btn-secondary&quot;&amp;gt;Modify&amp;lt;/button&amp;gt;
                            &amp;lt;/a&amp;gt;

                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;


                &amp;lt;/div&amp;gt;&amp;lt;!--end card body--&amp;gt;



            &amp;lt;/div&amp;gt;&amp;lt;!--end card--&amp;gt;
        &amp;lt;/div&amp;gt;&amp;lt;!-- end col--&amp;gt;
    &amp;lt;/div&amp;gt;&amp;lt;!-- end row--&amp;gt;
&amp;lt;/div&amp;gt;


&amp;lt;script layout:fragment=&quot;script&quot; th:inline=&quot;javascript&quot;&amp;gt;



&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;BoardController&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1775732421273&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.b01.controller;

import com.example.b01.dto.BoardDTO;
import com.example.b01.dto.PageRequestDTO;
import com.example.b01.dto.PageResponseDTO;
import com.example.b01.service.BoardService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
@RequestMapping(&quot;/board&quot;)
@Log4j2
@RequiredArgsConstructor
public class BoardController {
    private final BoardService boardService;

    @GetMapping(&quot;/list&quot;)
    public void list(PageRequestDTO pageRequestDTO, Model model) {
        PageResponseDTO&amp;lt;BoardDTO&amp;gt; responseDTO = boardService.list(pageRequestDTO);
        log.info(responseDTO);
        model.addAttribute(&quot;responseDTO&quot;, responseDTO);
    }

    @GetMapping(&quot;/register&quot;)
    public void registerGET(){

    }

    @PostMapping(&quot;/register&quot;)
    public String registerPost(@Valid BoardDTO boardDTO, BindingResult bindingResult,
                               RedirectAttributes redirectAttributes){
        log.info(&quot;board POST register.......&quot;);
        if(bindingResult.hasErrors()) {
            log.info(&quot;has errors.......&quot;);
            redirectAttributes.addFlashAttribute(&quot;errors&quot;,
                    bindingResult.getAllErrors() );
            return &quot;redirect:/board/register&quot;;
        }
        log.info(boardDTO);
        Long bno  = boardService.register(boardDTO);
        redirectAttributes.addFlashAttribute(&quot;result&quot;, bno);
        return &quot;redirect:/board/list&quot;;
    }

    @GetMapping(&quot;/read&quot;)
    public void read(Long bno, PageRequestDTO pageRequestDTO, Model model){
        BoardDTO boardDTO = boardService.readOne(bno);
        log.info(boardDTO);
        model.addAttribute(&quot;dto&quot;, boardDTO);
    }


}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정 시 돌아가기 만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1552&quot; data-origin-height=&quot;949&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTjx4T/dJMcacJuv4e/yFVK4zE8ZoZb8YktsKWZWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTjx4T/dJMcacJuv4e/yFVK4zE8ZoZb8YktsKWZWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTjx4T/dJMcacJuv4e/yFVK4zE8ZoZb8YktsKWZWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTjx4T%2FdJMcacJuv4e%2FyFVK4zE8ZoZb8YktsKWZWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1552&quot; height=&quot;949&quot; data-origin-width=&quot;1552&quot; data-origin-height=&quot;949&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;read.html&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1775732517449&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;                    &amp;lt;div class=&quot;my-4&quot;&amp;gt;
                        &amp;lt;div class=&quot;float-end&quot; th:with=&quot;link = ${pageRequestDTO.getLink()}&quot;&amp;gt;
                            &amp;lt;a th:href=&quot;|@{/board/list}?${link}|&quot; class=&quot;text-decoration-none&quot;&amp;gt;
                                &amp;lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&amp;gt;List&amp;lt;/button&amp;gt;
                            &amp;lt;/a&amp;gt;

                            &amp;lt;a th:href=&quot;|@{/board/modify(bno=${dto.bno})}&amp;amp;${link}|&quot; class=&quot;text-decoration-none&quot;&amp;gt;
                                &amp;lt;button type=&quot;button&quot; class=&quot;btn btn-secondary&quot;&amp;gt;Modify&amp;lt;/button&amp;gt;
                            &amp;lt;/a&amp;gt;

                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1545&quot; data-origin-height=&quot;1348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9n1mG/dJMcaaZaLul/sk7VwEdIYpluTE1MZ1ctA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9n1mG/dJMcaaZaLul/sk7VwEdIYpluTE1MZ1ctA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9n1mG/dJMcaaZaLul/sk7VwEdIYpluTE1MZ1ctA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9n1mG%2FdJMcaaZaLul%2Fsk7VwEdIYpluTE1MZ1ctA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1545&quot; height=&quot;1348&quot; data-origin-width=&quot;1545&quot; data-origin-height=&quot;1348&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자 모드로 보면 이렇게 링크가 보임&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;1387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbeq3b/dJMcabKATpu/tKg1ltWrd1ra8wipA68Gx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbeq3b/dJMcabKATpu/tKg1ltWrd1ra8wipA68Gx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbeq3b/dJMcabKATpu/tKg1ltWrd1ra8wipA68Gx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcbeq3b%2FdJMcabKATpu%2FtKg1ltWrd1ra8wipA68Gx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;931&quot; height=&quot;1387&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;1387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아 이제 귀찮아 그냥 파일 올려줌;;;;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인제 안 적음 ㅃㅇ&lt;/p&gt;</description>
      <category>웹개발</category>
      <author>멈뭉밈</author>
      <guid isPermaLink="true">https://dupal-homework.tistory.com/138</guid>
      <comments>https://dupal-homework.tistory.com/138#entry138comment</comments>
      <pubDate>Thu, 9 Apr 2026 20:40:19 +0900</pubDate>
    </item>
    <item>
      <title>5주차_iOS프로그래밍_맛집 iOS앱 개발</title>
      <link>https://dupal-homework.tistory.com/137</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-31 오후 2.16.26.png&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UvEwY/dJMcahDV5Wc/vKjwfkDJKcaTCA2XfOjvjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UvEwY/dJMcahDV5Wc/vKjwfkDJKcaTCA2XfOjvjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UvEwY/dJMcahDV5Wc/vKjwfkDJKcaTCA2XfOjvjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUvEwY%2FdJMcahDV5Wc%2FvKjwfkDJKcaTCA2XfOjvjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;713&quot; height=&quot;410&quot; data-filename=&quot;스크린샷 2026-03-31 오후 2.16.26.png&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;protocol &amp;amp;amp; delegate&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/eiaWUo/dJMcaiCLYyk/AAAAAAAAAAAAAAAAAAAAAEacYdOgnwnjOPQWwL2MKd5q0437ernwBcDfvCHwbtqS/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=ovhwEWweC00izzi23Qyj3Bh%2BrmQ%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/eiaWUo/dJMcaiCLYyk/AAAAAAAAAAAAAAAAAAAAAEacYdOgnwnjOPQWwL2MKd5q0437ernwBcDfvCHwbtqS/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=ovhwEWweC00izzi23Qyj3Bh%2BrmQ%3D&quot;&gt;&lt;/span&gt;protocol &amp;amp; delegate&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-31 오후 2.19.13.png&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ua04C/dJMcagkJyC1/w6w3lW2l4kdZUDukpRqa90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ua04C/dJMcagkJyC1/w6w3lW2l4kdZUDukpRqa90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ua04C/dJMcagkJyC1/w6w3lW2l4kdZUDukpRqa90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUa04C%2FdJMcagkJyC1%2Fw6w3lW2l4kdZUDukpRqa90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;775&quot; height=&quot;348&quot; data-filename=&quot;스크린샷 2026-03-31 오후 2.19.13.png&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-31 오후 2.20.43.png&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CXs9G/dJMcafe7aq5/puYiuJ8Ps4WXSdkkhp70Yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CXs9G/dJMcafe7aq5/puYiuJ8Ps4WXSdkkhp70Yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CXs9G/dJMcafe7aq5/puYiuJ8Ps4WXSdkkhp70Yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCXs9G%2FdJMcafe7aq5%2FpuYiuJ8Ps4WXSdkkhp70Yk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;886&quot; height=&quot;436&quot; data-filename=&quot;스크린샷 2026-03-31 오후 2.20.43.png&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/62PKu/dJMcacil8Nc/pLirKHpskCDzDZF3UC4iQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/62PKu/dJMcacil8Nc/pLirKHpskCDzDZF3UC4iQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/62PKu/dJMcacil8Nc/pLirKHpskCDzDZF3UC4iQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F62PKu%2FdJMcacil8Nc%2FpLirKHpskCDzDZF3UC4iQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;928&quot; height=&quot;523&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로토콜은 자바에서 인터페이스와 비슷하다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로토콜은 다중 상속이 가능하다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o6iVf/dJMcacCFqRP/Il874GyGG7mhI7qofc6950/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o6iVf/dJMcacCFqRP/Il874GyGG7mhI7qofc6950/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o6iVf/dJMcacCFqRP/Il874GyGG7mhI7qofc6950/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo6iVf%2FdJMcacCFqRP%2FIl874GyGG7mhI7qofc6950%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1226&quot; height=&quot;383&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로토콜을 만들 때는 변수에는 값을 넣으면 안되고,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;{get} 또는 {get set} 을 넣어야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;get은 읽기 권한, set은 수정 권한이라고 보면 된다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775452365888&quot; class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;protocol Runnable {
    var x : Int { get set }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;프로토콜 상속 오류&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/bsrT1H/dJMcabXYzen/AAAAAAAAAAAAAAAAAAAAAPgGx-aAliim5KYuisd5fexXANi3X2W53qrsV4pzbzWk/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=LY92Gen%2FK97OC8yX%2Ffg8Wdk7%2Fh4%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/bsrT1H/dJMcabXYzen/AAAAAAAAAAAAAAAAAAAAAPgGx-aAliim5KYuisd5fexXANi3X2W53qrsV4pzbzWk/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=LY92Gen%2FK97OC8yX%2Ffg8Wdk7%2Fh4%3D&quot;&gt;&lt;/span&gt;프로토콜 상속 오류&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;채택을 완료함 상속과는 다름 !!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DsGKX/dJMcabX3fpJ/fXnL4Vzgt2tN42vlnyE2fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DsGKX/dJMcabX3fpJ/fXnL4Vzgt2tN42vlnyE2fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DsGKX/dJMcabX3fpJ/fXnL4Vzgt2tN42vlnyE2fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDsGKX%2FdJMcabX3fpJ%2FfXnL4Vzgt2tN42vlnyE2fK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1216&quot; height=&quot;494&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;494&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775452365889&quot; class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;protocol Runnable {
    var x: Int { get set }
    func run()
    
}
class Man : Runnable {
    var x : Int = 1
    func run() {
        print(&quot;이쿠요잇~~~!!&quot;)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ protocol Runnable&lt;/h2&gt;
&lt;pre class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;protocol Runnable {
    var x : Int { get set }
    func run()
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;프로토콜 = 규칙(설계도)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라고 보면 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Runnable이라는 프로토콜은 다음을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;반드시 구현해야 한다고 요구&lt;/b&gt;한다:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;x라는 정수형 변수 (읽기/쓰기 가능)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;run()이라는 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;ldquo;Runnable을 따르는 타입은 무조건 x랑 run()을 가져야 해!&amp;rdquo; 라는 약속이다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ class Man : Runnable&lt;/h2&gt;
&lt;pre class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;class Man : Runnable {
    var x: Int = 1
    func run() { print(&quot;달려~~~&quot;) }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  Man 클래스는 Runnable 프로토콜을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;채택(implements)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;했다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;x 변수도 만들고&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;run() 함수도 구현해야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;지금 코드에서는:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;x = 1로 초기값 설정&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;run() 실행하면 &quot;달려~~~&quot; 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ 전체 의미 정리&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;ldquo;달릴 수 있는(Runnable) 존재는 x라는 값과 run() 행동을 가져야 해.&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 Man은:&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;ldquo;나는 Runnable 규칙을 따르는 사람이니까, 실제로 달리는 기능을 구현할게!&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ 실제 사용 예 (이렇게 쓸 수 있음)&lt;/h2&gt;
&lt;pre class=&quot;gauss&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;let m = Man()
m.run()   // 출력: 달려~~~
print(m.x) // 출력: 1
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;핵심 포인트  &lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;protocol&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; &amp;ldquo;이런 기능 꼭 만들어!&amp;rdquo;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;class : protocol&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; &amp;ldquo;그 규칙을 따르겠다&amp;rdquo;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;구현&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 실제 동작 작성&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;프로토콜은 상속이 아니라 채택하는 것이다.&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;실습&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-31 오후 3.07.35.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XPpxo/dJMcafe7aqR/5JLB1BFTofEaN7CjhOmAmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XPpxo/dJMcafe7aqR/5JLB1BFTofEaN7CjhOmAmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XPpxo/dJMcafe7aqR/5JLB1BFTofEaN7CjhOmAmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXPpxo%2FdJMcafe7aqR%2F5JLB1BFTofEaN7CjhOmAmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;844&quot; height=&quot;473&quot; data-filename=&quot;스크린샷 2026-03-31 오후 3.07.35.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-31 오후 3.08.58.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;713&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baUfG3/dJMcagkJyC3/dmXAqn6RtGmvlv9DMOpUH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baUfG3/dJMcagkJyC3/dmXAqn6RtGmvlv9DMOpUH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baUfG3/dJMcagkJyC3/dmXAqn6RtGmvlv9DMOpUH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaUfG3%2FdJMcagkJyC3%2FdmXAqn6RtGmvlv9DMOpUH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;713&quot; data-filename=&quot;스크린샷 2026-03-31 오후 3.08.58.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;713&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;화면 비율에 딱 맞게 설정하기&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/Vyoj4/dJMcaaSjRAK/AAAAAAAAAAAAAAAAAAAAAM_21L-2SeL6HzOwuH0f0UV0iqWWi1J4PGb2vlXU7Xcp/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=FdzHC%2F%2BxXxYHcGVdPozXYgDtTU8%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/Vyoj4/dJMcaaSjRAK/AAAAAAAAAAAAAAAAAAAAAM_21L-2SeL6HzOwuH0f0UV0iqWWi1J4PGb2vlXU7Xcp/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=FdzHC%2F%2BxXxYHcGVdPozXYgDtTU8%3D&quot;&gt;&lt;/span&gt;화면 비율에 딱 맞게 설정하기&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;constrain to margins 를 체크하지 않으면 완전 딱붙여서 설정 가능&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-31 오후 3.16.08.png&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LWNx1/dJMcafe7aqN/zkbhMGgKKIhKZQkVld4cN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LWNx1/dJMcafe7aqN/zkbhMGgKKIhKZQkVld4cN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LWNx1/dJMcafe7aqN/zkbhMGgKKIhKZQkVld4cN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLWNx1%2FdJMcafe7aqN%2FzkbhMGgKKIhKZQkVld4cN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1025&quot; height=&quot;286&quot; data-filename=&quot;스크린샷 2026-03-31 오후 3.16.08.png&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;conform 오류&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/cKNgIT/dJMb996Vqyt/AAAAAAAAAAAAAAAAAAAAABxXMQW6bftYZccD0JFrxQkWJu5M-coylb-tO6Fws2QU/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=9w03OdiTkNTH2AqCV%2FoXvDD0nGw%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/cKNgIT/dJMb996Vqyt/AAAAAAAAAAAAAAAAAAAAABxXMQW6bftYZccD0JFrxQkWJu5M-coylb-tO6Fws2QU/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=9w03OdiTkNTH2AqCV%2FoXvDD0nGw%3D&quot;&gt;&lt;/span&gt;conform 오류&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-31 오후 3.35.52.png&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FV4s4/dJMcaax48l8/ytlZs5UJeQ33OEOrJ4G6Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FV4s4/dJMcaax48l8/ytlZs5UJeQ33OEOrJ4G6Lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FV4s4/dJMcaax48l8/ytlZs5UJeQ33OEOrJ4G6Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFV4s4%2FdJMcaax48l8%2FytlZs5UJeQ33OEOrJ4G6Lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;850&quot; height=&quot;364&quot; data-filename=&quot;스크린샷 2026-03-31 오후 3.35.52.png&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775452365898&quot; class=&quot;swift&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;import UIKit

var image = [&quot;smile.png&quot;, &quot;smile3.png&quot;,&quot;smile2.png&quot;,&quot;smile1.png&quot;,&quot;happy.png&quot;]
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet weak var table: UITableView!
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&amp;gt; Int {
        return 5
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&amp;gt; UITableViewCell {
        let cell = UITableViewCell(style: .subtitle, reuseIdentifier: &quot;myCell&quot;)
        cell.textLabel?.text = &quot;\(indexPath.row)&quot;
        cell.detailTextLabel?.text = indexPath.description
        cell.imageView?.image = UIImage(named:
                                            image[indexPath.row])
        return cell
    }
    
    func numberOfSections(in tableView: UITableView) -&amp;gt; Int {
        return 3
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        table.delegate = self
        table.dataSource = self
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-31 오후 4.08.18.png&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;553&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baBQEC/dJMcajaFs84/GxXXg2bIkP62QPpylj32d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baBQEC/dJMcajaFs84/GxXXg2bIkP62QPpylj32d1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baBQEC/dJMcajaFs84/GxXXg2bIkP62QPpylj32d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaBQEC%2FdJMcajaFs84%2FGxXXg2bIkP62QPpylj32d1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;259&quot; height=&quot;553&quot; data-filename=&quot;스크린샷 2026-03-31 오후 4.08.18.png&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;553&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;flask.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TSLS7/dJMcahqrfPr/l4dPORdRPxoaXZnRrLMoT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TSLS7/dJMcahqrfPr/l4dPORdRPxoaXZnRrLMoT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TSLS7/dJMcahqrfPr/l4dPORdRPxoaXZnRrLMoT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTSLS7%2FdJMcahqrfPr%2Fl4dPORdRPxoaXZnRrLMoT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;512&quot; height=&quot;512&quot; data-filename=&quot;flask.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cocktail.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AbROC/dJMcacvUqD6/2dtrkLUKXHEntTO1KNqNNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AbROC/dJMcacvUqD6/2dtrkLUKXHEntTO1KNqNNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AbROC/dJMcacvUqD6/2dtrkLUKXHEntTO1KNqNNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAbROC%2FdJMcacvUqD6%2F2dtrkLUKXHEntTO1KNqNNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;512&quot; height=&quot;512&quot; data-filename=&quot;cocktail.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;pizza.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM26vo/dJMcad2zOZ2/Csq4DhPdDNIAQ8ZznI9v8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM26vo/dJMcad2zOZ2/Csq4DhPdDNIAQ8ZznI9v8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM26vo/dJMcad2zOZ2/Csq4DhPdDNIAQ8ZznI9v8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcM26vo%2FdJMcad2zOZ2%2FCsq4DhPdDNIAQ8ZznI9v8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;512&quot; height=&quot;512&quot; data-filename=&quot;pizza.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;candy.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mmNSo/dJMcahKKdjc/zkAKhs0feUys9kpX9zrVr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mmNSo/dJMcahKKdjc/zkAKhs0feUys9kpX9zrVr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mmNSo/dJMcahKKdjc/zkAKhs0feUys9kpX9zrVr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmmNSo%2FdJMcahKKdjc%2FzkAKhs0feUys9kpX9zrVr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;512&quot; height=&quot;512&quot; data-filename=&quot;candy.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cake.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xdDRX/dJMcag5778X/K67babILC5KXlVIkxOQ781/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xdDRX/dJMcag5778X/K67babILC5KXlVIkxOQ781/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xdDRX/dJMcag5778X/K67babILC5KXlVIkxOQ781/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxdDRX%2FdJMcag5778X%2FK67babILC5KXlVIkxOQ781%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;512&quot; height=&quot;512&quot; data-filename=&quot;cake.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;pre id=&quot;code_1775452365903&quot; class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;//
//  ViewController.swift
//  Food
//
//  Created by 소프트웨어컴퓨터 on 2026/04/06.
//

import UIKit

var food = [&quot;케이크&quot;,&quot;사탕&quot;,&quot;물약&quot;,&quot;피자&quot;,&quot;칵테일&quot;]
var name = [&quot;베이킹 덕&quot;,&quot;찰리의 초콜릿 공장&quot;,&quot;마녀의 오두막&quot;,&quot;프레디의 피자가게&quot;,&quot;야르한 칵테일&quot;]
var image = [&quot;cake.png&quot;, &quot;candy.png&quot;, &quot;flask.png&quot;, &quot;pizza.png&quot;, &quot;cocktail.png&quot;]

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&amp;gt; Int {
        return 5
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&amp;gt; UITableViewCell {
        let cell = UITableViewCell(style: .subtitle, reuseIdentifier: &quot;myCell&quot;)
        cell.textLabel?.text = name[indexPath.row]
        cell.detailTextLabel?.text = food[indexPath.row]
        cell.imageView?.image = UIImage(named: image[indexPath.row])
        return cell
    }

    func numberOfSections(in tableView: UITableView) -&amp;gt; Int {
        return 3
    }
    
    @IBOutlet weak var table: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        table.delegate = self
        table.dataSource = self
        
    }


}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;950&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHAgZj/dJMcacWWk1L/6TnKWAmQysJrMauod87qw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHAgZj/dJMcacWWk1L/6TnKWAmQysJrMauod87qw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHAgZj/dJMcacWWk1L/6TnKWAmQysJrMauod87qw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHAgZj%2FdJMcacWWk1L%2F6TnKWAmQysJrMauod87qw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;441&quot; height=&quot;950&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;950&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;배열을 이용해서 식당 이름과 대표 메뉴를 출력&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BKfg6/dJMcafe7j2O/pkJVL3z6xMK5oAEIK6HgAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BKfg6/dJMcafe7j2O/pkJVL3z6xMK5oAEIK6HgAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BKfg6/dJMcafe7j2O/pkJVL3z6xMK5oAEIK6HgAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBKfg6%2FdJMcafe7j2O%2FpkJVL3z6xMK5oAEIK6HgAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;443&quot; height=&quot;948&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775461118527&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//
//  ViewController.swift
//  Food
//
//  Created by 소프트웨어컴퓨터 on 2026/04/06.
//

import UIKit

var food = [&quot;케이크&quot;,&quot;사탕&quot;,&quot;물약&quot;,&quot;피자&quot;,&quot;칵테일&quot;]
var name = [&quot;베이킹 덕&quot;,&quot;찰리의 초콜릿 공장&quot;,&quot;마녀의 오두막&quot;,&quot;프레디의 피자가게&quot;,&quot;야르한 칵테일&quot;]
var image = [&quot;cake.png&quot;, &quot;candy.png&quot;, &quot;flask.png&quot;, &quot;pizza.png&quot;, &quot;cocktail.png&quot;]

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&amp;gt; Int {
        return 5
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&amp;gt; UITableViewCell {
//        let cell = UITableViewCell(style: .subtitle, reuseIdentifier: &quot;myCell&quot;)
//        cell.textLabel?.text = name[indexPath.row]
//        cell.detailTextLabel?.text = food[indexPath.row]
//        cell.imageView?.image = UIImage(named: image[indexPath.row])
        let cell = tableView.dequeueReusableCell(withIdentifier: &quot;myCell&quot;, for: indexPath) as! MyTableViewCell
        cell.myLable.text = name[indexPath.row]
            return cell
    }

    func numberOfSections(in tableView: UITableView) -&amp;gt; Int {
        return 5
    }
    
    @IBOutlet weak var table: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        table.delegate = self
        table.dataSource = self
        
    }


}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rAkdC/dJMcaaY7XGc/jhVTA5YBfRBEYfErAHvrc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rAkdC/dJMcaaY7XGc/jhVTA5YBfRBEYfErAHvrc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rAkdC/dJMcaaY7XGc/jhVTA5YBfRBEYfErAHvrc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrAkdC%2FdJMcaaY7XGc%2FjhVTA5YBfRBEYfErAHvrc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;347&quot; height=&quot;549&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;pin 툴을 이용해서 constraints를 설정&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/ApsX9/dJMcahKFEeB/AAAAAAAAAAAAAAAAAAAAANJUyu6o0jwL_lKfJvtrFEY7WyoY5rAeIxCn2mHODD2H/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=%2BRh5JG%2BfyZc3GWISA2pFRNbP4I0%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/ApsX9/dJMcahKFEeB/AAAAAAAAAAAAAAAAAAAAANJUyu6o0jwL_lKfJvtrFEY7WyoY5rAeIxCn2mHODD2H/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=%2BRh5JG%2BfyZc3GWISA2pFRNbP4I0%3D&quot;&gt;&lt;/span&gt;pin 툴을 이용해서 constraints를 설정&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여러 개의 constraints를 만들 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-31 오후 4.37.06.png&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mLs9r/dJMcafe7aq3/J1erTBx75AtTKKmcAwhCL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mLs9r/dJMcafe7aq3/J1erTBx75AtTKKmcAwhCL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mLs9r/dJMcafe7aq3/J1erTBx75AtTKKmcAwhCL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmLs9r%2FdJMcafe7aq3%2FJ1erTBx75AtTKKmcAwhCL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;488&quot; height=&quot;529&quot; data-filename=&quot;스크린샷 2026-03-31 오후 4.37.06.png&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;return형 확인&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/bnTvqJ/dJMcahKFEDH/AAAAAAAAAAAAAAAAAAAAAMLPSxyRHuRrUIGvtu4AIcDmjY2H7HbS0_n-NKlKHgIe/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=%2Fw%2BOcye1bzCdwybuLmoq699%2BgnQ%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/bnTvqJ/dJMcahKFEDH/AAAAAAAAAAAAAAAAAAAAAMLPSxyRHuRrUIGvtu4AIcDmjY2H7HbS0_n-NKlKHgIe/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=%2Fw%2BOcye1bzCdwybuLmoq699%2BgnQ%3D&quot;&gt;&lt;/span&gt;return형 확인&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f6e199; color: #ee2323;&quot;&gt;&lt;b&gt;return형 적는 문제 출제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-31 오후 4.38.49.png&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQ9gXy/dJMcagkJyDe/VD4cSackbBHiUpfF2MKFYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQ9gXy/dJMcagkJyDe/VD4cSackbBHiUpfF2MKFYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQ9gXy/dJMcagkJyDe/VD4cSackbBHiUpfF2MKFYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQ9gXy%2FdJMcagkJyDe%2FVD4cSackbBHiUpfF2MKFYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;854&quot; height=&quot;440&quot; data-filename=&quot;스크린샷 2026-03-31 오후 4.38.49.png&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-phocus=&quot;https://blog.kakaocdn.net/dna/Nht20/dJMcahRprVU/AAAAAAAAAAAAAAAAAAAAAIiz_HOonOKoWFh9ZjrFDUq-S1DVGJI8MqDIeMO_G3UF/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=5LKJCjOCn4pcdpAYFJiBzzpsUJg%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/Nht20/dJMcahRprVU/AAAAAAAAAAAAAAAAAAAAAIiz_HOonOKoWFh9ZjrFDUq-S1DVGJI8MqDIeMO_G3UF/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=5LKJCjOCn4pcdpAYFJiBzzpsUJg%3D&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>2026년도 1학기/iOS프로그래밍</category>
      <author>멈뭉밈</author>
      <guid isPermaLink="true">https://dupal-homework.tistory.com/137</guid>
      <comments>https://dupal-homework.tistory.com/137#entry137comment</comments>
      <pubDate>Mon, 6 Apr 2026 14:18:36 +0900</pubDate>
    </item>
    <item>
      <title>iOS프로그래밍_4주차_클래스(class) 상속</title>
      <link>https://dupal-homework.tistory.com/135</link>
      <description>&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 2.18.16.png&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0tpT8/dJMb99MzMKD/BJ5CfpeQk93KrCfCkrYGT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0tpT8/dJMb99MzMKD/BJ5CfpeQk93KrCfCkrYGT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0tpT8/dJMb99MzMKD/BJ5CfpeQk93KrCfCkrYGT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0tpT8%2FdJMb99MzMKD%2FBJ5CfpeQk93KrCfCkrYGT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;787&quot; height=&quot;437&quot; data-filename=&quot;스크린샷 2026-03-24 오후 2.18.16.png&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 외부매개변수명만 생략하는, 4번째 방법을 제일 많이 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.&lt;/h3&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;func add(x: Int, y: Int) -&amp;gt; Int
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수명: add(x:y:)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.&amp;nbsp;&lt;/h3&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;func add(first x: Int, second y: Int) -&amp;gt; Int
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수명: add(first:second:)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.&lt;/h3&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;func add(_ x: Int, _ y: Int) -&amp;gt; Int
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수명:&amp;nbsp;add(_:_) &amp;rarr; 외부 매개변수명 없음&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.&amp;nbsp;&lt;/h3&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;func add(_ x: Int, with y: Int) -&amp;gt; Int
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수명: add(_:with:)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;핵심 정리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Swift는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;외부 매개변수 이름까지 포함해서 함수를 구분한다.&lt;/b&gt;&lt;br /&gt;&amp;rarr; 그래서 오버로딩 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;함수 코드&lt;/h2&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;func tableView(_ tableView: UITableView,
               numberOfRowsInSection section: Int) -&amp;gt; Int {
    return items.count
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 함수명 (호출 시 기준)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Swift에서 함수명은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;외부 매개변수 라벨까지 포함&lt;/b&gt;해서 본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이 함수의 이름은 :&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;tableView(_:numberOfRowsInSection:)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;_는 첫 번째 외부 라벨이 없다는 의미&lt;br /&gt;두 번째는 numberOfRowsInSection&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. 함수 타입 (자료형)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;규칙:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;(매개변수 타입들) -&amp;gt; 반환 타입&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;(UITableView, Int) -&amp;gt; Int
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구분내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;함수명&lt;/td&gt;
&lt;td&gt;tableView(_:numberOfRowsInSection:)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;함수 타입&lt;/td&gt;
&lt;td&gt;(UITableView, Int) -&amp;gt; Int&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;이해 포인트&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;함수명 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;외부 라벨 포함&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;함수 타입 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;타입만, 라벨은 제거&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;한 줄 요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름은 라벨까지, 타입은 타입만 본다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774848299867&quot; class=&quot;swift&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;func print(
    _ items: Any...,
    separator: String = &quot; &quot;,
    terminator: String = &quot;\n&quot;
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&quot;&gt;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1774850862223&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;함수명 오버로딩 설명&quot; data-og-description=&quot;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&quot; data-og-host=&quot;chatgpt.com&quot; data-og-source-url=&quot;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&quot; data-og-url=&quot;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vIpQs/dJMb8YXLxBg/v4GrUPeYdOi329kXYzwbO0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bdSCez/dJMb9gxlru3/scBXGHRmeZKy95cDgMTmt1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vIpQs/dJMb8YXLxBg/v4GrUPeYdOi329kXYzwbO0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bdSCez/dJMb9gxlru3/scBXGHRmeZKy95cDgMTmt1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;함수명 오버로딩 설명&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chatgpt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774848299868&quot; class=&quot;maxima&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;func up(num: Int) -&amp;gt; Int {
    return num + 1
}
func down(num: Int) -&amp;gt; Int {
    return num - 1
}
let toUp = up // Swift 함수는 일급 객체로, 변수나 상수에 저장할 수 있음
print(up(num: 5))
toUp(10)
// print(up(num:10))
// print(toUp(10)) //주의 : argument label인 (num:) 안 씀
// 함수를 변수에 할당하면 argument label(num:)을 생략해야 함
let toDown = down
print(toDown(20))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수를 어떤 변수에 저장할 수 있지만 그 변수로 함수를 호출할 때는 argument label 을 쓰지 않아도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774848299869&quot; class=&quot;reasonml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;colorChangeTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
    let red = CGFloat(arc4random_uniform(256)) / 255.0
    let green = CGFloat(arc4random_uniform(256)) / 255.0
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.13.14.png&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bojUqL/dJMb99MzMKA/p3CHiKxmwxTfUq0mjmnZK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bojUqL/dJMb99MzMKA/p3CHiKxmwxTfUq0mjmnZK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bojUqL/dJMb99MzMKA/p3CHiKxmwxTfUq0mjmnZK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbojUqL%2FdJMb99MzMKA%2Fp3CHiKxmwxTfUq0mjmnZK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;485&quot; height=&quot;356&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.13.14.png&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;자료형&quot; data-phocus=&quot;https://blog.kakaocdn.net/dna/bD3enB/dJMcabwM68d/AAAAAAAAAAAAAAAAAAAAAP9yvls_MnqXI0jdfQVSrshxzRu6nk94l5xcuW9YiUX2/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1774969199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=R8pFUvgzo0s1izk%2FJ19WBg8NN24%3D&quot; data-url=&quot;https://blog.kakaocdn.net/dna/bD3enB/dJMcabwM68d/AAAAAAAAAAAAAAAAAAAAAP9yvls_MnqXI0jdfQVSrshxzRu6nk94l5xcuW9YiUX2/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1774969199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=R8pFUvgzo0s1izk%2FJ19WBg8NN24%3D&quot;&gt;&lt;/span&gt;자료형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.25.54.png&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;24&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGJZ4x/dJMb996UuEn/jf63AB0JNauK497vbGiLl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGJZ4x/dJMb996UuEn/jf63AB0JNauK497vbGiLl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGJZ4x/dJMb996UuEn/jf63AB0JNauK497vbGiLl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGJZ4x%2FdJMb996UuEn%2Fjf63AB0JNauK497vbGiLl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;406&quot; height=&quot;24&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.25.54.png&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;24&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후행 클로저를 자동으로 만들려면 파란 부분에서 엔터키를 누르면 자동으로 클로저로 바뀐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.26.50.png&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGofe1/dJMb99MzMKz/aKjnhlhNpNqOGiE4dzxZ20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGofe1/dJMb99MzMKz/aKjnhlhNpNqOGiE4dzxZ20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGofe1/dJMb99MzMKz/aKjnhlhNpNqOGiE4dzxZ20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGofe1%2FdJMb99MzMKz%2FaKjnhlhNpNqOGiE4dzxZ20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;296&quot; height=&quot;66&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.26.50.png&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nb43T/dJMcajazUtV/EKSPA1lxasSAowQWFqUmlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nb43T/dJMcajazUtV/EKSPA1lxasSAowQWFqUmlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nb43T/dJMcajazUtV/EKSPA1lxasSAowQWFqUmlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnb43T%2FdJMcajazUtV%2FEKSPA1lxasSAowQWFqUmlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;839&quot; height=&quot;484&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;시험범위(꼭나옴 $표시 위주로)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsCUPK/dJMcabjnEUK/CqTbcA1bEVs8SM1kaEoPN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsCUPK/dJMcabjnEUK/CqTbcA1bEVs8SM1kaEoPN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsCUPK/dJMcabjnEUK/CqTbcA1bEVs8SM1kaEoPN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsCUPK%2FdJMcabjnEUK%2FCqTbcA1bEVs8SM1kaEoPN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;861&quot; height=&quot;492&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 data-end=&quot;178&quot; data-start=&quot;154&quot;&gt;1️⃣ 클로저 기본 형태 (가장 풀버전)&lt;/h1&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {(&lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;br /&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;269&quot; data-start=&quot;263&quot; data-ke-size=&quot;size16&quot;&gt;구조 분석:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;부분의미
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;418&quot; data-start=&quot;271&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;418&quot; data-start=&quot;299&quot;&gt;
&lt;tr data-end=&quot;316&quot; data-start=&quot;299&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;306&quot; data-start=&quot;299&quot;&gt;{}&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;316&quot; data-start=&quot;306&quot;&gt;클로저 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;352&quot; data-start=&quot;317&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;344&quot; data-start=&quot;317&quot;&gt;(val1: Int, val2: Int)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;352&quot; data-start=&quot;344&quot;&gt;매개변수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;373&quot; data-start=&quot;353&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;364&quot; data-start=&quot;353&quot;&gt;-&amp;gt; Int&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;373&quot; data-start=&quot;364&quot;&gt;반환 타입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;399&quot; data-start=&quot;374&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;381&quot; data-start=&quot;374&quot;&gt;in&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;399&quot; data-start=&quot;381&quot;&gt;매개변수와 실행 코드 구분&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;418&quot; data-start=&quot;400&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;411&quot; data-start=&quot;400&quot;&gt;return&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;418&quot; data-start=&quot;411&quot;&gt;반환값&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;422&quot; data-start=&quot;420&quot; data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;blockquote data-end=&quot;450&quot; data-start=&quot;424&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;450&quot; data-start=&quot;426&quot; data-ke-size=&quot;size16&quot;&gt;두 Int 받아서 Int 반환하는 익명 함수&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;455&quot; data-start=&quot;452&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;474&quot; data-start=&quot;457&quot;&gt;2️⃣ 클로저를 함수에 전달&lt;/h1&gt;
&lt;p data-end=&quot;491&quot; data-start=&quot;476&quot; data-ke-size=&quot;size16&quot;&gt;함수가 이렇게 있다고 가정:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;math&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;cal&lt;/span&gt;&lt;span&gt;: (&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;592&quot; data-start=&quot;589&quot; data-ke-size=&quot;size16&quot;&gt;사용:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;math&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;cal&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;648&quot; data-start=&quot;646&quot; data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;p data-end=&quot;671&quot; data-start=&quot;650&quot; data-ke-size=&quot;size16&quot;&gt;add 클로저를 cal 자리에 넣은 것&lt;/p&gt;
&lt;hr data-end=&quot;676&quot; data-start=&quot;673&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;699&quot; data-start=&quot;678&quot;&gt;3️⃣ 클로저를 직접 작성해서 전달&lt;/h1&gt;
&lt;p data-end=&quot;713&quot; data-start=&quot;701&quot; data-ke-size=&quot;size16&quot;&gt;변수 없이 바로 넣기:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;math&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;cal&lt;/span&gt;&lt;span&gt;: {(&lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;br /&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;br /&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;824&quot; data-start=&quot;822&quot; data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;p data-end=&quot;842&quot; data-start=&quot;826&quot; data-ke-size=&quot;size16&quot;&gt;클로저를 inline으로 작성&lt;/p&gt;
&lt;hr data-end=&quot;847&quot; data-start=&quot;844&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;874&quot; data-start=&quot;849&quot;&gt;4️⃣ trailing closure 문법&lt;/h1&gt;
&lt;p data-end=&quot;904&quot; data-start=&quot;876&quot; data-ke-size=&quot;size16&quot;&gt;클로저가 마지막 매개변수이면 괄호 밖으로 이동 가능&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;math&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;) {(&lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;br /&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1010&quot; data-start=&quot;1007&quot; data-ke-size=&quot;size16&quot;&gt;여기서&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;cal:&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1029&quot; data-start=&quot;1026&quot; data-ke-size=&quot;size16&quot;&gt;생략됨&lt;/p&gt;
&lt;p data-end=&quot;1057&quot; data-start=&quot;1031&quot; data-ke-size=&quot;size16&quot;&gt;이걸 trailing closure라고 합니다.&lt;/p&gt;
&lt;hr data-end=&quot;1062&quot; data-start=&quot;1059&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1084&quot; data-start=&quot;1064&quot;&gt;5️⃣ 타입 추론으로 반환형 생략&lt;/h1&gt;
&lt;p data-end=&quot;1105&quot; data-start=&quot;1086&quot; data-ke-size=&quot;size16&quot;&gt;Swift는 타입을 이미 알고 있음&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;(Int, Int) -&amp;gt; Int&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1143&quot; data-start=&quot;1134&quot; data-ke-size=&quot;size16&quot;&gt;그래서 생략 가능&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;math&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;) {(&lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;br /&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1242&quot; data-start=&quot;1239&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1285&quot; data-start=&quot;1244&quot;&gt;6️⃣ shorthand argument name 사용 ($0, $1)&lt;/h1&gt;
&lt;p data-end=&quot;1301&quot; data-start=&quot;1287&quot; data-ke-size=&quot;size16&quot;&gt;매개변수 이름도 생략 가능&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;math&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1371&quot; data-start=&quot;1368&quot; data-ke-size=&quot;size16&quot;&gt;의미:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;기호의미
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1438&quot; data-start=&quot;1373&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1438&quot; data-start=&quot;1401&quot;&gt;
&lt;tr data-end=&quot;1419&quot; data-start=&quot;1401&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1406&quot; data-start=&quot;1401&quot;&gt;$0&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1419&quot; data-start=&quot;1406&quot;&gt;첫 번째 매개변수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1438&quot; data-start=&quot;1420&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1425&quot; data-start=&quot;1420&quot;&gt;$1&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1438&quot; data-start=&quot;1425&quot;&gt;두 번째 매개변수&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1443&quot; data-start=&quot;1440&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1463&quot; data-start=&quot;1445&quot;&gt;7️⃣ return 생략 가능&lt;/h1&gt;
&lt;p data-end=&quot;1482&quot; data-start=&quot;1465&quot; data-ke-size=&quot;size16&quot;&gt;클로저가 한 줄이면 자동 반환됨&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;math&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1554&quot; data-start=&quot;1542&quot; data-ke-size=&quot;size16&quot;&gt;이게 최종 축약형  &lt;/p&gt;
&lt;hr data-end=&quot;1559&quot; data-start=&quot;1556&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1592&quot; data-start=&quot;1561&quot;&gt;8️⃣ multiply 예제 (클로저를 변수에 저장)&lt;/h1&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;multiply&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {(&lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;br /&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1685&quot; data-start=&quot;1682&quot; data-ke-size=&quot;size16&quot;&gt;사용:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;multiply&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1720&quot; data-start=&quot;1718&quot; data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;p data-end=&quot;1732&quot; data-start=&quot;1722&quot; data-ke-size=&quot;size16&quot;&gt;함수처럼 호출 가능&lt;/p&gt;
&lt;p data-end=&quot;1745&quot; data-start=&quot;1734&quot; data-ke-size=&quot;size16&quot;&gt;왜냐하면 Swift는&lt;/p&gt;
&lt;blockquote data-end=&quot;1760&quot; data-start=&quot;1747&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1760&quot; data-start=&quot;1749&quot; data-ke-size=&quot;size16&quot;&gt;클로저 = 1급 객체&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;1767&quot; data-start=&quot;1762&quot; data-ke-size=&quot;size16&quot;&gt;이기 때문&lt;/p&gt;
&lt;hr data-end=&quot;1772&quot; data-start=&quot;1769&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1798&quot; data-start=&quot;1774&quot;&gt;9️⃣ 함수 자체도 클로저처럼 전달 가능&lt;/h1&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;math&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;cal&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;multiply&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1864&quot; data-start=&quot;1857&quot; data-ke-size=&quot;size16&quot;&gt;함수도 가능:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;math&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;cal&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1930&quot; data-start=&quot;1918&quot; data-ke-size=&quot;size16&quot;&gt;왜냐하면 Swift에서&lt;/p&gt;
&lt;p data-end=&quot;1947&quot; data-start=&quot;1932&quot; data-ke-size=&quot;size16&quot;&gt;함수 타입 == 클로저 타입&lt;/p&gt;
&lt;p data-end=&quot;1954&quot; data-start=&quot;1949&quot; data-ke-size=&quot;size16&quot;&gt;이기 때문&lt;/p&gt;
&lt;hr data-end=&quot;1959&quot; data-start=&quot;1956&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1980&quot; data-start=&quot;1961&quot;&gt;  축약 과정 전체 흐름 정리&lt;/h1&gt;
&lt;p data-end=&quot;1988&quot; data-start=&quot;1982&quot; data-ke-size=&quot;size16&quot;&gt;이 코드가:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;{ (&lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;br /&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;val2&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2074&quot; data-start=&quot;2064&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 줄어듭니다:&lt;/p&gt;
&lt;p data-end=&quot;2084&quot; data-start=&quot;2076&quot; data-ke-size=&quot;size16&quot;&gt;① 반환형 생략&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;{ (val1: Int, val2: Int) in&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2135&quot; data-start=&quot;2123&quot; data-ke-size=&quot;size16&quot;&gt;② 매개변수 이름 생략&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;{ $0, $1 in&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2169&quot; data-start=&quot;2158&quot; data-ke-size=&quot;size16&quot;&gt;③ return 생략&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;{ $0 + $1 }&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2195&quot; data-start=&quot;2192&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;2214&quot; data-start=&quot;2197&quot;&gt;  시험 핵심 포인트 요약&lt;/h1&gt;
&lt;p data-end=&quot;2232&quot; data-start=&quot;2216&quot; data-ke-size=&quot;size16&quot;&gt;시험에 거의 반드시 나옵니다:&lt;/p&gt;
&lt;p data-end=&quot;2279&quot; data-start=&quot;2234&quot; data-ke-size=&quot;size16&quot;&gt;✔ trailing closure 가능 조건&lt;br /&gt;&amp;rarr; 마지막 매개변수가 클로저일 때&lt;/p&gt;
&lt;p data-end=&quot;2317&quot; data-start=&quot;2281&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;✔ shorthand argument name&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&amp;rarr; $0, $1&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2348&quot; data-start=&quot;2319&quot; data-ke-size=&quot;size16&quot;&gt;✔ 단일 표현식 클로저&lt;br /&gt;&amp;rarr; return 생략 가능&lt;/p&gt;
&lt;p data-end=&quot;2398&quot; data-start=&quot;2350&quot; data-ke-size=&quot;size16&quot;&gt;✔ Swift에서 함수는 1급 객체&lt;br /&gt;&amp;rarr; 변수 저장 가능 / 전달 가능 / 반환 가능&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.40.01.png&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEue2i/dJMb996UuEq/z6aPmbycFb7OkRWhGdM6G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEue2i/dJMb996UuEq/z6aPmbycFb7OkRWhGdM6G0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEue2i/dJMb996UuEq/z6aPmbycFb7OkRWhGdM6G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEue2i%2FdJMb996UuEq%2Fz6aPmbycFb7OkRWhGdM6G0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;924&quot; height=&quot;440&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.40.01.png&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;직접 초기하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1774853018179&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Man{
    var age : Int = 0
    var weight : Double = 0.0
}//오류 나는 이유? 값이 있어야해서&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;자동으로 옵셔널 방법&lt;/p&gt;
&lt;pre id=&quot;code_1774853081687&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Man{
    var age : Int?
    var weight : Double?
}//오류 나는 이유? 값이 있어야해서&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;옵셔널 변수는 자동으로 초기값이 없어도 nil 로 들어간다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자를 주는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1774853178939&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Man{
    var age : Int
    var weight : Double
    init(){ //initializer로 초기화
        age = 1
        weight = 3.5
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체가 만들어 질 떄마다 자동으로 호출하여 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&quot;&gt;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1774848299871&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/cX4pCJ/dJMb87f5YlU/AAAAAAAAAAAAAAAAAAAAAIxZk4P86dl5Vyy4YdVxwXYeNis2dVHil-e5cHPh09qT/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1774969199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=%2B41lBxDQpGPX0eA%2BYgestLSHUvE%3D&quot; data-og-url=&quot;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&quot; data-og-source-url=&quot;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&quot; data-og-host=&quot;chatgpt.com&quot; data-og-description=&quot;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&quot; data-og-title=&quot;함수명 오버로딩 설명&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&quot; data-source-url=&quot;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;함수명 오버로딩 설명&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;chatgpt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.09.07.png&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Xnqa/dJMb99MzMKC/c7UCWBQQeLD4nA1fqtDWT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Xnqa/dJMb99MzMKC/c7UCWBQQeLD4nA1fqtDWT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Xnqa/dJMb99MzMKC/c7UCWBQQeLD4nA1fqtDWT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Xnqa%2FdJMb99MzMKC%2Fc7UCWBQQeLD4nA1fqtDWT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;926&quot; height=&quot;502&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.09.07.png&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;computed property 사용하는 이유&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&quot;&gt;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1774848299871&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/cIN23Q/dJMb8XkeRcC/AAAAAAAAAAAAAAAAAAAAAKWBR9fHA_vSJ0GVcpX_j0o_cPLa40HS8PyfaBxLnEjA/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1774969199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=8hnOKKYlj7RCj%2FVmT%2F8VzVm4jTs%3D&quot; data-og-url=&quot;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&quot; data-og-source-url=&quot;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&quot; data-og-host=&quot;chatgpt.com&quot; data-og-description=&quot;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&quot; data-og-title=&quot;함수명 오버로딩 설명&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&quot; data-source-url=&quot;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;함수명 오버로딩 설명&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;chatgpt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.17.08.png&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ny1kG/dJMb996UuEo/Iu1bLbv0S4RZxjWiMeHiKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ny1kG/dJMb996UuEo/Iu1bLbv0S4RZxjWiMeHiKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ny1kG/dJMb996UuEo/Iu1bLbv0S4RZxjWiMeHiKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fny1kG%2FdJMb996UuEo%2FIu1bLbv0S4RZxjWiMeHiKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;912&quot; height=&quot;511&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.17.08.png&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. Swift&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;override 키워드&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;필수&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;부모 메서드는 기본적으로 virtual 개념 (따로 안 써도 됨)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;final이면 오버라이드 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;class Animal {
    func speak() {
        print(&quot;동물 소리&quot;)
    }
}

class Dog: Animal {
    override func speak() {
        print(&quot;멍멍&quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용&lt;/h2&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;let d = Dog()
d.speak()  // 멍멍
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;override 안 쓰면 컴파일 에러&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. Java&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;@Override는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;선택이지만 거의 필수처럼 사용&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;부모 메서드는 기본적으로 오버라이드 가능&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;final이면 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;scala&quot;&gt;&lt;code&gt;class Animal {
    void speak() {
        System.out.println(&quot;동물 소리&quot;);
    }
}

class Dog extends Animal {
    @Override
    void speak() {
        System.out.println(&quot;멍멍&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;@Override 없어도 동작하지만, 쓰는 게 안전함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. C++&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;override 키워드는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;선택&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;반드시 부모 함수가 virtual이어야 제대로 동작&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

class Animal {
public:
    virtual void speak() {
        cout &amp;lt;&amp;lt; &quot;동물 소리&quot; &amp;lt;&amp;lt; endl;
    }
};

class Dog : public Animal {
public:
    void speak() override {
        cout &amp;lt;&amp;lt; &quot;멍멍&quot; &amp;lt;&amp;lt; endl;
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;virtual 없으면 다형성 깨짐&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;override는 실수 방지용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. Python&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;키워드 없음&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;그냥 같은 이름으로 재정의하면 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;class Animal:
    def speak(self):
        print(&quot;동물 소리&quot;)

class Dog(Animal):
    def speak(self):
        print(&quot;멍멍&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;매우 자유롭지만 실수 잡기 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. JavaScript (ES6 클래스)&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;키워드 없음&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;동일 이름 메서드로 덮어쓰기&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;scala&quot;&gt;&lt;code&gt;class Animal {
  speak() {
    console.log(&quot;동물 소리&quot;);
  }
}

class Dog extends Animal {
  speak() {
    console.log(&quot;멍멍&quot;);
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. C#&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;부모: virtual&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;자식: override&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;필수&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;class Animal {
    public virtual void Speak() {
        Console.WriteLine(&quot;동물 소리&quot;);
    }
}

class Dog : Animal {
    public override void Speak() {
        Console.WriteLine(&quot;멍멍&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Swift랑 비슷하게 override 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. Kotlin&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;부모: open&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;자식: override 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;open class Animal {
    open fun speak() {
        println(&quot;동물 소리&quot;)
    }
}

class Dog : Animal() {
    override fun speak() {
        println(&quot;멍멍&quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;기본적으로 오버라이드 막혀 있음 &amp;rarr; open 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. 정리 비교&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어부모 설정자식 설정특징&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Swift&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;override 필수&lt;/td&gt;
&lt;td&gt;안전함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;@Override (권장)&lt;/td&gt;
&lt;td&gt;유연&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C++&lt;/td&gt;
&lt;td&gt;virtual&lt;/td&gt;
&lt;td&gt;override (권장)&lt;/td&gt;
&lt;td&gt;실수 많음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;가장 자유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JS&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;간단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C#&lt;/td&gt;
&lt;td&gt;virtual&lt;/td&gt;
&lt;td&gt;override 필수&lt;/td&gt;
&lt;td&gt;엄격&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kotlin&lt;/td&gt;
&lt;td&gt;open&lt;/td&gt;
&lt;td&gt;override 필수&lt;/td&gt;
&lt;td&gt;기본 차단&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. 핵심 차이 한 줄 정리&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Swift / C# / Kotlin &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;명시적으로 override 강제&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Java &amp;rarr; 선택적&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;C++ &amp;rarr; virtual 있어야 제대로 동작&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Python / JS &amp;rarr; 그냥 덮어쓰기&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. 진짜 핵심 개념&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예 (Swift):&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;let a: Animal = Dog()
a.speak()   // 멍멍 (오버라이드 덕분)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 다형성(polymorphism)의 핵심이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;모든 프로퍼티를 다 초기화 시키는 생성자를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;designated initializer&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라고 한다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774848299879&quot; class=&quot;zephir&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;extension Double { //extension : 원래 있는 기능을 확장
    var squared : Double {
        return self*self
    }
}
let myValue: Double = 3.5
print(myValue.squared) //과제
print(3.5.squared) //Double형 값에도 .으로 바로 사용 가능
print(myValue.isZero) //instance property, 결과?
0.0.isZero&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;12.25&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;12.25&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;false&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;(2문제정도 나옴) access modifier&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h1 data-end=&quot;101&quot; data-start=&quot;74&quot;&gt;Swift Access Modifier 정리표&lt;/h1&gt;
&lt;div&gt;
&lt;div&gt;접근 제어자접근 가능 범위상속 가능override 가능사용 목적
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;461&quot; data-start=&quot;103&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;461&quot; data-start=&quot;227&quot;&gt;
&lt;tr data-end=&quot;273&quot; data-start=&quot;227&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;234&quot; data-start=&quot;227&quot;&gt;open&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;248&quot; data-start=&quot;234&quot;&gt;다른 모듈에서도 가능&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;253&quot; data-start=&quot;248&quot;&gt;가능&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;258&quot; data-start=&quot;253&quot;&gt;가능&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;273&quot; data-start=&quot;258&quot;&gt;라이브러리 확장 허용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;322&quot; data-start=&quot;274&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;283&quot; data-start=&quot;274&quot;&gt;public&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;297&quot; data-start=&quot;283&quot;&gt;다른 모듈에서도 가능&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;303&quot; data-start=&quot;297&quot;&gt;불가능&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;309&quot; data-start=&quot;303&quot;&gt;불가능&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;322&quot; data-start=&quot;309&quot;&gt;외부 사용만 허용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;364&quot; data-start=&quot;323&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;334&quot; data-start=&quot;323&quot;&gt;internal&lt;/td&gt;
&lt;td data-end=&quot;345&quot; data-start=&quot;334&quot; data-col-size=&quot;sm&quot;&gt;같은 모듈 내부&lt;/td&gt;
&lt;td data-end=&quot;350&quot; data-start=&quot;345&quot; data-col-size=&quot;sm&quot;&gt;가능&lt;/td&gt;
&lt;td data-end=&quot;355&quot; data-start=&quot;350&quot; data-col-size=&quot;sm&quot;&gt;가능&lt;/td&gt;
&lt;td data-end=&quot;364&quot; data-start=&quot;355&quot; data-col-size=&quot;sm&quot;&gt;기본 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;412&quot; data-start=&quot;365&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;379&quot; data-start=&quot;365&quot;&gt;fileprivate&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;390&quot; data-start=&quot;379&quot;&gt;같은 파일 내부&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;395&quot; data-start=&quot;390&quot;&gt;가능&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;400&quot; data-start=&quot;395&quot;&gt;가능&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;412&quot; data-start=&quot;400&quot;&gt;파일 단위 공유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;461&quot; data-start=&quot;413&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;423&quot; data-start=&quot;413&quot;&gt;private&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;437&quot; data-start=&quot;423&quot;&gt;같은 선언 블록 내부&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;443&quot; data-start=&quot;437&quot;&gt;제한적&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;449&quot; data-start=&quot;443&quot;&gt;제한적&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;461&quot; data-start=&quot;449&quot;&gt;완전 내부 보호&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;466&quot; data-start=&quot;463&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;483&quot; data-start=&quot;468&quot;&gt;범위 비교 한 줄 요약표&lt;/h1&gt;
&lt;p data-end=&quot;502&quot; data-start=&quot;485&quot; data-ke-size=&quot;size16&quot;&gt;접근 범위는 이렇게 넓어집니다:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;private &amp;lt; fileprivate &amp;lt; internal &amp;lt; public &amp;lt; open&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;594&quot; data-start=&quot;562&quot; data-ke-size=&quot;size16&quot;&gt;왼쪽일수록 더 제한적  &lt;br /&gt;오른쪽일수록 더 공개적  &lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.47.00.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLyXAs/dJMcaaxZzwO/CNFkVj96uawvYNyEYltXm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLyXAs/dJMcaaxZzwO/CNFkVj96uawvYNyEYltXm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLyXAs/dJMcaaxZzwO/CNFkVj96uawvYNyEYltXm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLyXAs%2FdJMcaaxZzwO%2FCNFkVj96uawvYNyEYltXm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;947&quot; height=&quot;486&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.47.00.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;reaction-142&quot; data-tistory-react-app=&quot;Reaction&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div data-category-visibility=&quot;public&quot; data-entry-visibility=&quot;public&quot; data-entry-id=&quot;142&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 외부매개변수명만 생략하는, 4번째 방법을 제일 많이 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.&lt;/h3&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;func add(x: Int, y: Int) -&amp;gt; Int
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수명: add(x:y:)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.&amp;nbsp;&lt;/h3&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;func add(first x: Int, second y: Int) -&amp;gt; Int
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수명: add(first:second:)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.&lt;/h3&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;func add(_ x: Int, _ y: Int) -&amp;gt; Int
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수명:&amp;nbsp;add(_:_) &amp;rarr; 외부 매개변수명 없음&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.&amp;nbsp;&lt;/h3&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;func add(_ x: Int, with y: Int) -&amp;gt; Int
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수명: add(_:with:)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;핵심 정리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Swift는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;외부 매개변수 이름까지 포함해서 함수를 구분한다.&lt;/b&gt;&lt;br /&gt;&amp;rarr; 그래서 오버로딩 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;함수 코드&lt;/h2&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;func tableView(_ tableView: UITableView,
               numberOfRowsInSection section: Int) -&amp;gt; Int {
    return items.count
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 함수명 (호출 시 기준)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Swift에서 함수명은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;외부 매개변수 라벨까지 포함&lt;/b&gt;해서 본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이 함수의 이름은 :&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;tableView(_:numberOfRowsInSection:)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;_는 첫 번째 외부 라벨이 없다는 의미&lt;br /&gt;두 번째는 numberOfRowsInSection&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. 함수 타입 (자료형)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;규칙:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;(매개변수 타입들) -&amp;gt; 반환 타입&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;(UITableView, Int) -&amp;gt; Int
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구분내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;함수명&lt;/td&gt;
&lt;td&gt;tableView(_:numberOfRowsInSection:)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;함수 타입&lt;/td&gt;
&lt;td&gt;(UITableView, Int) -&amp;gt; Int&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;이해 포인트&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;함수명 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;외부 라벨 포함&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;함수 타입 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;타입만, 라벨은 제거&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;한 줄 요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름은 라벨까지, 타입은 타입만 본다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774848281117&quot; class=&quot;swift&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;func print(
    _ items: Any...,
    separator: String = &quot; &quot;,
    terminator: String = &quot;\n&quot;
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&quot;&gt;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1774848281118&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/duk3VP/dJMb87NVUH7/AAAAAAAAAAAAAAAAAAAAANSzO8P465n3RzAy-nCH6hMqxTJfhnv0oFcCPGc2Uprs/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1774969199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=KQzZoiPA26A%2BwCb8mkLnq2FkD1E%3D&quot; data-og-url=&quot;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&quot; data-og-source-url=&quot;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&quot; data-og-host=&quot;chatgpt.com&quot; data-og-description=&quot;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&quot; data-og-title=&quot;함수명 오버로딩 설명&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&quot; data-source-url=&quot;https://chatgpt.com/s/t_69c2225cb834819193abb9e5f7dbe726&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;함수명 오버로딩 설명&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;chatgpt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774848281118&quot; class=&quot;maxima&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;func up(num: Int) -&amp;gt; Int {
    return num + 1
}
func down(num: Int) -&amp;gt; Int {
    return num - 1
}
let toUp = up // Swift 함수는 일급 객체로, 변수나 상수에 저장할 수 있음
print(up(num: 5))
toUp(10)
// print(up(num:10))
// print(toUp(10)) //주의 : argument label인 (num:) 안 씀
// 함수를 변수에 할당하면 argument label(num:)을 생략해야 함
let toDown = down
print(toDown(20))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수를 어떤 변수에 저장할 수 있지만 그 변수로 함수를 호출할 때는 argument label 을 쓰지 않아도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774848281119&quot; class=&quot;reasonml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;colorChangeTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
    let red = CGFloat(arc4random_uniform(256)) / 255.0
    let green = CGFloat(arc4random_uniform(256)) / 255.0
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.13.14.png&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3m3ju/dJMcahcNipx/NmCdCnHhN2n43gUetyghmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3m3ju/dJMcahcNipx/NmCdCnHhN2n43gUetyghmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3m3ju/dJMcahcNipx/NmCdCnHhN2n43gUetyghmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3m3ju%2FdJMcahcNipx%2FNmCdCnHhN2n43gUetyghmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;485&quot; height=&quot;356&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.13.14.png&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
자료형
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.25.54.png&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;24&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjlNHp/dJMcahcNipy/evVEkAICsxMjpTflUHFykk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjlNHp/dJMcahcNipy/evVEkAICsxMjpTflUHFykk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjlNHp/dJMcahcNipy/evVEkAICsxMjpTflUHFykk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjlNHp%2FdJMcahcNipy%2FevVEkAICsxMjpTflUHFykk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;406&quot; height=&quot;24&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.25.54.png&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;24&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후행 클로저를 자동으로 만들려면 파란 부분에서 엔터키를 누르면 자동으로 클로저로 바뀐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.26.50.png&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bR0enb/dJMcaaY2jyx/fF08JXeVg0D5drF7k1AnOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bR0enb/dJMcaaY2jyx/fF08JXeVg0D5drF7k1AnOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bR0enb/dJMcaaY2jyx/fF08JXeVg0D5drF7k1AnOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbR0enb%2FdJMcaaY2jyx%2FfF08JXeVg0D5drF7k1AnOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;296&quot; height=&quot;66&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.26.50.png&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.40.01.png&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k7S7t/dJMcaaY2jyD/BF5dKeZh7oHQGobFjYOvMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k7S7t/dJMcaaY2jyD/BF5dKeZh7oHQGobFjYOvMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k7S7t/dJMcaaY2jyD/BF5dKeZh7oHQGobFjYOvMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk7S7t%2FdJMcaaY2jyD%2FBF5dKeZh7oHQGobFjYOvMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;924&quot; height=&quot;440&quot; data-filename=&quot;스크린샷 2026-03-24 오후 3.40.01.png&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵셔널 변수는 자동으로 초기값이 없어도 nil 로 들어간다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&quot;&gt;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1774848281121&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/cX4pCJ/dJMb87f5YlU/AAAAAAAAAAAAAAAAAAAAAIxZk4P86dl5Vyy4YdVxwXYeNis2dVHil-e5cHPh09qT/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1774969199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=%2B41lBxDQpGPX0eA%2BYgestLSHUvE%3D&quot; data-og-url=&quot;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&quot; data-og-source-url=&quot;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&quot; data-og-host=&quot;chatgpt.com&quot; data-og-description=&quot;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&quot; data-og-title=&quot;함수명 오버로딩 설명&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&quot; data-source-url=&quot;https://chatgpt.com/s/t_69c237f3f1b48191baf112d4baaed702&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;함수명 오버로딩 설명&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;chatgpt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.09.07.png&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzSFg6/dJMb996UuCQ/KuKvEUsbInu0APuj9mgcf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzSFg6/dJMb996UuCQ/KuKvEUsbInu0APuj9mgcf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzSFg6/dJMb996UuCQ/KuKvEUsbInu0APuj9mgcf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzSFg6%2FdJMb996UuCQ%2FKuKvEUsbInu0APuj9mgcf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;926&quot; height=&quot;502&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.09.07.png&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;computed property 사용하는 이유&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&quot;&gt;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1774848281122&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/cIN23Q/dJMb8XkeRcC/AAAAAAAAAAAAAAAAAAAAAKWBR9fHA_vSJ0GVcpX_j0o_cPLa40HS8PyfaBxLnEjA/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1774969199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=8hnOKKYlj7RCj%2FVmT%2F8VzVm4jTs%3D&quot; data-og-url=&quot;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&quot; data-og-source-url=&quot;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&quot; data-og-host=&quot;chatgpt.com&quot; data-og-description=&quot;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&quot; data-og-title=&quot;함수명 오버로딩 설명&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&quot; data-source-url=&quot;https://chatgpt.com/s/t_69c23963f4d0819190a670582488ae49&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;함수명 오버로딩 설명&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT가 답변을 듣고, 영감을 얻고, 생산력을 높이는 데 도움을 드립니다.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;chatgpt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.17.08.png&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NWQhx/dJMcaaY2jyv/KGJW1RHj1EWKcIDMoF0hL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NWQhx/dJMcaaY2jyv/KGJW1RHj1EWKcIDMoF0hL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NWQhx/dJMcaaY2jyv/KGJW1RHj1EWKcIDMoF0hL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNWQhx%2FdJMcaaY2jyv%2FKGJW1RHj1EWKcIDMoF0hL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;912&quot; height=&quot;511&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.17.08.png&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. Swift&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;override 키워드&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;필수&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;부모 메서드는 기본적으로 virtual 개념 (따로 안 써도 됨)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;final이면 오버라이드 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;class Animal {
    func speak() {
        print(&quot;동물 소리&quot;)
    }
}

class Dog: Animal {
    override func speak() {
        print(&quot;멍멍&quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용&lt;/h2&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;let d = Dog()
d.speak()  // 멍멍
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;override 안 쓰면 컴파일 에러&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. Java&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;@Override는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;선택이지만 거의 필수처럼 사용&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;부모 메서드는 기본적으로 오버라이드 가능&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;final이면 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;scala&quot;&gt;&lt;code&gt;class Animal {
    void speak() {
        System.out.println(&quot;동물 소리&quot;);
    }
}

class Dog extends Animal {
    @Override
    void speak() {
        System.out.println(&quot;멍멍&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;@Override 없어도 동작하지만, 쓰는 게 안전함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. C++&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;override 키워드는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;선택&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;반드시 부모 함수가 virtual이어야 제대로 동작&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

class Animal {
public:
    virtual void speak() {
        cout &amp;lt;&amp;lt; &quot;동물 소리&quot; &amp;lt;&amp;lt; endl;
    }
};

class Dog : public Animal {
public:
    void speak() override {
        cout &amp;lt;&amp;lt; &quot;멍멍&quot; &amp;lt;&amp;lt; endl;
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;virtual 없으면 다형성 깨짐&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;override는 실수 방지용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. Python&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;키워드 없음&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;그냥 같은 이름으로 재정의하면 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;class Animal:
    def speak(self):
        print(&quot;동물 소리&quot;)

class Dog(Animal):
    def speak(self):
        print(&quot;멍멍&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;매우 자유롭지만 실수 잡기 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. JavaScript (ES6 클래스)&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;키워드 없음&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;동일 이름 메서드로 덮어쓰기&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;scala&quot;&gt;&lt;code&gt;class Animal {
  speak() {
    console.log(&quot;동물 소리&quot;);
  }
}

class Dog extends Animal {
  speak() {
    console.log(&quot;멍멍&quot;);
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. C#&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;부모: virtual&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;자식: override&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;필수&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;class Animal {
    public virtual void Speak() {
        Console.WriteLine(&quot;동물 소리&quot;);
    }
}

class Dog : Animal {
    public override void Speak() {
        Console.WriteLine(&quot;멍멍&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Swift랑 비슷하게 override 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. Kotlin&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;부모: open&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;자식: override 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;open class Animal {
    open fun speak() {
        println(&quot;동물 소리&quot;)
    }
}

class Dog : Animal() {
    override fun speak() {
        println(&quot;멍멍&quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;기본적으로 오버라이드 막혀 있음 &amp;rarr; open 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. 정리 비교&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어부모 설정자식 설정특징&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Swift&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;override 필수&lt;/td&gt;
&lt;td&gt;안전함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;@Override (권장)&lt;/td&gt;
&lt;td&gt;유연&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C++&lt;/td&gt;
&lt;td&gt;virtual&lt;/td&gt;
&lt;td&gt;override (권장)&lt;/td&gt;
&lt;td&gt;실수 많음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;가장 자유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JS&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;간단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C#&lt;/td&gt;
&lt;td&gt;virtual&lt;/td&gt;
&lt;td&gt;override 필수&lt;/td&gt;
&lt;td&gt;엄격&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kotlin&lt;/td&gt;
&lt;td&gt;open&lt;/td&gt;
&lt;td&gt;override 필수&lt;/td&gt;
&lt;td&gt;기본 차단&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. 핵심 차이 한 줄 정리&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Swift / C# / Kotlin &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;명시적으로 override 강제&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Java &amp;rarr; 선택적&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;C++ &amp;rarr; virtual 있어야 제대로 동작&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Python / JS &amp;rarr; 그냥 덮어쓰기&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. 진짜 핵심 개념&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오버라이드는 단순히 덮어쓰는 게 아니라&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #000000; color: #333333; text-align: center;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;부모 타입으로 다뤄도 자식의 동작이 실행되게 하는 것&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예 (Swift):&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;let a: Animal = Dog()
a.speak()   // 멍멍 (오버라이드 덕분)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 다형성(polymorphism)의 핵심이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;모든 프로퍼티를 다 초기화 시키는 생성자를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;designated initializer&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라고 한다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774848281133&quot; class=&quot;zephir&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;extension Double { //extension : 원래 있는 기능을 확장
    var squared : Double {
        return self*self
    }
}
let myValue: Double = 3.5
print(myValue.squared) //과제
print(3.5.squared) //Double형 값에도 .으로 바로 사용 가능
print(myValue.isZero) //instance property, 결과?
0.0.isZero&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;12.25&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;12.25&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;false&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;access modifier&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.43.27.png&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beqpc1/dJMb996UuCP/6OO0vk3PJOCqZOnuFlNcAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beqpc1/dJMb996UuCP/6OO0vk3PJOCqZOnuFlNcAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beqpc1/dJMb996UuCP/6OO0vk3PJOCqZOnuFlNcAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbeqpc1%2FdJMb996UuCP%2F6OO0vk3PJOCqZOnuFlNcAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;740&quot; height=&quot;472&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.43.27.png&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.47.00.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TMDMh/dJMb996UuCR/n1RoXokpGRh6hqPYNogb31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TMDMh/dJMb996UuCR/n1RoXokpGRh6hqPYNogb31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TMDMh/dJMb996UuCR/n1RoXokpGRh6hqPYNogb31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTMDMh%2FdJMb996UuCR%2Fn1RoXokpGRh6hqPYNogb31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;947&quot; height=&quot;486&quot; data-filename=&quot;스크린샷 2026-03-24 오후 4.47.00.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;reaction-142&quot; data-tistory-react-app=&quot;Reaction&quot;&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;좋아요&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공감&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;공유하기&lt;/span&gt;&lt;/div&gt;
&lt;div data-category-visibility=&quot;public&quot; data-entry-visibility=&quot;public&quot; data-entry-id=&quot;142&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;게시글 관리&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-is-only-node=&quot;&quot; data-is-last-node=&quot;&quot; data-end=&quot;634&quot; data-start=&quot;521&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2026년도 1학기/iOS프로그래밍</category>
      <author>멈뭉밈</author>
      <guid isPermaLink="true">https://dupal-homework.tistory.com/135</guid>
      <comments>https://dupal-homework.tistory.com/135#entry135comment</comments>
      <pubDate>Mon, 30 Mar 2026 15:17:36 +0900</pubDate>
    </item>
  </channel>
</rss>