<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>그냥 개발 공부</title>
    <link>https://smartdeveloper.tistory.com/</link>
    <description>iOS 개발 블로그 입니다. </description>
    <language>ko</language>
    <pubDate>Thu, 11 Jun 2026 03:37:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>snapshot</managingEditor>
    <item>
      <title>나만의 코딩 스탠다드 계속 업데이트 할 것이다.(Siwft, Objectvie C, iOS, xcode)</title>
      <link>https://smartdeveloper.tistory.com/entry/%EB%82%98%EB%A7%8C%EC%9D%98-%EC%BD%94%EB%94%A9-%EC%8A%A4%ED%83%A0%EB%8B%A4%EB%93%9C-%EA%B3%84%EC%86%8D-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%ED%95%A0-%EA%B2%83%EC%9D%B4%EB%8B%A4Siwft-Objectvie-C-iOS-xcode</link>
      <description>&lt;p&gt;일단 swiftLint가 있던데..&lt;/p&gt;
&lt;p&gt;사실 그런걸로 코드가 잘 읽혀지고 아니고는 아닌거 같다. 그건 그 사람 스타일인거 같고..&lt;/p&gt;
&lt;p&gt;우리가 남의 코드를 볼때 어렵다고 생각되는건..나와 다른 패턴, 아키텍처가 다른 큰 부분간다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 나만의 기준을 가지고 개발을 하며 회사에 맞게 유연하게 맞춰가는게 나은거 같다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 그냥 생각나는 대로 적었지만..차근착은 다듬을 것이며 추가와 삭제도 할 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데이터&lt;/p&gt;
&lt;p&gt;싱글톤 패턴 : 앱이 살아 있는 동안만 사용하고 휘발성이 있는 경우, 서버에서 계속적으로 변할 경우, 유저의 프로필, 기타 변하는 데이터 정보&lt;/p&gt;
&lt;p&gt;데이터 이동&lt;/p&gt;
&lt;p&gt;옵저버 패턴 : 한번의 이벤트로 여러곳에서 정보가 변경 될 경우, 프로필 사진, 결제 정보가 바뀔시 리스트 정보들&lt;/p&gt;
&lt;p&gt;델리게이트 패턴 : 어떤 클래스에서 다른 클래스에 이벤트를 대신 처리 할때, 이 경우는 특히 버튼 클릭시 동기적인 이벤트에는 이런 패턴을 사용&lt;/p&gt;
&lt;p&gt;클로저,블록 : 비동기적인 이벤트 예를 들면 통신과 같이 호출 후 즉각적인 대응이 없을 수 있는 경우 사용&lt;/p&gt;
&lt;p&gt;아키텍처&lt;/p&gt;
&lt;p&gt;MVC : 정말 정말 간단한 화면, 이벤트가 하나인 경우, 통신조차도 필요가 없는 경우..는 무조건 간단히 이걸 쓴다.&lt;/p&gt;
&lt;p&gt;MVP : 기본적으로 사용하는 아키텍처로..VIewController는 뷰 Protocol 상속, Presenter는 Presenter Protocol 사용, 네트워크 통신 및 모델 세팅을 해줌, ViewController 와 Presenter는 Protocol 함수를 통하여 서로 1:1로 매칭, Protocol로 서로 통신을 하기 때문에 View의 경우 서버 API가 나오지 않았을 경우 덤프 데이터를 가진 PresenterProtocol을 상속받은 테스트 presneter로 개발,&lt;/p&gt;
&lt;p&gt;viewProtocol은 이벤트에 대한 함수, Presenter의 경우 뷰에서 동작할 함수 및, 네트워크, 모델에 관련된 정보를 함수로 제공&lt;/p&gt;
&lt;p&gt;MVVM : 뷰가 여러개의 모델을 조합해서 보여질 경우, 사용 경험이 없음&lt;/p&gt;
&lt;p&gt;디자인&lt;/p&gt;
&lt;p&gt;Storyboard 기반으로 디자인&lt;/p&gt;
&lt;p&gt;Storyboard의 경우 다른 개발자와 충돌이 자주 일어날 수 있으므로 작게 여러개 만든다.&lt;/p&gt;
&lt;p&gt;cell 같은 경우는 기본적으로 xib로 개발, 왜나하면 한 화면에 하나만 사용하는 cell이 있는 경우가 있지만 대부분 다른 화면에서도 공통적으로 사용하기 때문에 디자인 변경시 관리가 편함&lt;/p&gt;
&lt;p&gt;color : ios13부터는 다크모드를 대응해야 함. 그래서 color assets를 만들고 color extention으로 관리&lt;/p&gt;
&lt;p&gt;네트워크&lt;/p&gt;
&lt;p&gt;swift는 alamofire를 wrapping 하여 기본적으로 header 정보 및 네트워크 fail때 wrapping한 곳에서 1차 처리 (fail이지만 유저에게는 알려주지 않아도 되는 오류콛가 있기에..), 그리고 그 api를 사용하는 부분에서 2차 처리&lt;/p&gt;
&lt;p&gt;if let, guard let&lt;/p&gt;
&lt;p&gt;일단 guard let을 우선시 사용, 위에서 부터 사용해서 에러 처리 및 코드 보기에 깔끔함, 물론 위에서 오류가 없는 경우 밑에서도 guard let 의 변수를 사용 할 수 있다.&lt;/p&gt;
&lt;p&gt;if let읜 간단히 사용할 때나 최대한 2뎁스는 안들어가게 사용, 특히 if let aa , let bb = &lt;a href=&quot;http://aa.cc&quot;&gt;aa.&lt;/a&gt;aa , let cc = bb.aa 이런식을 최대한 자제를 함..차라리 옵셔널 체이닝을 사용&lt;/p&gt;</description>
      <category>iOS</category>
      <author>snapshot</author>
      <guid isPermaLink="true">https://smartdeveloper.tistory.com/53</guid>
      <comments>https://smartdeveloper.tistory.com/entry/%EB%82%98%EB%A7%8C%EC%9D%98-%EC%BD%94%EB%94%A9-%EC%8A%A4%ED%83%A0%EB%8B%A4%EB%93%9C-%EA%B3%84%EC%86%8D-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%ED%95%A0-%EA%B2%83%EC%9D%B4%EB%8B%A4Siwft-Objectvie-C-iOS-xcode#entry53comment</comments>
      <pubDate>Fri, 18 Oct 2019 17:58:31 +0900</pubDate>
    </item>
    <item>
      <title>ARC, 순환참조와 소유권 지시어 (iOS, xcode)</title>
      <link>https://smartdeveloper.tistory.com/entry/ARC-%EC%88%9C%ED%99%98%EC%B0%B8%EC%A1%B0%EC%99%80-%EC%86%8C%EC%9C%A0%EA%B6%8C-%EC%A7%80%EC%8B%9C%EC%96%B4-iOS-xcode-1</link>
      <description>&lt;h1&gt;ARC, 순환참조와 소유권 지시어 (iOS, xcode)&lt;/h1&gt;
