<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>게임 개발자</title>
    <link>https://cho22.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 6 May 2026 19:19:44 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>cho22</managingEditor>
    <item>
      <title>3D모델 에셋적용</title>
      <link>https://cho22.tistory.com/112</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.fab.com/ko/listings/b2302711-8a53-4d07-b33a-732ecba0a339&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.fab.com/ko/listings/b2302711-8a53-4d07-b33a-732ecba0a339&lt;/a&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;우선 코드에 필요한부분을 설정해준다. (메쉬 셋팅, 카메라 셋팅) 메쉬는 CharacterBase에서 설정해주고 카메라 관련설정은 CharacterPlayer에서 설정해줬다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CharacterBase의 생성자에 해당 모델을 불러와 Mesh를 셋팅하도록 해줬다&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739342654335&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	static ConstructorHelpers::FObjectFinder&amp;lt;USkeletalMesh&amp;gt; CharacterMeshRef(TEXT(&quot;/Script/Engine.SkeletalMesh'/Game/StylizedArmyPackA/Soldiers_Animations/SK_Base_A_pose_germany.SK_Base_A_pose_germany'&quot;));
	if (CharacterMeshRef.Object)
	{
		GetMesh()-&amp;gt;SetSkeletalMesh(CharacterMeshRef.Object);
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 만든 SMCharacterPlayer.h 에 카메라 관련 설정을 추가해줬다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739342507718&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;protected:
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, Meta = (AllowPrivateAccess = &quot;true&quot;))
	TObjectPtr&amp;lt;class USpringArmComponent&amp;gt; CameraBoom;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, Meta = (AllowPrivateAccess = &quot;true&quot;))
	TObjectPtr&amp;lt;class UCameraComponent&amp;gt; FollowCamera;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SMCharacterPlayer.cpp에 관련 부분을 구현해줬다&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739342539885&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CameraBoom = CreateDefaultSubobject&amp;lt;USpringArmComponent&amp;gt;(TEXT(&quot;CameraBoom&quot;));
CameraBoom-&amp;gt;SetupAttachment(RootComponent);
CameraBoom-&amp;gt;TargetArmLength = 400.0f;
CameraBoom-&amp;gt;bUsePawnControlRotation = true;

