<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>shineMyWay</title>
        <link>https://velog.io/</link>
        <description>안녕 난 지눈쓰</description>
        <lastBuildDate>Mon, 04 Apr 2022 19:13:59 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>shineMyWay</title>
            <url>https://images.velog.io/images/z-no_on/profile/ed8d5ea2-5f0f-480b-9124-8736a1dcbddf/KakaoTalk_20220305_173415066_06.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. shineMyWay. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/z-no_on" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[안드로이드 앱 5일차 및 마무리]]></title>
            <link>https://velog.io/@z-no_on/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-5%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@z-no_on/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-5%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Mon, 04 Apr 2022 19:13:59 GMT</pubDate>
            <description><![CDATA[<h3 id="앱-인트로-화면-만들기">앱 인트로 화면 만들기</h3>
<p>MainActivity가 있는 패키지에서 </p>
<p>마우스 우클릭 =&gt; New =&gt; Activity =&gt; Empty Activity 해서 </p>
<p>클래스랑 xml 한 쌍을 만들어준다. </p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/3d5f61e8-888b-473d-9ac5-9dfa75a815ea/image.png" alt=""></p>
<p>그 다음 우측 Attributes 검색창에 background 검색 =&gt; 원하는 배경색을 선택한다. </p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/c1ef3db4-ca70-4db8-be09-41eedbae32cf/image.png" alt=""></p>
<p>앱을 실행해보면 처음에 인트로 화면이 나오지 않고, </p>
<p>바로 activity_main.xml 화면이 나타난다. </p>
<p>인트로 화면이 먼저 뜨게 하고싶으면 따로 설정을 해줘야한다. </p>
<p>manifests 폴더에서 AndroidManifest.xml을 열고,</p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/55b04f9f-ce5d-4bc9-8053-43b6ac6324e0/image.png" alt=""></p>
<p>빨간색 동그라미 android:name 을 서로 바꿔준다. </p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/e60cc059-7543-4899-bbe6-b34309126fb4/image.png" alt=""></p>
<p>이렇게 해주고 실행을 해보면</p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/f902aa14-a49b-4262-9c50-94e0f363d0af/image.png" alt=""></p>
<p>이렇게 첫 화면으로 인트로 화면이 나타난다. </p>
<p>이제 인트로 화면이 뜨고 일정시간이 지나면 activity_main으로 이동하도록 ㄱㄱ</p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/312da9f3-06a5-4423-9f54-cf271a4ba5fd/image.png" alt=""></p>
<p>Intro 클래스에 위와 같이 코딩하고 실행해보면 </p>
<p>처음에 인트로 화면이 보이고, 3초 뒤에 메인화면으로 이동한다. </p>
<h3 id="마무리">마무리</h3>
<p>책 한 권을 다 보긴 했는데, 솔직히 배운게 별로 없는 것 같다. ㅋㅋㅋㅋㅋㅋㅋㅋ</p>
<p>원래 안드로이드 찍먹만 해볼까 하고 시작한거긴 하지만,</p>
<p>이건 너무 좀......................... 책이 좀 글타.</p>
<p>코드에 대한 설명은 하나도 없고, 그냥 똑같이 따라 쳐라 수준...</p>
<p>책 뒷 부분에 실전 앱 만들기 부분은 따라하다가 킹받고 현타와서 걍 때려침 ㅎㅎ</p>
<p>오타도 많고... 들여쓰기도 엉망이고... 솔직히 말해서</p>
<p>그냥 대충대충 찍어낸 책 같다. ㅎㅎㅎㅎㅎㅎㅎ</p>
<p>모바일 공부는 걍 나중에 강의 들으면서 제대로 각 잡고 해봐야겠다. </p>
<p>정처기 한 달 남아서 이제 정처기 공부 시작 ㄱㄱㄱ</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[안드로이드 앱 4일차]]></title>
            <link>https://velog.io/@z-no_on/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-4%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@z-no_on/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-4%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Sun, 03 Apr 2022 13:49:47 GMT</pubDate>
            <description><![CDATA[<h3 id="사운드-재생">사운드 재생</h3>
<p>프로젝트의 res 밑에 raw 폴더를 생성하고 그 안에 재생할 사운드 파일을 넣는다. </p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/fea93efc-33de-4ebb-a968-ba3b478e515f/image.png" alt=""></p>
<p>버튼을 하나 만들어주고, MainActivity에 아래와 같이 코딩 ㄱㄱ</p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/f13a8a78-15d6-4307-8f95-ee98773d9090/image.png" alt=""></p>
<p>soundf.play(a, b, c, d, e, f)의 각 재생 옵션들은 다음과 같다.</p>
<p>a : int sounded =&gt; 사운드 파일을 구분하기 위한 구분자
b : float leftVolume =&gt; 사운드 왼쪽 볼륨(소리 크기 범위는 0<del>1)
c : float rightVolume =&gt; 사운드 오른쪽 볼륨(소리 크기 범위는 0</del>1)
d : int priority =&gt; 사운드 우선 순위
e : int loop =&gt; 재생 반복 (1은 1회, 2는 2회, -1은 무한 반복)
f : float rate =&gt; 재생 속도, 1은 정상속도, -1은 느리게, 2는 빠르게</p>
<p>그 다음 앱 실행한 후 버튼을 클릭하면 사운드가 출력된다.</p>
<h3 id="경고창-만들기">경고창 만들기</h3>
<p>MainActivity에 아래와 같이 코딩 ㄱㄱㄱ</p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/d4939f7f-3242-48a0-808b-e9118e41fe66/image.png" alt=""></p>
<p>AlertDialog 객체를 만들고 setMessage()에 질문을 입력,</p>
<p>setPositiveButton()이랑 setNegativeButton()에 각각 텍스트랑 이벤트를 만들어준다. </p>
<p>에뮬레이터 실행을 하면</p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/436f6175-77fe-4f3f-a483-97d8497feeaf/image.png" alt=""></p>
<p>이렇게 실행하자마자 앱을 종료하겠냐는 alert가 뜬다. </p>
<p>&#39;아니오&#39; 누르면 팝업이 사라지면서 앱은 유지된다. (바로 return 했으니까)</p>
<p>&#39;네&#39; 를 누르면 finish()가 실행되어 </p>
<p><img src="https://media.vlpt.us/images/z-no_on/post/79ec0fa3-b688-42f1-b277-fa401f6e16e6/image.png" alt=""></p>
<p>이렇게 앱이 종료된다. (무작정 따라하긴 했는데 개허접한...)</p>
<p>여튼 끗</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[안드로이드 앱 3일차]]></title>
            <link>https://velog.io/@z-no_on/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-3%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@z-no_on/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-3%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Thu, 31 Mar 2022 17:03:16 GMT</pubDate>
            <description><![CDATA[<p>한동안 회사 수습 프로젝트 때문에 별도로 다른 공부를 못하다가</p>
<p>프로젝트 2차 평가 끝나자 마자 코로나 확진돼버렸다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋ</p>
<p>일주일 격리하면서 그동안 못 했던 진도를 다 빼야겠다. </p>
<h3 id="웹사이트로-이동하기">웹사이트로 이동하기</h3>
<p><img src="https://images.velog.io/images/z-no_on/post/cbc44222-08c5-49e7-bbf0-14ce151e6783/image.png" alt="">
이전에 하던거에 이어서 </p>
<p>버튼 onclick 이벤트에 Intent 객체를 생성하고 Uri 설정해주고 파싱 후 </p>
<p>startActivity(Intent객체) 하고 나서 </p>
<p><img src="https://images.velog.io/images/z-no_on/post/3c08af0d-8eda-4da3-a12e-1e52a7b76c31/image.png" alt=""></p>
<p>버튼을 누르면!</p>
<p><img src="https://images.velog.io/images/z-no_on/post/c4550ae2-48cc-499c-9f24-7c9b02c2b7c2/image.png" alt=""></p>
<p>요렇게 설정한 Uri 페이지로 화면이 이동하게 된다. </p>
<p>아주 허접하다..</p>
<h3 id="다른-화면으로-이동하기">다른 화면으로 이동하기</h3>
<p>MainActivity가 있는 패키지(폴더)에서 우클릭 =&gt; New =&gt; Activity 하게 되면,</p>
<p>다음과 같은 화면이 나온다. </p>
<p>Activity란 웹 개발에서 JSP처럼, 하나의 화면단을 말하는 것 같다. </p>
<p><img src="https://images.velog.io/images/z-no_on/post/2fffe26d-5214-4a9b-a6ac-d8e1ae064838/image.png" alt=""></p>
<p>여기서 이름 설정하고 Finish 클릭하면</p>
<p><img src="https://images.velog.io/images/z-no_on/post/6f8cc17d-b0b7-4413-ab47-a974370e5b5d/image.png" alt=""></p>
<p>이렇게 클래스랑 xml이 쌍으로 만들어진다. </p>
<p>Activity 클래스는 코드가 구성되는 파일이고, xml에서는 화면이 직접 구성된다. </p>
<p>클래스 두 개를 만들어주고 MainActivity 클래스에 </p>
<p>클릭하면 이동할 수 있는 버튼을 만들고, 아래처럼 버튼 클릭 이벤트를 준다.</p>
<p>웹사이트로 이동할 때 처럼 Intent 객체 만들고, startActivity() ㄱㄱ
<img src="https://images.velog.io/images/z-no_on/post/3280a7c5-75ff-4598-a9f5-1c38f6ebe5bb/image.png" alt=""></p>
<p>그 다음에는 이동할 페이지 화면 구성을 해준다. </p>
<p><img src="https://images.velog.io/images/z-no_on/post/84f27a41-b8b7-4717-a999-79d85afd8a3e/image.png" alt=""></p>
<p>첫 번째 페이지라는 텍스트박스를 생성했고,</p>
<p>홈으로 이동할 수 있는 버튼을 추가했다. </p>
<p><img src="https://images.velog.io/images/z-no_on/post/4cde7e7c-0226-426a-8a72-298ecc1ff135/image.png" alt=""></p>
<p>똑같이 기본적으로 있는 onCreate() 메서드 안에다가 버튼 객체를 만들고</p>
<p>onClick() 이벤트를 만들어준다. </p>
<p>그냥 finish() 하게 되면 해당 화면을 끝내고 홈 화면으로 이동하는것 같다.</p>
<p>두 번째 화면도 똑같이 만들어주고 에뮬레이터 실행 ㄱㄱㄱ</p>
<p><img src="https://images.velog.io/images/z-no_on/post/b51ec83f-a07c-46a2-a3e4-b4fe85125a47/image.png" alt=""></p>
<p>화면1 버튼을 클릭하면</p>
<p><img src="https://images.velog.io/images/z-no_on/post/e0c5fe7c-26e4-4c6f-8a92-ed0764fbee1c/image.png" alt=""></p>
<p>이렇게 첫 번째 페이지로 이동한다. </p>
<p>홈버튼을 누르면 다시 메인페이지로 이동한다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[안드로이드 앱 2일차]]></title>
            <link>https://velog.io/@z-no_on/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-2%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@z-no_on/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-2%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Tue, 15 Mar 2022 14:18:19 GMT</pubDate>
            <description><![CDATA[<p>activity_main.xml 의 Design 탭
<img src="https://images.velog.io/images/z-no_on/post/636c8f03-7ec3-47fe-b185-1ae371ba1116/image.png" alt="">
버튼을 클릭하고 Attributes 뷰에서 해당 버튼의 id를 설정할 수 있다.</p>
<p><img src="https://images.velog.io/images/z-no_on/post/277e2bce-8fb4-4e06-a175-b96df29773cb/image.png" alt="">
그리고 이건 MainActivity.java 클래스. </p>
<p>여기서 코딩을 해서 activity_main.xml에 있는 버튼의 이벤트를 발생시킬 수 있다.</p>
<p>처음에 기본적으로 작성되어있는 코드를 보니까 뭔가 2개 import 되어있고,
기본 클래스는 AppCompatActivity 라는 클래스를 상속받고 있는데
아직은 뭐가 뭔지 잘 모르겠다. </p>
<p>우선은 책에서 하라는데로 ㄱㄱㄱ</p>
<p><img src="https://images.velog.io/images/z-no_on/post/d51d5dfe-9380-4b74-96da-4469dc5e3931/image.png" alt="">
오버라이딩 된 onCreate() 메서드에 요렇게 코딩을 하고, import할꺼 해주고
<img src="https://images.velog.io/images/z-no_on/post/0ce7c18a-2094-40cf-9271-a2ba524dc4a9/image.png" alt="">
AVD를 실행한 뒤 버튼을 클릭하면 AVD화면 아래쪽에 저렇게 알림이 뜬다.</p>
<pre><code class="language-java">Toast.makeText(getApplicationContext(), &quot;버튼이 눌러졌습니다&quot;, Toast.LENGTH_LONG).show();</code></pre>
<p>android.widget 에 있는 Toast는 메세지를 잠깐동안 띄우는 기능을 한다. </p>
<p>수습프로젝트에서 쓰고있는 자바스크립트 Toastr API랑 비슷한거다. </p>
<p>LENGTH_LONG 은 알림을 띄우는 시간을 나타낸다. </p>
<p>LONG을 SHORT로 바꾸면 알람이 떠있는 시간이 짧아진다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JSON 라이브러리 Jackson/GSON 비교]]></title>
            <link>https://velog.io/@z-no_on/JSON-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-JacksonGSON-%EB%B9%84%EA%B5%90</link>
            <guid>https://velog.io/@z-no_on/JSON-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-JacksonGSON-%EB%B9%84%EA%B5%90</guid>
            <pubDate>Sun, 13 Mar 2022 09:08:41 GMT</pubDate>
            <description><![CDATA[<p>REST API란 쉽게 말해서 자원의 이름으로 자원의 상태를 주고받을 수 있는 API이다. </p>
<p>JSON 이나 XML 을 사용해서 데이터(자원)를 주고받는 것이 일반적이다. </p>
<p>개발원에서는 객체를 JSON형식으로 변환하거나 JSON을 다시 파싱할 때 Jackson 라이브러리를 사용했었는데, 회사에서는 GSON을 사용해보라고 했다. </p>
<p>그냥 익숙한 Jackson objectMapper를 사용하고 싶었지만, 어쩔 수 없이 GSON도 공부할겸... 
두 개를 비교해서 정리했다. </p>
<h2 id="jackson">Jackson</h2>
<p>Jackson은 JSON뿐만 아니라 XML도 지원하는 라이브러리이다. </p>
<p>스프링을 배우기 전에는 JAVA객체를 JSON으로 변환할 때 직렬화(serializing) 하고 마샬링을 해줘야 했는데, Jackson ObjectMapper를 사용하면 객체를 한 방에 JSON화 할 수 있어서 엄청 편했다.</p>
<h4 id="직렬화-java객체--json형식">직렬화 (JAVA객체 =&gt; JSON형식)</h4>
<p>우선 Jackson에서 직렬화 하는 방법이다.</p>
<pre><code class="language-java">ObjectMapper mapper = new ObjectMapper();

// string으로 직렬화
String jsonResult = mapper.writeValueAsString(boardVO); // boardVO =&gt; json으로 바꾸고싶은 java객체

// json 파일로 저장
mapper.writeValue(new File(&quot;src/resources/result.json&quot;), boardVO);

// byte 배열로 저장
byte[] jsonBytes = mapper.writeValueAsBytes(boardVO);</code></pre>
<p>이렇게 ObjectMapper객체를 만들고 writeValueAsString() 하게 되면, ( )안에 있는 JAVA객체를 JSON 형식의 스트링 문자열로 변환해준다. string 외에도 파일이나 바이트 배열로 저장할 수 있다. </p>
<h4 id="역직렬화-json형식의-데이터--java객체">역직렬화 (JSON형식의 데이터 =&gt; JAVA객체)</h4>
<p>다음은 JSON형식의 데이터를 JAVA로 변환하는 역직렬화 방법이다.</p>
<pre><code class="language-java">ObjectMapper mapper = new ObjectMapper();

// JSON 파일에서 읽기
BoardVO boardVO = mapper.readValue(new File(&quot;src/resources/data.json&quot;), boardVO.class);

// String 으로 읽기
BoardVO boardVO = mapper.readValue(&quot;{\&quot;id\&quot;:\&quot;a001\&quot;, \&quot;name\&quot;:홍길동}&quot;, boardVO.class);</code></pre>
<p>이처럼 readValue()로 JSON형식의 데이터를 읽을 수 있다. </p>
<p>boardVO 대신에 저장할 Java 객체를 넣어주면 된다.</p>
<p>List나 Map 형식으로 변환하고 싶으면 아래처럼 TypeReference를 사용하면 된다.</p>
<pre><code class="language-java">// List 형식
String jsonArray = 
  &quot;[{ \&quot;id\&quot; : \&quot;a001\&quot;, \&quot;name\&quot; : \&quot;홍길동\&quot; }, { \&quot;id\&quot; : \&quot;b001\&quot;, \&quot;name\&quot; : \&quot;지눈쓰\&quot; }]&quot;;

List&lt;BoardVO&gt; listBoard = objectMapper.readValue(jsonArray, new TypeReference&lt;List&lt;BoardVO&gt;&gt;(){});

// Map 형식
String json = &quot;{ \&quot;id\&quot; : \&quot;a001\&quot;, \&quot;name\&quot; : \&quot;홍길동\&quot; }&quot;;

Map&lt;String, Object&gt; map 
  = objectMapper.readValue(json, new TypeReference&lt;Map&lt;String,Object&gt;&gt;(){});</code></pre>
<p>Jackson은 고용량의 JSON데이터를 처리할 때 GSON보다 성능이 좋다고 한다. </p>
<h2 id="gson">GSON</h2>
<p>GSON은 구글에서 만들었으며, 이름에서도 알 수 있듯이 딱 JSON형식만 처리할 수 있는것 같다. </p>
<p>가벼운 JSON 데이터를 처리할 때 성능이 좋다고 한다. </p>
<h4 id="직렬화">직렬화</h4>
<p>GSON에서 Java객체를 문자열로 직렬화 하는 방법이다. </p>
<pre><code class="language-java">String jsonResult = new Gson().toJson(boardVO);</code></pre>
<p>이렇게 Gson객체를 만들고 toJson( )하면 간단하게 JAVA객체를 JSON형식의 문자열로 변환할 수 있다.</p>
<h4 id="역직렬화">역직렬화</h4>
<p>다음은 역직렬화이다.</p>
<pre><code class="language-java">String jsonInput = &quot;json 형식의 string 데이터&quot;;
BoardVO boardVO = new Gson().fromJson(jsonInput, boardVO.class);</code></pre>
<p>똑같이 Gson객체 만들고 fromJson( )에 JSON 형식의 문자열 데이터만 넣어주면 된다. </p>
<h4 id="json객체-생성하고-json형식의-문자열로-변환-예시">JSON객체 생성하고 JSON형식의 문자열로 변환 예시</h4>
<pre><code class="language-java">import com.google.gson.Gson;
import com.google.gson.JsonObject;

public class GsonExample {

    public static void main(String[] args) {

        Gson gson = new Gson();
        // Json 객체생성 (key, value 추가)
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty(&quot;id&quot;, &quot;a001&quot;);
        jsonObject.addProperty(&quot;name&quot;, &quot;홍길동&quot;);
        // JsonObject를 Json 문자열로 변환(직렬화)
        String jsonStr = gson.toJson(jsonObject);
        // 생성된 Json 문자열 출력
        System.out.println(jsonStr); // {&quot;id&quot;:&quot;a001&quot;,&quot;name&quot;:홍길동}

    }

}</code></pre>
<p>JsonObject 객체를 생성후 프로퍼티를 추가하고 이를 문자열로 직렬화했다.</p>
<h4 id="json형식의-문자열을-java-객체로-변환-예시">JSON형식의 문자열을 Java 객체로 변환 예시</h4>
<pre><code class="language-java">import com.google.gson.Gson;

public class JsonToObject {

    public static void main(String[] args) {

        // Json 문자열
        String jsonStr = &quot;{\&quot;id\&quot;:a001,\&quot;name\&quot;:\&quot;홍길동\&quot;}&quot;;
        // Gson 객체 생성
        Gson gson = new Gson();
        // Json 문자열 -&gt; VO 객체
        BoardVO boardVO = gson.fromJson(jsonStr, BoardVO.class);

    }

}</code></pre>
<p>VO가 아니라 Map 형식도 똑같이 하면 된다. </p>
<p>공부해보니까 Jackson이나 GSON이나 사용법은 비슷비슷한거같다.</p>
<p>걍 더 편한거 쓰면 될듯</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[안드로이드 앱 1일차]]></title>
            <link>https://velog.io/@z-no_on/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-1%EC%9D%BC%EC%B0%A8-0rk67qv0</link>
            <guid>https://velog.io/@z-no_on/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-1%EC%9D%BC%EC%B0%A8-0rk67qv0</guid>
            <pubDate>Thu, 10 Mar 2022 14:21:41 GMT</pubDate>
            <description><![CDATA[<p>드디어 시작한 모바일 개발공부!</p>
<p>원래는 모바일(안드로이드)개발 제대로 하려면 코틀린을 조져야하는데 ㅠ</p>
<p>일단은 맛보기로! 
익숙한 자바 기반에서 안드로이드 앱 개발 공부할 수 있는 책을 하나 샀다. </p>
<p>암튼 처음에 책 보면서 안드로이드 스튜디오랑 개발환경 이것저것 셋팅을 하고,</p>
<p><img src="https://images.velog.io/images/z-no_on/post/b89e91a7-1b8c-4cbb-939c-3db21fc593bb/image.png" alt=""></p>
<p>안드로이드 스튜디오에서 프로젝트 생성, 실행 해보면 가상 스마트폰 에뮬레이터(AVD)가 생기면서 앱이 실행되는 화면이 나타난다. Hello World 오랜만이누 ㅋㅋ</p>
<p><img src="https://images.velog.io/images/z-no_on/post/a3718ba8-2bf4-4c1f-ae99-d891e9b0708f/image.png" alt=""></p>
<p>res/values/strings.xml에 &lt;string&gt; 태그 사이에서 앱의 이름을 설정할 수 있다.</p>
<p><img src="https://images.velog.io/images/z-no_on/post/274cb08d-46a8-4664-b940-968afa474973/image.png" alt=""></p>
<p>화면 구성은 layout 폴더에서 할 수 있다.</p>
<p>res/layout/activity_main.xml에 Design 탭에서는 앱을 만들고 있는 모양이 나오고,
Text 탭에서는 그 코드가 나온다. </p>
<p><img src="https://images.velog.io/images/z-no_on/post/190985f2-5264-4d01-aa98-0e16911e48b7/image.png" alt=""></p>
<p>Design =&gt; Palette 에서 버튼이나 여러가지 레이아웃을 추가할 수 있다. </p>
<p>여기서 디자인을 하면 Text에서 코드가 그에 맞게 알아서 바뀐다. </p>
<p>디자인한 버튼은 중앙에 있는데 AVD에서는 버튼이 젤 위에 올라가있다. </p>
<p><img src="https://images.velog.io/images/z-no_on/post/d05658f0-1e97-451c-9d47-e2892dbe596b/image.png" alt=""></p>
<p>스마트폰의 크기가 다 다르기 때문에 버튼 위치도 절대적이지 않다고 한다. </p>
<p>이럴때는 버튼을 클릭하면 나오는 점들을 드래그해서 원하는 곳에 연결하면 된다. </p>
<p>이제 AVD에서도 버튼이 중앙에 위치한 것을 볼 수 있다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[첫 글]]></title>
            <link>https://velog.io/@z-no_on/%EC%B2%AB-%EA%B8%80</link>
            <guid>https://velog.io/@z-no_on/%EC%B2%AB-%EA%B8%80</guid>
            <pubDate>Sun, 06 Mar 2022 05:14:13 GMT</pubDate>
            <description><![CDATA[<p>한달차 신입 개발자...</p>
<p>회사에서나 퇴근하고나서 공부한것들 정리하고 기록할겸 </p>
<p>벨로그 시작!</p>
]]></description>
        </item>
    </channel>
</rss>