&lt;p&gt;&quot;iOS와 OS 의 메모리 관리와 멀티스레딩 기법&quot; 이란 오래된 책을 다시 요즘에 읽어 소유권 지시어에 대한 내용을 적어 본다.&lt;/p&gt;
&lt;p&gt;ARC (Automatic Reference counting)은 메모리 관리를 컴파일러가 직접 한다. iOS 개발을 처음 시작 할 때는 retain/release의 코드를 직접 넣어 주어 메모리 관리를 했다. 하지만 ARC가 나오면서 release를 실수로 잘못 넣어주어 런타임 크래쉬를 안 봐도 되고 메모리 관리도 쉽게 도와주었다. 물론 순환 참조는 아직 유의를 해야 하지만..&lt;/p&gt;
&lt;p&gt;일단 ARC가 나오면서 strong, weak라는 새로 등장한 소유권 지시어가 나왔기 때문에 설명을 이어가겠다.&lt;/p&gt;
&lt;p&gt;레퍼런스 카운팅의 규칙&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;직접 만든 객체는 소유권을 갖는다.&lt;/li&gt;
&lt;li&gt;ratain을 사용해 객체의 소유권을 가져올 수 있다.( ARC 이전 이야기)&lt;/li&gt;
&lt;li&gt;객체가 더이상 필요하지 않으면 소유권을 제거해야 한다.&lt;/li&gt;
&lt;li&gt;소유하지 않은 객체의 소유권을 제거해서는 안 된다. (ARC 이전 이야기)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;strong : 흔히 강한참조로 ARC 환경에서는 release 메서드가 컴파일시 자동으로 추가되고 참조시 reference count가 증가, 해제시 감소 되어 0이 되었을 경우 메모리에서 제거가 된다.&lt;/p&gt;
&lt;p&gt;//밑의 예제는 책에서는 Objective - c로 되어 있지만 swift로 바꿔서 설명을 해봄&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;pre id=&quot;code_1570783631599&quot; class=&quot;swift&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1;&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Object {

}