FollowCamera = CreateDefaultSubobject&amp;lt;UCameraComponent&amp;gt;(TEXT(&quot;FollowCamera&quot;));
FollowCamera-&amp;gt;SetupAttachment(CameraBoom, USpringArmComponent::SocketName);
FollowCamera-&amp;gt;bUsePawnControlRotation = false;&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;br /&gt;SMCharacterPlayer를 상속받은 BlueprintClass를 생성한다, 스태틱메쉬의 position을 조절하고 저장해준다&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;2488&quot; data-origin-height=&quot;1128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdzXCh/btsMfF3j8BT/O5dG6pkJSKnWuWBPANCVC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdzXCh/btsMfF3j8BT/O5dG6pkJSKnWuWBPANCVC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdzXCh/btsMfF3j8BT/O5dG6pkJSKnWuWBPANCVC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdzXCh%2FbtsMfF3j8BT%2FO5dG6pkJSKnWuWBPANCVC0%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;2488&quot; height=&quot;1128&quot; data-origin-width=&quot;2488&quot; data-origin-height=&quot;1128&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;GameMode에서 기존에 ThirdPerson으로 설정했던 부분을 내가 만든 블루프린트의 레퍼런스로 교체해준다&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;1038&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpsgXt/btsMfEDjaw8/KuxcCU8aprnqxLM7R1KwL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpsgXt/btsMfEDjaw8/KuxcCU8aprnqxLM7R1KwL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpsgXt/btsMfEDjaw8/KuxcCU8aprnqxLM7R1KwL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpsgXt%2FbtsMfEDjaw8%2FKuxcCU8aprnqxLM7R1KwL0%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;1038&quot; height=&quot;586&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;586&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;</description>
      <category>Unreal</category>
      <author>cho22</author>
      <guid isPermaLink="true">https://cho22.tistory.com/112</guid>
      <comments>https://cho22.tistory.com/112#entry112comment</comments>
      <pubDate>Wed, 12 Feb 2025 15:48:18 +0900</pubDate>
    </item>
    <item>
      <title>Unreal 프로젝트 시작</title>
      <link>https://cho22.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;회사의 권고사직으로 인해 재취업 준비를 해야하는 상황이 되어버렸따.....&amp;nbsp;유니티만 해왔기 때문에 요즘 시장의 대세인 언리얼을 공부하며 정리해보려 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 이득우의 언리얼프로그래밍 강의를 Part1, 2, 3 까지 들었으나 역시 보고따라할때와 직접할때는 차이가 크기에... 포트폴리오 제작을 하며 다시 정리해보려한다&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;1. 프로젝트 생성하기&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;559&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpQuUs/btsMf7x5M6e/frh4IFhtldPJuS1mjjaRO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpQuUs/btsMf7x5M6e/frh4IFhtldPJuS1mjjaRO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpQuUs/btsMf7x5M6e/frh4IFhtldPJuS1mjjaRO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpQuUs%2FbtsMf7x5M6e%2Ffrh4IFhtldPJuS1mjjaRO0%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;234&quot; height=&quot;129&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 새로운 맵 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;File/NewLevel 에서 blank를 선택하여 빈 맵을 생성한다&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;1429&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIWbM8/btsMeSopXtq/DHaIcwTF3plPQTLaoyLCg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIWbM8/btsMeSopXtq/DHaIcwTF3plPQTLaoyLCg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIWbM8/btsMeSopXtq/DHaIcwTF3plPQTLaoyLCg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIWbM8%2FbtsMeSopXtq%2FDHaIcwTF3plPQTLaoyLCg1%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;532&quot; height=&quot;268&quot; data-origin-width=&quot;1429&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 필요한것들 기초 클래스 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GameBase생성 : GameBase를 상속받아 SMGameBase를 생성하고 WorldSettings의 GameMode를 생성한 SMGameBase로 설정해줬다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PlayerController생성 : PlayerController를 상속받아 SMPlayerController를 생성하고&amp;nbsp; SMGameMode의 C++ 코드에서 해당컨드롤러를 PlayerControllerClass로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CharacterBase생성 : Character를 상속받아 SMCharacterBase를 생성하고, 이후에 모든 캐릭터들은 SMCharacterBase를 상속받아 구현할 예정이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CharacterPlayer생성 : CharacterBase를 상속받아 생성&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;4. 캐릭터 띄우고 뛰어다니게 하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단은 3D모델도 없고 기본 제공하는 마네킹을 이용해 작업을 진행하려 한다 ThirdPerson패키지를 추가해주고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DefaultPawnClass를 BP_ThirdPersonCharacter로 지정해준다&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;1144&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v8BXz/btsMe3wUoiV/UhM2KHKqfpUc7Cr97R6V8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v8BXz/btsMe3wUoiV/UhM2KHKqfpUc7Cr97R6V8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v8BXz/btsMe3wUoiV/UhM2KHKqfpUc7Cr97R6V8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv8BXz%2FbtsMe3wUoiV%2FUhM2KHKqfpUc7Cr97R6V8K%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;1144&quot; height=&quot;634&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;634&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;굳 일단 1단계 끝&lt;/p&gt;</description>
      <category>Unreal</category>
      <author>cho22</author>
      <guid isPermaLink="true">https://cho22.tistory.com/111</guid>
      <comments>https://cho22.tistory.com/111#entry111comment</comments>
      <pubDate>Wed, 12 Feb 2025 14:26:26 +0900</pubDate>
    </item>
    <item>
      <title>unity android ndk</title>
      <link>https://cho22.tistory.com/110</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;유니티 안드로이드 빌드 하려니 ndk를 셋팅하라고 나왔다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무거나 다운받았더니 23.1.7779620이 아니어서 선택이 안된다.&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;937&quot; data-origin-height=&quot;75&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nntoy/btsFLOzMVn2/kCPFqTaap36HyABT2loK9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nntoy/btsFLOzMVn2/kCPFqTaap36HyABT2loK9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nntoy/btsFLOzMVn2/kCPFqTaap36HyABT2loK9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNntoy%2FbtsFLOzMVn2%2FkCPFqTaap36HyABT2loK9k%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;937&quot; height=&quot;75&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;75&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://androidsdkoffline.blogspot.com/p/android-ndk-side-by-side-direct-download.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://androidsdkoffline.blogspot.com/p/android-ndk-side-by-side-direct-download.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710467036156&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;Android NDK Side-By-Side Direct Download&quot; data-og-description=&quot;Android NDK Native Development Kit Side-By-Side NDK is optional if you create apps with Java/Kotlin as language. You have to install NDK pac...&quot; data-og-host=&quot;androidsdkoffline.blogspot.com&quot; data-og-source-url=&quot;https://androidsdkoffline.blogspot.com/p/android-ndk-side-by-side-direct-download.html&quot; data-og-url=&quot;https://androidsdkoffline.blogspot.com/p/android-ndk-side-by-side-direct-download.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://androidsdkoffline.blogspot.com/p/android-ndk-side-by-side-direct-download.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://androidsdkoffline.blogspot.com/p/android-ndk-side-by-side-direct-download.html&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;Android NDK Side-By-Side Direct Download&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Android NDK Native Development Kit Side-By-Side NDK is optional if you create apps with Java/Kotlin as language. You have to install NDK pac...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;androidsdkoffline.blogspot.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에서 23.1.7779620을 다운받아 설치하니 성공했다.&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://dl.google.com/android/repository/android-ndk-r23b-windows.zip&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dl.google.com/android/repository/android-ndk-r23b-windows.zip&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dl.google.com/android/repository/android-ndk-r23b-linux.zip&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dl.google.com/android/repository/android-ndk-r23b-linux.zip&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dl.google.com/android/repository/android-ndk-r23b-darwin.zip&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dl.google.com/android/repository/android-ndk-r23b-darwin.zip&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>cho22</author>
      <guid isPermaLink="true">https://cho22.tistory.com/110</guid>
      <comments>https://cho22.tistory.com/110#entry110comment</comments>
      <pubDate>Fri, 15 Mar 2024 10:45:03 +0900</pubDate>
    </item>
    <item>
      <title>jenkins로 flutter 빌드 셋팅</title>
      <link>https://cho22.tistory.com/109</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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U4TVX/btsFdoBsTtO/8kcEGEOJKXttvvQEv9JNqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U4TVX/btsFdoBsTtO/8kcEGEOJKXttvvQEv9JNqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U4TVX/btsFdoBsTtO/8kcEGEOJKXttvvQEv9JNqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU4TVX%2FbtsFdoBsTtO%2F8kcEGEOJKXttvvQEv9JNqk%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;1374&quot; height=&quot;418&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;418&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;하지만 실행시 Unable to find git in your PATH 문제가 발생했다.&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;a href=&quot;https://stackoverflow.com/questions/71252002/error-unable-to-find-git-in-your-path-despite-adding-path-and-trying-all-availa/76100680#76100680&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/71252002/error-unable-to-find-git-in-your-path-despite-adding-path-and-trying-all-availa/76100680#76100680&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708676662734&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;Error: Unable to find git in your PATH despite adding path and trying all available solutions&quot; data-og-description=&quot;I have been trying to install Flutter on Windows 11 and keep on getting stuck on Error: Unable to find git in your PATH I have been looking around and kept on trying different ways to get it to&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/71252002/error-unable-to-find-git-in-your-path-despite-adding-path-and-trying-all-availa/76100680#76100680&quot; data-og-url=&quot;https://stackoverflow.com/questions/71252002/error-unable-to-find-git-in-your-path-despite-adding-path-and-trying-all-availa&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3jsbN/hyVqwafVqR/ddoG2CIKrHnlYvWC6Q4X31/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/cvJVf6/hyVm5k7hIG/dY1rQ58YEWzktpWLnqHBF1/img.jpg?width=1145&amp;amp;height=483&amp;amp;face=0_0_1145_483&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/71252002/error-unable-to-find-git-in-your-path-despite-adding-path-and-trying-all-availa/76100680#76100680&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/71252002/error-unable-to-find-git-in-your-path-despite-adding-path-and-trying-all-availa/76100680#76100680&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3jsbN/hyVqwafVqR/ddoG2CIKrHnlYvWC6Q4X31/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/cvJVf6/hyVm5k7hIG/dY1rQ58YEWzktpWLnqHBF1/img.jpg?width=1145&amp;amp;height=483&amp;amp;face=0_0_1145_483');&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;Error: Unable to find git in your PATH despite adding path and trying all available solutions&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I have been trying to install Flutter on Windows 11 and keep on getting stuck on Error: Unable to find git in your PATH I have been looking around and kept on trying different ways to get it to&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PATH를&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C:\flutter\bin\mingit\cmd;C:\flutter\bin;C:\Windows\System32;C:\Program Files\Git\bin;C:\Program Files\Git\cmd;C:\Program&amp;nbsp;Files\Git\bin\git.exe&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;1750&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGebUD/btsFgOZAEvi/UNsjA3Qk5JSWLdcG7DcMT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGebUD/btsFgOZAEvi/UNsjA3Qk5JSWLdcG7DcMT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGebUD/btsFgOZAEvi/UNsjA3Qk5JSWLdcG7DcMT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGebUD%2FbtsFgOZAEvi%2FUNsjA3Qk5JSWLdcG7DcMT1%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;1750&quot; height=&quot;586&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <author>cho22</author>
      <guid isPermaLink="true">https://cho22.tistory.com/109</guid>
      <comments>https://cho22.tistory.com/109#entry109comment</comments>
      <pubDate>Fri, 23 Feb 2024 17:25:35 +0900</pubDate>
    </item>
    <item>
      <title>spring spring-boot-gradle-plugin 오류</title>
      <link>https://cho22.tistory.com/108</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;서버를 띄울 일이 있어서 간만에 intellij를 설치하고 프로젝트를 생성하고 실행했더니&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.2.2 오류가 뜸.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원인은 gradle이 java11로 설정되어잇었음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;File/Settings선택 &amp;gt; Build, Execution, Deployment &amp;gt; BuildTools &amp;gt; Gradle&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;841&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPPtIM/btsEiiPfMAx/kyfzF2n4Q1LBj8HGFD8kKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPPtIM/btsEiiPfMAx/kyfzF2n4Q1LBj8HGFD8kKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPPtIM/btsEiiPfMAx/kyfzF2n4Q1LBj8HGFD8kKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPPtIM%2FbtsEiiPfMAx%2FkyfzF2n4Q1LBj8HGFD8kKK%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;841&quot; height=&quot;184&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 17로 설정해주니 다운로드 잘 받고 성공&lt;/p&gt;</description>
      <category>공부</category>
      <author>cho22</author>
      <guid isPermaLink="true">https://cho22.tistory.com/108</guid>
      <comments>https://cho22.tistory.com/108#entry108comment</comments>
      <pubDate>Fri, 2 Feb 2024 13:29:21 +0900</pubDate>
    </item>
    <item>
      <title>성남돌잔치 예약 후기 (가천대 플로렌스)</title>
      <link>https://cho22.tistory.com/105</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;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;991&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MGiou/btsC0ZboVCR/DgKHafFnpcmg7tFKSYdrxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MGiou/btsC0ZboVCR/DgKHafFnpcmg7tFKSYdrxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MGiou/btsC0ZboVCR/DgKHafFnpcmg7tFKSYdrxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMGiou%2FbtsC0ZboVCR%2FDgKHafFnpcmg7tFKSYdrxk%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;1642&quot; height=&quot;991&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;991&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1423&quot; data-origin-height=&quot;1045&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFq8ui/btsC2vHDQAy/EyQaq4N5LvTtIcdglsLX00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFq8ui/btsC2vHDQAy/EyQaq4N5LvTtIcdglsLX00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFq8ui/btsC2vHDQAy/EyQaq4N5LvTtIcdglsLX00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFq8ui%2FbtsC2vHDQAy%2FEyQaq4N5LvTtIcdglsLX00%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;1423&quot; height=&quot;1045&quot; data-origin-width=&quot;1423&quot; data-origin-height=&quot;1045&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홀도 넓고 최대 100명수용에 층 전체를 우리 손님만 사용하는것도 좋았다&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;1648&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CpUl9/btsC0YwPGZn/hsrnZnNYd33ukOxakglcT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CpUl9/btsC0YwPGZn/hsrnZnNYd33ukOxakglcT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CpUl9/btsC0YwPGZn/hsrnZnNYd33ukOxakglcT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCpUl9%2FbtsC0YwPGZn%2FhsrnZnNYd33ukOxakglcT0%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;1648&quot; height=&quot;1068&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;1068&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;모바일 초대장이랑 성장동영상도 연계된곳에서 알아서 척척해주니 너무 편하고 좋다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성남, 판교 돌잔치 고민중이라면 상담이라도 한번 가보면 좋을듯 하다&amp;nbsp;&lt;/p&gt;</description>
      <category>육아</category>
      <category>성남돌잔치</category>
      <author>cho22</author>
      <guid isPermaLink="true">https://cho22.tistory.com/105</guid>
      <comments>https://cho22.tistory.com/105#entry105comment</comments>
      <pubDate>Wed, 3 Jan 2024 12:23:11 +0900</pubDate>
    </item>
    <item>
      <title>Unreal C++ 기본타입과 문자열</title>
      <link>https://cho22.tistory.com/104</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;왜 언리얼은 기본타입을 따로 지정하는가?&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플랫폼 파편화. 즉, 기기들마다 같은 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;C++&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 함수를 다르게 인식하는 이슈가 있었음. 그래서 그 이후에는 표준 규약을 만들어 문제를 해결하려했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int형의 경우 32비트로 사용하는 플랫폼이 있고, 64비트로 사용하는 플랫이 있다. 게임의 경우 캐시 히트율이 매우 중요한데, 이렇게 플랫폼마다 데이터타입의 정의가 다르면 게임 개발에 문제를 일으킬수 있다. 즉, 애매모호한 데이터타입은 게임개발 성능을 저하시키고, 문제를 일으킬수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언리얼은 int를 사용하지않고 int32를 사용한다.&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;bool 타입 : 크기가 명확하지 않기떄문에 헤더에서는 uint8을 사용하되, bitField를 사용하여 1비트로 사용한다. 접두사 b를 붙인다. 헤더가 아닌 cpp의 로직에서 사용할때는 자유롭게 bool을 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;캐릭터 인코딩&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언리얼은 TCHAR라는 별도의 타입을 지정하여 사용한다. 왜 언리얼은 문자열을 따로 지정하는가?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터가 영어권국가에 먼저 보급되었을때는 1바이트로 모든 문자를 표현할수 있었지만, 아시아권에 컴퓨터가 보급되면서 1바이트로 모든 문자를 표현할수가 없게 되었다. 그래서 Unicode표준이 나왔는데, 이전에도 컴퓨터는 사용되어왔고, 이미 유니코드로 되어있지 않은것들이 많았다. 그때는 각 국가별로 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;멀티바이트 문자체계&lt;/span&gt;를 사용하여문자를 표현하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, SingleByte문자열, MultiByte문자열, Unicode문자열 총 세개의 문자열이 존재하기때문에 이런 복잡한 상황을 해결하기 위해 TCHAR를 제공하고있고, 이 세개의 문자열을 신경쓰지 않고 코딩을 해도 되게 되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언리얼은 UTF-16을 사용한다. 관련된 설정파일이나, 로드할 문서들도 UTF-16을 사용한다. 소스코드는 UTF-8을 사용한다. UTF-8은 컴파일 오류를 일으킬수 있어서 가급적이면 쓰지 않는것이 좋다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;언리얼이 제공하는 다양한 문자열 처리&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FName : 에셋 관리를 위해 사용되는 문자열 체계, 문자열을 사용하지만 내부적으로는 해시값을 사용하여 에셋을 빠르게 찾을수 있게 한다. 대소문자 구분이 없기 때문에 주의가 필요함. 한번선언되면 바꿀수 없어서 다시 FString으로 변환후 변경해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FText: 다국어 지원할때 사용하는 문자열체계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Unreal</category>
      <author>cho22</author>
      <guid isPermaLink="true">https://cho22.tistory.com/104</guid>
      <comments>https://cho22.tistory.com/104#entry104comment</comments>
      <pubDate>Thu, 30 Nov 2023 20:48:11 +0900</pubDate>
    </item>
    <item>
      <title>Unreal C++코딩표준</title>
      <link>https://cho22.tistory.com/103</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;코딩표준이란? 프로그래밍 이름규칙, 작성방법등 코딩컨벤션, 코딩스타일이라고도 함. 언리얼 엔진은 자체적으로 코딩표준을 정했기 떄문에 언리얼엔진 코딩표준을 따라야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/5.1/ko/epic-cplusplus-coding-standard-for-unreal-engine/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unrealengine.com/5.1/ko/epic-cplusplus-coding-standard-for-unreal-engine/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1699706593921&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;코딩 표준&quot; data-og-description=&quot;기존에 확립된 표준 및 모범 사례를 준수하여 유지보수 가능한 코드를 작성합니다.&quot; data-og-host=&quot;docs.unrealengine.com&quot; data-og-source-url=&quot;https://docs.unrealengine.com/5.1/ko/epic-cplusplus-coding-standard-for-unreal-engine/&quot; data-og-url=&quot;https://docs.unrealengine.com/5.1/ko/epic-cplusplus-coding-standard-for-unreal-engine/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/QOKVU/hyUu0X5lXN/01yT9KZRD0bh9SqNlN4Kmk/img.png?width=1080&amp;amp;height=608&amp;amp;face=0_0_1080_608&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/5.1/ko/epic-cplusplus-coding-standard-for-unreal-engine/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unrealengine.com/5.1/ko/epic-cplusplus-coding-standard-for-unreal-engine/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/QOKVU/hyUu0X5lXN/01yT9KZRD0bh9SqNlN4Kmk/img.png?width=1080&amp;amp;height=608&amp;amp;face=0_0_1080_608');&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;기존에 확립된 표준 및 모범 사례를 준수하여 유지보수 가능한 코드를 작성합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unrealengine.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-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명명규칙 - 언리얼은 파스칼을 따른다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파스칼 : 첫글자 대문자 : UnrealEngine&lt;/li&gt;