var obj0 : Object? = Object() // 객체 A
// obj0은 객체 A에 강한 참조를 갖는다.

var obj1 : Object? = Object() // 객체 B
// obj1은 객체 B에 강한 참조를 갖는다.

var obj2 : Object? = nil
// obj2는 참조를 가지 않는다.

obj0 = obj1

/*

obj0은 객체 B에 대한 강한 참조를 갖는데, obj1을 대입한다.
따라서 obj0은 더이상 객체 A에 대한 강한 참조를 갖지 않는다.
객체 A는 더이상 누구도 소유하지 않으므로 제거된다.
이제, obj0과 obj1은 둘 모두 객체 B에 대한 강한 참조를 갖는다.
*/
obj2 = obj0

/*

obj2는 obj0을 통해 객체 B에 대한 강한 참조를 갖는다.
이 시점에서 obj0, obj1, obj2는 모두 객체 B에 대한 강한 참조를 갖는다.
*/
obj1 = nil
/*

obj1에 nil이 대입되었으므로 객체 B에 대한 강한 참조는 사라진다.
이 시점에서 obj0, obj2는 모두 객체 B에 대한 강한 참조를 갖는다.
*/
obj0 = nil
/*

obj0에 nil이 대입되었으므로 객체 B에 대한 강한 참조는 사라진다.
이 시점에서 obj2는 모두 객체 B에 대한 강한 참조를 갖는다.
*/
obj2 = nil
/*

obj2에 nil이 대입되었으므로 객체 B에 대한 강한 참조는 사라진다.
객체 B를 어느 누구도 소유하지 않게 되어 객체 B는 제거된다.
*/​&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;weak : strong 소유권으로 컴파일러가 메모리 관리를 충분히 수행 할 수 있어 보이지만 &quot;순환 참조&quot;라는 큰 문제는 피할 수가 없다. 그래서 나온게 weak 지시어이다.&lt;/p&gt;
&lt;h3&gt;순환 참조란?&lt;/h3&gt;
&lt;p&gt;순환 참조가 있으면 메모리 누수가 자주 발생한다. 메모리 누수는 특정 객체가 제거 될 시점 뒤에도 메모리에 여전히 존재하는 상황을 말함.&lt;/p&gt;
&lt;p&gt;순환 참조는 A, B 서로 강한 참조를 갖고 있는 경우, 자기 참조 일 경우, 블록, 클로저에서 일어 날 수 있다.&lt;/p&gt;
&lt;p&gt;이것은 약한참조로 strong과 달리 참조시 reference count가 증가 되지 않고 참조한 객체가 소멸되면 nil로 된다.&lt;/p&gt;
&lt;p&gt;순환참조 예제1) 객체 A, B가 서로 참조할 경우&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebxctg/btqy0qY1WTa/o52pKdyTMwJOnxVD1D2Hvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebxctg/btqy0qY1WTa/o52pKdyTMwJOnxVD1D2Hvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebxctg/btqy0qY1WTa/o52pKdyTMwJOnxVD1D2Hvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Febxctg%2Fbtqy0qY1WTa%2Fo52pKdyTMwJOnxVD1D2Hvk%2Fimg.png&quot; width=&quot;400&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;// 두 변수에 nil을 대입해서 해제를 하고 싶었지만 각 변수가 서로를 참조하고 있기에 둘다 메모리에 남음&lt;/p&gt;
&lt;pre id=&quot;code_1570783631600&quot; class=&quot;swift&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class A {
var b : B?
}

class B {
var a : A?
}

let a = A() // a = 1
let b = B() // b = 1

a.b = b // b = 2
b.a = a // a = 2

a = nil // a = 1
b = nil // b = 1

// 두 변수에 nil을 대입해서 해제를 하고 싶었지만 각 변수가 서로를 참조하고 있기에 둘다 메모리에 남음&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;해결 방법&lt;/p&gt;
&lt;p&gt;한쪽 변수에 weak 지시어를 사용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhLnIk/btqy0rcyPQk/IhHbQsfAF17aKv1dKEAenK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhLnIk/btqy0rcyPQk/IhHbQsfAF17aKv1dKEAenK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhLnIk/btqy0rcyPQk/IhHbQsfAF17aKv1dKEAenK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhLnIk%2Fbtqy0rcyPQk%2FIhHbQsfAF17aKv1dKEAenK%2Fimg.png&quot; width=&quot;400&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1570783631600&quot; class=&quot;swift&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class A {
var theB : B?
}

class B {
var weak theA : A?
}

let a = A() // a = 1
let b = B() // b = 1

a.theB = b // b = 2
b.theA = a // a = 1

a = nil // a = 0 , b = 1
// a에 nil을 대입하면 a는 B의 변수 theA에 weak로 되어 있기에 theA에는 nil에 대입이 되고 a는 해제가 된다.
// 그와 동시에 A의 변수 theB도 해제가 된다.
b = nil // b = 0
// B 또한 nil을 대입하면 b의 reference count는 0이 되고 둘다 해제가 된다.&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;ARC를 자세히 들여다 보면&lt;/h3&gt;
&lt;p&gt;strong은 컴파일시에 relase 코드를 넣어주지만 weak는 weak만의 참조 테이블이 있다.&lt;/p&gt;
&lt;p&gt;왜냐하면 참조한 변수가 해제 시 weak로 참조한 것에 모두 nil로 반납을 해줘야 하기 때문에 따로 관리가 된다.&lt;/p&gt;
&lt;p&gt;weak의 메모리는 내부적으로 autorealase pool로 관리 된다고 한다. 그래서 약한 참조를 사용하는 것도 어찌보면 메모리를 사용하는 것이기 때문에 너무 남발을 하게 되면 메모리에 영향을 주어서 느려지는 원인이 된다.&lt;/p&gt;
&lt;p&gt;그리고 순환 참조가 되는 경우가 또 있다.&lt;/p&gt;
&lt;p&gt;그건 블록, 클로저의 경우 capturing 시 self를 참조할 경우 self의 reference count가 올라 가게 된다. __weak(objectvie c),&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://smartdeveloper.tistory.com/manage/newpost/swift&quot;&gt;weak self&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;캡쳐링 리스트를 사용하면 해결이 된다.&lt;/p&gt;
&lt;p&gt;이건 블록, 클로저의 내용에서 다시 설명을 하겠다.&lt;/p&gt;</description>
      <category>iOS</category>
      <author>snapshot</author>
      <guid isPermaLink="true">https://smartdeveloper.tistory.com/51</guid>
      <comments>https://smartdeveloper.tistory.com/entry/ARC-%EC%88%9C%ED%99%98%EC%B0%B8%EC%A1%B0%EC%99%80-%EC%86%8C%EC%9C%A0%EA%B6%8C-%EC%A7%80%EC%8B%9C%EC%96%B4-iOS-xcode-1#entry51comment</comments>
      <pubDate>Fri, 11 Oct 2019 17:47:48 +0900</pubDate>
    </item>
    <item>
      <title>iOS13 dark mode(다크모드) 설정시 xcode로 대응 방법</title>
      <link>https://smartdeveloper.tistory.com/entry/iOS13-dark-mode%EB%8B%A4%ED%81%AC%EB%AA%A8%EB%93%9C-%EC%84%A4%EC%A0%95%EC%8B%9C-xcode%EB%A1%9C-%EB%8C%80%EC%9D%91-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;h1&gt;How to support Dark Mode in iOS apps&lt;/h1&gt;