&lt;li&gt;카멜 : 첫글자소문자 나머지대문자 : unrealEngine&lt;/li&gt;
&lt;li&gt;스네이크 : 사이에 _사용 unreal_engine&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접두사&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;언리얼 오브젝트 상속받는것 U를포함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Actor는 예외 A를포함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;템플릿클래스는 T&lt;/li&gt;
&lt;li&gt;ui제작할떈 S&lt;/li&gt;
&lt;li&gt;추상적인터페이스, 언리얼인터페이스는 I&lt;/li&gt;
&lt;li&gt;열거형 E&lt;/li&gt;
&lt;li&gt;부울변수 b &amp;lt;&amp;lt; 소문자&lt;/li&gt;
&lt;li&gt;일반적인 클래스나 구조체는 F&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const를 사용할수 있으면 최대한 사용해야한다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주석은 JavaDoc기반으로 문서를 만들수 있도록 코멘트 포맷 규칙을 따라야 한다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Unreal</category>
      <author>cho22</author>
      <guid isPermaLink="true">https://cho22.tistory.com/103</guid>
      <comments>https://cho22.tistory.com/103#entry103comment</comments>
      <pubDate>Sat, 11 Nov 2023 21:44:46 +0900</pubDate>
    </item>
    <item>
      <title>Unreal - Smart Macro Indenting 설치</title>
      <link>https://cho22.tistory.com/101</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal 개발할때 매크로 이후에 엔터를 치면 한칸 들여쓰기가 자동으로 되는데, 이를 방지하기위한 매크로인 SmartMacroIndenting을 설치하는 방법이다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VCmd설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하단 링크의 가장 아래에 download클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1805&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4ZNCn/btsz6Mf4fKH/UyvZqTsSzAWUA0YK33aiM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4ZNCn/btsz6Mf4fKH/UyvZqTsSzAWUA0YK33aiM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4ZNCn/btsz6Mf4fKH/UyvZqTsSzAWUA0YK33aiM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4ZNCn%2Fbtsz6Mf4fKH%2FUyvZqTsSzAWUA0YK33aiM0%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;1805&quot; height=&quot;393&quot; data-origin-width=&quot;1805&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://vlasovstudio.com/visual-commander/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://vlasovstudio.com/visual-commander/index.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1699703014400&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;Visual Commander - Modern alternative to Visual Studio macros&quot; data-og-description=&quot;Visual Commander The freemium Visual Commander extension lets you automate repetitive tasks in Visual Studio 2022/2019/2017 and SSMS 17/2016. You can reuse existing Visual Studio macros from previous versions of the IDE and create new commands and extensio&quot; data-og-host=&quot;vlasovstudio.com&quot; data-og-source-url=&quot;https://vlasovstudio.com/visual-commander/index.html&quot; data-og-url=&quot;https://vlasovstudio.com/visual-commander/index.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cckIGO/hyUu6KLK86/b9R2plCvgkmIU00oIkV1g1/img.png?width=782&amp;amp;height=211&amp;amp;face=0_0_782_211&quot;&gt;&lt;a href=&quot;https://vlasovstudio.com/visual-commander/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://vlasovstudio.com/visual-commander/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cckIGO/hyUu6KLK86/b9R2plCvgkmIU00oIkV1g1/img.png?width=782&amp;amp;height=211&amp;amp;face=0_0_782_211');&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;Visual Commander - Modern alternative to Visual Studio macros&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Visual Commander The freemium Visual Commander extension lets you automate repetitive tasks in Visual Studio 2022/2019/2017 and SSMS 17/2016. You can reuse existing Visual Studio macros from previous versions of the IDE and create new commands and extensio&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;vlasovstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매크로 다운로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 링크의 ue4_smarter_macro_indenting_vs2017-2019.vcmd 다운로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(vs 버전 2019이후도 모두 지원 된다고 함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/hackalyze/ue4-vs-extensions&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/hackalyze/ue4-vs-extensions&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1699703049418&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 - hackalyze/ue4-vs-extensions: Useful UE4 Visual Studio extensions.&quot; data-og-description=&quot;Useful UE4 Visual Studio extensions. Contribute to hackalyze/ue4-vs-extensions development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/hackalyze/ue4-vs-extensions&quot; data-og-url=&quot;https://github.com/hackalyze/ue4-vs-extensions&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cZaqUZ/hyUu559mEL/KCJB36llue7cwJqrb0uKdK/img.png?width=1200&amp;amp;height=600&amp;amp;face=952_112_1077_248&quot;&gt;&lt;a href=&quot;https://github.com/hackalyze/ue4-vs-extensions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/hackalyze/ue4-vs-extensions&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cZaqUZ/hyUu559mEL/KCJB36llue7cwJqrb0uKdK/img.png?width=1200&amp;amp;height=600&amp;amp;face=952_112_1077_248');&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 - hackalyze/ue4-vs-extensions: Useful UE4 Visual Studio extensions.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Useful UE4 Visual Studio extensions. Contribute to hackalyze/ue4-vs-extensions 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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VisualStudio에서 임포트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Extendsions &amp;gt; VCmd &amp;gt; Import&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;742&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD6WUR/btsz9jYOKGD/2N9A4IEqmBxjsb9ebC8sZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD6WUR/btsz9jYOKGD/2N9A4IEqmBxjsb9ebC8sZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD6WUR/btsz9jYOKGD/2N9A4IEqmBxjsb9ebC8sZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD6WUR%2Fbtsz9jYOKGD%2F2N9A4IEqmBxjsb9ebC8sZK%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;528&quot; height=&quot;207&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;291&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;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Extensions &amp;gt; VCmd &amp;gt; Extensions에서 확인가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VNjYB/btsAalPkBJ9/Okv04zlmTbfh4L4XjgwCVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VNjYB/btsAalPkBJ9/Okv04zlmTbfh4L4XjgwCVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VNjYB/btsAalPkBJ9/Okv04zlmTbfh4L4XjgwCVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVNjYB%2FbtsAalPkBJ9%2FOkv04zlmTbfh4L4XjgwCVK%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;549&quot; height=&quot;127&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Unreal</category>
      <author>cho22</author>
      <guid isPermaLink="true">https://cho22.tistory.com/101</guid>
      <comments>https://cho22.tistory.com/101#entry101comment</comments>
      <pubDate>Sat, 11 Nov 2023 20:47:20 +0900</pubDate>
    </item>
    <item>
      <title>flutter phrase 적용하기</title>
      <link>https://cho22.tistory.com/100</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;flutter 프로젝트에 다국어 처리로 phrase를 적용하기로 함.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pub.dev phrase: &lt;a href=&quot;https://pub.dev/packages/phrase&quot;&gt;https://pub.dev/packages/phrase&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_1699448539355&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;phrase | Flutter Package&quot; data-og-description=&quot;Phrase Strings over-the-air translations library for Flutter&quot; data-og-host=&quot;pub.dev&quot; data-og-source-url=&quot;https://pub.dev/packages/phrase&quot; data-og-url=&quot;https://pub.dev/packages/phrase&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DrvMn/hyUrwX1k8R/2qs5JiKRYc48PVdAsaIIdK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/bZcwvB/hyUu19UTvx/FyZ9R7w3ixp2UJKOp8rMG1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://pub.dev/packages/phrase&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://pub.dev/packages/phrase&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DrvMn/hyUrwX1k8R/2qs5JiKRYc48PVdAsaIIdK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/bZcwvB/hyUu19UTvx/FyZ9R7w3ixp2UJKOp8rMG1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&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;phrase | Flutter Package&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Phrase Strings over-the-air translations library for Flutter&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pub.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pub.dev에서 phrase가이드를 보니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;phrase를 사용하기위해 우선 flutter 기본 문서의 다국어 처리를 하고, 그후에 phrase를 적용해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1699448687633&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;Internationalizing Flutter apps&quot; data-og-description=&quot;How to internationalize your Flutter app.&quot; data-og-host=&quot;docs.flutter.dev&quot; data-og-source-url=&quot;https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization&quot; data-og-url=&quot;https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/piIxT/hyUrvLBnOu/EFn2quCy2s98F0ZIpkBiv1/img.png?width=937&amp;amp;height=461&amp;amp;face=0_0_937_461&quot;&gt;&lt;a href=&quot;https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/piIxT/hyUrvLBnOu/EFn2quCy2s98F0ZIpkBiv1/img.png?width=937&amp;amp;height=461&amp;amp;face=0_0_937_461');&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;Internationalizing Flutter apps&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;How to internationalize your Flutter app.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.flutter.dev&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-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&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;1459&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sLZHM/btsz1S0wmLF/Tte8xLLGxv5isVQDCKWP61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sLZHM/btsz1S0wmLF/Tte8xLLGxv5isVQDCKWP61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sLZHM/btsz1S0wmLF/Tte8xLLGxv5isVQDCKWP61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsLZHM%2Fbtsz1S0wmLF%2FTte8xLLGxv5isVQDCKWP61%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;1459&quot; height=&quot;286&quot; data-origin-width=&quot;1459&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1699448883877&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; flutter pub add flutter_localizations --sdk=flutter
 flutter pub add intl:any&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;phrase도 추가해준다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brjgKR/btsz1qwn1tv/EzKrkEcGrOnPAGbtOzSH00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brjgKR/btsz1qwn1tv/EzKrkEcGrOnPAGbtOzSH00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brjgKR/btsz1qwn1tv/EzKrkEcGrOnPAGbtOzSH00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrjgKR%2Fbtsz1qwn1tv%2FEzKrkEcGrOnPAGbtOzSH00%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;1201&quot; height=&quot;310&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1699449965476&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flutter pub add phrase&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pubspec.yaml파일에 추가된것 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7ePJ5/btsz1tUeK8N/x5TcTfmXJEwD1dT1AibVYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7ePJ5/btsz1tUeK8N/x5TcTfmXJEwD1dT1AibVYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7ePJ5/btsz1tUeK8N/x5TcTfmXJEwD1dT1AibVYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7ePJ5%2Fbtsz1tUeK8N%2Fx5TcTfmXJEwD1dT1AibVYK%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;349&quot; height=&quot;130&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;130&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_1699450025078&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;generate : true&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;748&quot; data-origin-height=&quot;109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ERkCA/btszXFuQSIW/klIdTaXK6JgoI2y58amFa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ERkCA/btszXFuQSIW/klIdTaXK6JgoI2y58amFa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ERkCA/btszXFuQSIW/klIdTaXK6JgoI2y58amFa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FERkCA%2FbtszXFuQSIW%2FklIdTaXK6JgoI2y58amFa1%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;748&quot; height=&quot;109&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;109&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트의 root directory에 새파일 생성 &amp;gt; l10n.yaml 생성한다&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;369&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kxy4d/btsz2WuIkCz/HhhCKKKViJToyU9lzlwQw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kxy4d/btsz2WuIkCz/HhhCKKKViJToyU9lzlwQw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kxy4d/btsz2WuIkCz/HhhCKKKViJToyU9lzlwQw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkxy4d%2Fbtsz2WuIkCz%2FHhhCKKKViJToyU9lzlwQw0%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;244&quot; height=&quot;505&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1699449165045&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lib폴더 아래에 l10n폴더생성 한다,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 안에 새파일 &amp;gt; app_en.arb파일을 추가해준다. &amp;lt;&amp;lt; phrase에서 추출해서 추가해줘야함&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;277&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZqCZ7/btsz13gAp4q/PZKpTKPiieHAJ0QQfOgi8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZqCZ7/btsz13gAp4q/PZKpTKPiieHAJ0QQfOgi8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZqCZ7/btsz13gAp4q/PZKpTKPiieHAJ0QQfOgi8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZqCZ7%2Fbtsz13gAp4q%2FPZKpTKPiieHAJ0QQfOgi8k%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;277&quot; height=&quot;130&quot; data-origin-width=&quot;277&quot; data-origin-height=&quot;130&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: #0070d1; text-align: start;&quot;&gt;&lt;a href=&quot;https://cho22.tistory.com/99&quot;&gt;https://cho22.tistory.com/99&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&amp;lt;&amp;lt; 여기에 샘플 파일 있음&lt;/p&gt;