&lt;p&gt;이번 iOS 13에서 dark mode 가 추가 되었다. 아.......&lt;/p&gt;
&lt;p&gt;뭐 미리 준비를 했으면 됐지만 준비 안 했다..&lt;/p&gt;
&lt;p&gt;일단 다크 모드 막는 법 부터 알아 보자.&lt;/p&gt;
&lt;h1&gt;1) info 파일 안에 User Interface Style 을 추가를 한다.&lt;/h1&gt;
&lt;p&gt;Type은 String , value는 Light 적으면 끝..간단함..그리고 모두에게 비밀로 하고 편히 걱정없이 일을 한다.&lt;/p&gt;
&lt;h1&gt;2) 각각의 뷰컨트롤러에 세팅을 한다.&lt;/h1&gt;
&lt;p&gt;self.overrideUserInterfaceStyle = .light 로 각 뷰컨틀로러에 넣어주면 된다. 귀찮다..이건..1번이 제일 좋다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;override func viewDidLoad() {
        super.viewDidLoad()
        self.overrideUserInterfaceStyle = .light
        // Do any additional setup after loading the view.
    }&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;3) &quot;뭐 dark mode 모두 대응해주겠다&quot; 라는 분이 계시다면 이 방법을 추천한다.&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;_2019-10-02__4-6c7317b2-3ec7-41ba-8d4d-843263452659.24.35.png&quot; alt=&quot;&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-02 오후 4.24.35.png&quot; width=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBIjZQ/btqyKHA2Gem/7YxqvHP120K8RC5hJXbjaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBIjZQ/btqyKHA2Gem/7YxqvHP120K8RC5hJXbjaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBIjZQ/btqyKHA2Gem/7YxqvHP120K8RC5hJXbjaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBIjZQ%2FbtqyKHA2Gem%2F7YxqvHP120K8RC5hJXbjaK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-02 오후 4.24.35.png&quot; width=&quot;600&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Asset Catalog를 추가한다. 그리고 알아서 이름을 변경한다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;_2019-10-02__5-cf86bbda-bf94-4e49-947e-87398ecf62e1.08.51.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LBloK/btqyLfX9PS2/GW2DnkVjVHYGCpwxQGIwnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LBloK/btqyLfX9PS2/GW2DnkVjVHYGCpwxQGIwnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LBloK/btqyLfX9PS2/GW2DnkVjVHYGCpwxQGIwnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLBloK%2FbtqyLfX9PS2%2FGW2DnkVjVHYGCpwxQGIwnK%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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;캡쳐한 화면대로 따라하면 된다.&lt;/p&gt;
&lt;p&gt;일단 Asset 의 이름을 정하고 1번 &amp;rarr; 2번을 눌러서 생성을 한다.&lt;/p&gt;
&lt;p&gt;그리고 3번의 이름을 정하고 4번을 클릭하면 none, (Any, Dark), (Any, Light, Dark) 이렇게 세 분류가 나온다. 클릭 해보면 어떻게 되는지 알게 될 것이다.&lt;/p&gt;
&lt;p&gt;나는 일단 가운데 Any, Dark를 클릭해서 두 가지의 경우를 만들었다. 그리고 각각의 기본과 dark 모드를 설정했다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;_2019-10-02__4-a1b3a508-a690-4ea7-83e2-f764f96745ff.32.33.png&quot; alt=&quot;&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-02 오후 4.32.33.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csM7hu/btqyMrxgBLi/06Ukp09fD5z9k45fDVOJZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csM7hu/btqyMrxgBLi/06Ukp09fD5z9k45fDVOJZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csM7hu/btqyMrxgBLi/06Ukp09fD5z9k45fDVOJZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsM7hu%2FbtqyMrxgBLi%2F06Ukp09fD5z9k45fDVOJZK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-02 오후 4.32.33.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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;4) UIColor Extension&lt;/h1&gt;
&lt;p&gt;컬라를 선택하면 Named color에 등록된 컬러가 나와서 설정해주면 된다.&lt;/p&gt;
&lt;p&gt;그리고 코드로 등록된 컬러를 사용하고 싶으면 UIColor extension으로 UIColor(named: &quot;&quot;) 이걸 통해서 등록해주면 된다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;import Foundation
import UIKit
public extension UIColor {
    static let C_blue = UIColor(named: &quot;C_blue&quot;)
    static let C_blue_only = UIColor(named: &quot;C_blue_only&quot;)
    static let C_white = UIColor(named: &quot;C_white&quot;)
    static let C_red = UIColor(named: &quot;C_red&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;코딩으로 적용을 했을 때는&lt;/p&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;@IBOutlet weak var testView : UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.testView.backgroundColor = UIColor.C_red
        // Do any additional setup after loading the view.
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;끝..&lt;/p&gt;
&lt;p&gt;런타임때 이런식으로 유저가 변경하면 알아서 색을 바꿔준다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;KakaoTalk_Photo_2019-10-02-17-55-43.gif&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwNbGw/btqyKI1a6Pe/oQYtNjka4hlSURLzGz8U6k/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwNbGw/btqyKI1a6Pe/oQYtNjka4hlSURLzGz8U6k/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwNbGw/btqyKI1a6Pe/oQYtNjka4hlSURLzGz8U6k/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cwNbGw/btqyKI1a6Pe/oQYtNjka4hlSURLzGz8U6k/img.gif&quot; data-filename=&quot;KakaoTalk_Photo_2019-10-02-17-55-43.gif&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
            &lt;/figure&gt;
        
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 일단 대응을 미리 못한 잘못이 있기 때문에 1번으로 대응을 했고 디자이너와 차차 대응을 해야겠다.&lt;/p&gt;
&lt;p&gt;언제 다하냐..&lt;/p&gt;</description>
      <category>iOS</category>
      <author>snapshot</author>
      <guid isPermaLink="true">https://smartdeveloper.tistory.com/49</guid>
      <comments>https://smartdeveloper.tistory.com/entry/iOS13-dark-mode%EB%8B%A4%ED%81%AC%EB%AA%A8%EB%93%9C-%EC%84%A4%EC%A0%95%EC%8B%9C-xcode%EB%A1%9C-%EB%8C%80%EC%9D%91-%EB%B0%A9%EB%B2%95#entry49comment</comments>
      <pubDate>Wed, 2 Oct 2019 17:36:14 +0900</pubDate>
    </item>
    <item>
      <title>Polymer keyboard personal information collection policy</title>
      <link>https://smartdeveloper.tistory.com/entry/Polymer-keyboard-personal-information-collection-policy-1</link>
      <description>&lt;p&gt;Polymer keyboard personal information collection policy&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1. Polymer Keyboard Extension does not transmit and store personal information to the server.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2. The Polymer Keyboard Extension checks the functions provided in the clipboard text.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3. To expand the polymer keyboard, you must enable &quot;Allow full access&quot; for other features.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4. Later, you can request the collection of device information (device token) for push notifications.&lt;/p&gt;</description>
      <author>snapshot</author>
      <guid isPermaLink="true">https://smartdeveloper.tistory.com/48</guid>
      <comments>https://smartdeveloper.tistory.com/entry/Polymer-keyboard-personal-information-collection-policy-1#entry48comment</comments>
      <pubDate>Tue, 14 Feb 2017 18:15:02 +0900</pubDate>
    </item>
    <item>
      <title>聚合物键盘个人信息收集政策</title>
      <link>https://smartdeveloper.tistory.com/entry/Polymer-keyboard-personal-information-collection-policy</link>
      <description>&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;聚合物键盘个人信息收集政策&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;1. Polymer Keyboard Extension不会将个人信息传输和存储到服务器。&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;2. Polymer Keyboard Extension检查剪贴板文本中提供的功能。&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;3.要展开聚合物键盘，必须为其他功能启用“允许完全访问”。&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px 'Apple SD Gothic Neo'; color: #212121; -webkit-text-stroke: #212121; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px 'Apple SD Gothic Neo'; color: #212121; -webkit-text-stroke: #212121; background-color: #ffffff; min-height: 19.0px}
span.s1 {font-kerning: none}
&lt;/style&gt;










&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;4.稍后，您可以请求收集推送通知的设备信息（设备令牌）。&lt;/span&gt;&lt;/p&gt;&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px 'Apple SD Gothic Neo'; color: #212121; -webkit-text-stroke: #212121; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px 'Apple SD Gothic Neo'; color: #212121; -webkit-text-stroke: #212121; background-color: #ffffff; min-height: 19.0px}
span.s1 {font-kerning: none}
&lt;/style&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <author>snapshot</author>
      <guid isPermaLink="true">https://smartdeveloper.tistory.com/47</guid>
      <comments>https://smartdeveloper.tistory.com/entry/Polymer-keyboard-personal-information-collection-policy#entry47comment</comments>
      <pubDate>Tue, 14 Feb 2017 18:12:54 +0900</pubDate>
    </item>
    <item>
      <title>Polymer Keyboard個人情報チュウィグム方針</title>
      <link>https://smartdeveloper.tistory.com/entry/Polymer-Keyboard%E5%80%8B%E4%BA%BA%E6%83%85%E5%A0%B1%E3%83%81%E3%83%A5%E3%82%A6%E3%82%A3%E3%82%B0%E3%83%A0%E6%96%B9%E9%87%9D</link>
      <description>&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;Polymer Keyboard個人情報チュウィグム方針&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;1. Polymer Keyboard extensionは、個人情報をサーバーに送信し、保存しません。&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;2. Polymer Keyboard extensionは、提供される機能のために、クリップボードのテキストを確認します。&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;3. Polymer Keyboard extensionは、その他の機能のために「フルアクセスを許可」の活性化を必要とします。&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px 'Apple SD Gothic Neo'; color: #212121; -webkit-text-stroke: #212121; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px 'Apple SD Gothic Neo'; color: #212121; -webkit-text-stroke: #212121; background-color: #ffffff; min-height: 19.0px}
span.s1 {font-kerning: none}
&lt;/style&gt;










&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;4.今後のプッシュ通知のための機器情報（デバイストークン）の収集を要求することができます。&lt;/span&gt;&lt;/p&gt;</description>
      <author>snapshot</author>
      <guid isPermaLink="true">https://smartdeveloper.tistory.com/46</guid>
      <comments>https://smartdeveloper.tistory.com/entry/Polymer-Keyboard%E5%80%8B%E4%BA%BA%E6%83%85%E5%A0%B1%E3%83%81%E3%83%A5%E3%82%A6%E3%82%A3%E3%82%B0%E3%83%A0%E6%96%B9%E9%87%9D#entry46comment</comments>
      <pubDate>Tue, 14 Feb 2017 18:10:52 +0900</pubDate>
    </item>
    <item>
      <title>Polymer Keyboard 개인정보 취금 방침</title>
      <link>https://smartdeveloper.tistory.com/entry/Polymer-Keyboard-%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4-%EC%B7%A8%EA%B8%88-%EB%B0%A9%EC%B9%A8</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Polymer Keyboard &lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;개인정보 취금 방침&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. Polymer Keyboard extension은 개인 정보를 서버에 전송 및 저장 하지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. Polymer Keyboard extension은 제공되는 기능을 위해 클립보드 텍스트를 확인합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. &amp;nbsp;Polymer Keyboard extension은 기타 기능을 위해 '전체 접근 허용'의 활성화를 요구 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;4.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(44, 44, 44); font-family: &amp;quot;Open Sans&amp;quot;, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;추후에 푸쉬 알림을 위한 기기정보(디바이스 토큰)의 수집을 요구할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <author>snapshot</author>
      <guid isPermaLink="true">https://smartdeveloper.tistory.com/45</guid>
      <comments>https://smartdeveloper.tistory.com/entry/Polymer-Keyboard-%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4-%EC%B7%A8%EA%B8%88-%EB%B0%A9%EC%B9%A8#entry45comment</comments>
      <pubDate>Tue, 14 Feb 2017 18:09:30 +0900</pubDate>
    </item>
    <item>
      <title>in app 튜토리얼</title>
      <link>https://smartdeveloper.tistory.com/entry/in-app-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC</link>
      <description>&lt;p&gt;영어 대표 튜토리얼&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;https://parse.com/docs/ios_guide#iap/iOS&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;한국 튜토리얼&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://m.cafe.naver.com/app/ArticleRead.nhn?wCmt=true&amp;amp;articleid=200626&amp;amp;query=%D7%BA%88%EA%B7%B8%EB%A6%AC%EC%8A%A4&amp;amp;boardtype=L&amp;amp;menuid=177&amp;amp;menuType=B&amp;amp;clubid=16914752&amp;amp;commentCount=33&amp;amp;commentNew=false&lt;/p&gt;</description>
      <author>snapshot</author>
      <guid isPermaLink="true">https://smartdeveloper.tistory.com/44</guid>
      <comments>https://smartdeveloper.tistory.com/entry/in-app-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC#entry44comment</comments>
      <pubDate>Thu, 17 Jan 2013 10:24:18 +0900</pubDate>
    </item>
    <item>
      <title>아이폰 푸쉬 노티피케이션 싸이트</title>
      <link>https://smartdeveloper.tistory.com/entry/%EC%95%84%EC%9D%B4%ED%8F%B0-%ED%91%B8%EC%89%AC-%EB%85%B8%ED%8B%B0%ED%94%BC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%8B%B8%EC%9D%B4%ED%8A%B8</link>
      <description>&lt;p&gt;https://parse.com/tutorials/push-notifications&lt;/p&gt;</description>
      <category>iOS</category>
      <author>snapshot</author>
      <guid isPermaLink="true">https://smartdeveloper.tistory.com/43</guid>
      <comments>https://smartdeveloper.tistory.com/entry/%EC%95%84%EC%9D%B4%ED%8F%B0-%ED%91%B8%EC%89%AC-%EB%85%B8%ED%8B%B0%ED%94%BC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%8B%B8%EC%9D%B4%ED%8A%B8#entry43comment</comments>
      <pubDate>Thu, 17 Jan 2013 10:22:47 +0900</pubDate>
    </item>
    <item>
      <title>제목을 입력해 주세요.</title>
      <link>https://smartdeveloper.tistory.com/entry/%EC%A0%9C%EB%AA%A9%EC%9D%84-%EC%9E%85%EB%A0%A5%ED%95%B4-%EC%A3%BC%EC%84%B8%EC%9A%94</link>
      <description>jsp&lt;br /&gt;
&lt;br /&gt;page를 기억하자.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
jsp표현식&lt;br /&gt;
&lt;br /&gt;&amp;lt;% out.println(Counter.getCounter()); %&amp;gt;&lt;br /&gt;
&lt;br /&gt;이거랑&lt;br /&gt;
&amp;lt;%= Count.getCounter()%&amp;gt;이거랑 같다.&lt;br /&gt;
&lt;span style=&quot;color: rgb(200, 5, 106);&quot;&gt;여기서 중요 한것은 &amp;lt;%=이것을 썼을때는 ;(세미콜론)을 쓰면 안된다. &lt;/span&gt;&lt;br /&gt;
왜냐면&lt;br /&gt;
=이것이 out.println();이거 이기 때문이다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
선언문!!&lt;br /&gt;
선언문은 컨테이너에 의해 생성될 서블릿의&amp;nbsp; 멤버를 선언하는 곳이다. &lt;br /&gt;
&lt;div style=&quot;margin-left: 4em;&quot;&gt;멤버에는 변수가 들어갈 수 있고, 메소드가 들어 갈 수 있다.&lt;br /&gt;
&amp;lt;%! %&amp;gt;안에 들어가는 문장은 서비스 바깥 족으로 빠져서 선언되게 됩니다.&lt;br /&gt;
따라서, 정적인 변수나 메소드 또는 인스턴스 변수나 메소드 모두 여기에 코딩 할 수 있다. &lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;개발자로서 알아야할 세가지 주요 메소드&lt;br /&gt;
-jspinit()&lt;br /&gt;
--init() 메소드에서 호출합니다. 이 메소드는 재정의 해도 무방합니다. &lt;br /&gt;
&lt;br /&gt;jspDestory()&lt;br /&gt;
-서블릿의 destroy()메소드에서 호출합니다. 이 메소드 또한 재정의해도 고나게 없다.&lt;br /&gt;
_jspService()&lt;br /&gt;
--이건 절대 재정의 하면 안된다. 컨네이너가 해준다. &lt;br /&gt;
&lt;br /&gt;jsp에도 초기화 파라미터 값이 있다. &lt;br /&gt;
-일반 서블릿에서 서블릿 초기화 파라미터를 설정하는 방식과 유사하게 jsp 초기화 파라미터를 설정합니다. &lt;br /&gt;
-&amp;lt;jsp-file&amp;gt; 태그를 사용 한다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;</description>
      <author>snapshot</author>
      <guid isPermaLink="true">https://smartdeveloper.tistory.com/41</guid>
      <comments>https://smartdeveloper.tistory.com/entry/%EC%A0%9C%EB%AA%A9%EC%9D%84-%EC%9E%85%EB%A0%A5%ED%95%B4-%EC%A3%BC%EC%84%B8%EC%9A%94#entry41comment</comments>
      <pubDate>Thu, 12 May 2011 10:20:18 +0900</pubDate>
    </item>
  </channel>
</rss>