&lt;figure id=&quot;og_1699450181659&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;flutter phrase적용 - phrase 추출하기&quot; data-og-description=&quot;https://us.phrase.com/idm-ui/dashboard https://us.phrase.com/idm-ui/logout us.phrase.com 언어추가 &amp;gt; en, ko추가해줌 (이 이름대로 파일명이 추출되니 app_en, app_ko로 하는게 좋은것같음, l10n.yaml 파일에서 설정한 이름이 a&quot; data-og-host=&quot;cho22.tistory.com&quot; data-og-source-url=&quot;https://cho22.tistory.com/99&quot; data-og-url=&quot;https://cho22.tistory.com/99&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bq0XYN/hyUrAGaXM5/wiWThRovTqXxcJNLp7TmfK/img.png?width=800&amp;amp;height=476&amp;amp;face=0_0_800_476,https://scrap.kakaocdn.net/dn/SLOIY/hyUu6wCxbg/RNqFYti1X7Ce1KLAJAKkwK/img.png?width=800&amp;amp;height=476&amp;amp;face=0_0_800_476,https://scrap.kakaocdn.net/dn/gMkZZ/hyUrrWHFSo/IrWevqC8nK4AgoTf8Lknc1/img.png?width=1675&amp;amp;height=766&amp;amp;face=0_0_1675_766&quot;&gt;&lt;a href=&quot;https://cho22.tistory.com/99&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cho22.tistory.com/99&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bq0XYN/hyUrAGaXM5/wiWThRovTqXxcJNLp7TmfK/img.png?width=800&amp;amp;height=476&amp;amp;face=0_0_800_476,https://scrap.kakaocdn.net/dn/SLOIY/hyUu6wCxbg/RNqFYti1X7Ce1KLAJAKkwK/img.png?width=800&amp;amp;height=476&amp;amp;face=0_0_800_476,https://scrap.kakaocdn.net/dn/gMkZZ/hyUrrWHFSo/IrWevqC8nK4AgoTf8Lknc1/img.png?width=1675&amp;amp;height=766&amp;amp;face=0_0_1675_766');&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;flutter phrase적용 - phrase 추출하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;https://us.phrase.com/idm-ui/dashboard https://us.phrase.com/idm-ui/logout us.phrase.com 언어추가 &amp;gt; en, ko추가해줌 (이 이름대로 파일명이 추출되니 app_en, app_ko로 하는게 좋은것같음, l10n.yaml 파일에서 설정한 이름이 a&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cho22.tistory.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-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 명령어 실행하여 코드 제너레이트&lt;/p&gt;
&lt;pre id=&quot;code_1699450232492&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flutter pub run phrase
flutter pub get&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.dart_tool 아래에 생성된것 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJTQCo/btszX3oH01a/qmRnVJwOiEATztk4Po9APk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJTQCo/btszX3oH01a/qmRnVJwOiEATztk4Po9APk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJTQCo/btszX3oH01a/qmRnVJwOiEATztk4Po9APk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJTQCo%2FbtszX3oH01a%2FqmRnVJwOiEATztk4Po9APk%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;312&quot; height=&quot;364&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;364&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;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드에서 사용&lt;/p&gt;
&lt;pre id=&quot;code_1699450409191&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_gen/gen_l10n/phrase_localizations.dart';
import 'package:phrase/phrase.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      //..
      localizationsDelegates: PhraseLocalizations.localizationsDelegates,
      supportedLocales: PhraseLocalizations.supportedLocales,
    );
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위젯에서 사용 (helloWorld는 키값)&lt;/p&gt;
&lt;pre id=&quot;code_1699450433004&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Text(AppLocalizations.of(context)!.helloWorld);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부</category>
      <author>cho22</author>
      <guid isPermaLink="true">https://cho22.tistory.com/100</guid>
      <comments>https://cho22.tistory.com/100#entry100comment</comments>
      <pubDate>Wed, 8 Nov 2023 22:34:11 +0900</pubDate>
    </item>
  </channel>
</rss>