포스팅 OS : Mac

검색어 : 안드로이드(Android), 코틀린(Kotlin), 텍스트뷰(TextView), 버튼(Button)




▶︎ 이전 포스팅 목록

2018/02/10 - [Android_Kotlin] - [Android Kotlin] 안드로이드 스튜디오(Andorid Studio)에 코틀린(Kotlin) 개발환경 셋팅



이전 포스팅에서는 안드로이드 스튜디오에 코틀린 개발환경을 셋팅하는 방법에 대해 알아보았습니다. 오늘은 텍스트뷰와 버튼의 기본적인 사용법에 대해 알아보려고 합니다. 개발환경 셋팅 후 처음으로 만들어보는 Hellow Kotlin 예제라고 생각하시면 됩니다.


참고로 앞으로 기본적인 설명은 왠만하면 주석으로 대체할 생각이며 안드로이드 코틀린 포스팅의 경우 자바를 어느정도 이해하시고 있다고 가정하고 진행합니다.


1. 레이아웃


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.kotlin_test.Activity.HellowWorldActivity">

<TextView
android:id="@+id/txtHellow"
android:layout_width="match_parent"
android:layout_height="50dp"
android:textSize="20dp"
android:textStyle="bold"
android:gravity="center"/>

<Button
android:id="@+id/btn_clear"
android:text="Text Clear"
android:layout_width="match_parent"
android:layout_height="50dp" />

<Button
android:id="@+id/btn_print_01"
android:text="print_01"
android:layout_width="match_parent"
android:layout_height="50dp" />
<Button
android:id="@+id/btn_print_02"
android:text="print_02"
android:layout_width="match_parent"
android:layout_height="50dp" />

<Button
android:id="@+id/btn_print_03"
android:text="print_03"
android:layout_width="match_parent"
android:layout_height="50dp" />
</LinearLayout>







2. 소스


import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.kotlin_test.R
import kotlinx.android.synthetic.main.activity_hellow_world.*

class HellowWorldActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_hellow_world)

btn_clear.setOnClickListener {
txtHellow.setText("")
}

btn_print_01.setOnClickListener {
txtHellow.setText("Hellow Kotlin_01")
}

// val 변수 사용
btn_print_02.setOnClickListener {
// 변경 불가능한 변수 - val
// 자바로 말하면 final
val nameStr : String = "Kotlin_02"
txtHellow.setText("Hellow $nameStr")
}

// var 변수 사용
btn_print_03.setOnClickListener {
// 변경 가능한 변수 - var
var nameStr : String = "Test"
nameStr = "Kotlin_03"
txtHellow.setText("Hellow $nameStr")
}

}
}


위 소스를 보시면 자바와는 다른점이 확연히 느껴지실 겁니다. 달라진 점에 대해서는 차근차근 차후 포스팅에서 설명하겠지만 현재 눈에 보이는 가장 큰 차이는 코틀린은 데이터바인딩을 지원해서 레이아웃에 있는 뷰를  findViewById 할 필요가 없이 바로 id로 호출하여 사용이 가능하다는 점입니다.




3. 실행 결과






포스팅 OS : Mac

검색어 : 자바(Java), 배열(Array), 마름모(Diamond)




오늘은 자바 기초 공부를 위해 배열을 사용해 입력받은 정수에 따라 점점 커지는 마름모 그리는 방법에 대해 포스팅합니다.


이 마름모 그리기는 자바를 처음 공부하기 시작했을 때 많이들 접하는 문제인데 사실 정답은 없는 문제입니다. 여기서 정답이 없다는 것이 무슨 뜻이냐면 어떤 소스가 되었던 마름모만 그려지면 된다는 것을 의미합니다. 제가 작성한 소스가 정답은 아니라는 거죠. 누군가는 저 소스보다 더 간단하고 쉽게 마름모를 그릴 수도 있습니다. 


잠깐 잡담을 하고 가자면 개발은 본업으로 삼고 몇년째 이일을 하고 있지만 잘짜여진 소스가 일하는데 있어서 크게 중요한 것은 아닙니다. 물론 머리 좋은 사람이 보기 쉽고 짧게 작성해 놓은 소스라면 더 좋겠지만 프로젝트를 진행해나감에 있어서 일단 목표했던 기능이 제대로 구현되고 있는지가 먼저라고 생각합니다. 당연히 이것은 제 개인적인 생각입니다. 제 스타일은 그렇거든요. 일단 기능 구현 후 차차 소스를 정리해나가는 타입입니다. 처음부터 정리된 소스를 추구하는 분들도 있고 저같은 사람도 있습니다. 스타일은 중요하지 않습니다. 이 마름모 소스와 마찬가지로 뭐로 가든 일단 마름모만 그려지면 됩니다.


왜 이 긴 잡담을 했냐면 이 글을 보시는 여러분이 본인 스스로 만든 마름모 소스와 제 소스의 방법이 다르다 해서 저게 맞고 이게 틀리다 혹은 이게 맞고 저게 틀리다가 아니라는 것을 말하고 싶었습니다. 더 좋은 방법을 쓴 좋은 소스가 있다면 그것을 자신의 것으로 흡수하여 자유자재로 사용할 수 있게 제대로 소화하기만 하면 됩니다. 


잡담은 여기까지 하고 마름모 그리기 소스를 보시겠습니다. 소스에 대한 설명은 주석으로 간략하게 달아 놓았습니다. 설명을 주저리주저리 길게 써봤자 본인들 실력엔 도움이 되지 않습니다. 주석을 보고 이해가 안되는 점은 소스를 차근차근 분석해서 생각해보세요. 그 과정이 본인의 실력을 늘리는 피와 살이 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.Scanner;
 
public class Diamond {
 
    public static void main(String[] args) {
        /* 마름모 그리기 */    
    
        System.out.println("숫자를 입력해주세요.");
        Scanner input = new Scanner(System.in);
        
        int answer;                    // 입력받은 정수
        int center;                    // 가운데 행
        
        // 스캐너로 정수 입력 받기
        answer = input.nextInt();   
        
        // 입력받은 정수를 가공하여 마름모가 그려질 가로, 세로 길이 구하기
        answer = answer * 2 + 1;
        
        // 가운데 행 위치 지정
        center = answer/2;
        
        // 가공한 정수를 배열 생성에 사용
        char[][] dia = new char[answer][answer]; 
        
        int start = center;    // 점을 찍을 시작 지점
        int end = center;      // 점을 찍을 종료 지점
        
        // 마름모 생성
        for(int a=0 ; a < answer ; a++){
            for(int b=0 ; b < answer ; b++){
                if(start <= b && b <= end) {
                    dia[a][b] = '*';
                }else {
                    dia[a][b] = ' ';
                }
            }
            
            // 중간에서 점 찍는 위치 반전
            if(a < center) {
                start--;
                end++;
            }else {
                start++;
                end--;
            }
        }
        
        // 마름모 배열 출력
        for(int a=0 ; a < answer ; a++){
            for(int b=0 ; b < answer ; b++){
                System.out.print(dia[a][b]);
            }
            System.out.println();
        }
    }
}
cs



위 소스를 실행하면 아래와 같이 마름모가 그려집니다.

(왼쪽 상단에 숫자는 입력한 정수 입니다.)






다음 포스팅은 점점 커지는 별 그리기 포스팅을 하도록 하겠습니다.


포스팅 OS : Mac
검색어 : 디버그(Debug), 릴리즈(Release), 빌드(Buiild), 벨류(Value)
 
안드로이드 스튜디오로 앱을 소스를 관리할 때 디버그 빌드와 릴리즈 빌드의 벨류값을 따로 관리 하고 싶을 때 사용한다.
 
예를 들어 하나의 텍스트 뷰에 디버그 일때와 릴리즈 일때 각각 다른 텍스트를 보여주고 싶을 때 사용 가능하다. 
Ex)
- 디버그 빌드 일때는 텍스트로 '디버그 모드'를 노출
- 릴리즈 빌드 일때는 텍스트로 '릴리즈 모드'를 노출 
 
사용법은 아래와 같다.
 
1. build.gradle(Module:app)에서 아래와 같이 벨류를 생성 할 수 있다.
android {
    ...

    buildTypes {
        debug {
            // 레이아웃 벨류 사용법
            resValue("string", "testvalue", "디버그 모드")

            // 자바 벨류 사용법
            buildConfigField "String",  "TestValue01", "\"디버그 모드\""
            buildConfigField "int",     "TestValue02", "1234567890"
            buildConfigField "boolean", "TestValue03", "true"

        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            // 레이아웃 벨류 사용법
            resValue("string", "testvalue", "릴리즈 모드")

            // 자바 벨류 사용법
            buildConfigField "String", "TestValue01", "\"릴리즈 모드\""
            buildConfigField "int",     "TestValue02", "0987654321"
            buildConfigField "boolean", "TestValue03", "false"
        }
    }
}
- 위와 같이 같은 벨류 명으로 debug와 release에 값을 다르게 생성하면 각 모드에서 해당 값으로 사용 가능하다.
 
1) resValue
- XML에서 사용할 수 있는 벨류
- 생성한 벨류는 모두 generated.xml에 자동으로 생성된다. 
- generated.xml : 아래와 같이 resValue로 생성한 변수가 생성되어 있는 것이 확인 가능하다.
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- Automatically generated file. DO NOT MODIFY -->

    <!-- Values from build type: release -->
    <string name="testvalue" translatable="false">릴리즈 모드</string>

</resources>
2) buildConfigField
- 자바 소스에서 사용 가능한 벨류.
- 생성한 벨류는 모두 BuildConfig.java에 자동으로 생성된다.
- Buildconfig.java : 아래와 같이 buildConfigFeild로 생성한 변수가 생성되어 있는 것이 확인 가능하다.

public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.linecorp.advertise.buildmodetest";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
// Fields from build type: debug
public static final String TestValue01 = "디버그 모드";
public static final int TestValue02 = 1234567890;
public static final boolean TestValue03 = true;
}

2. 위에서 생성한 벨류를 사용해보자
1) resValue 사용법
- 아래와 같이 화면 레이아웃 xml에 벨류값을 불러서 사용한다.
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/testvalue" />
2) buildConfigField 사용법
- 아래와 같이 자바 소스로 벨류값을 불러서 사용한다.
TextView testValue01 = findViewById(R.id.txt_testValue01);
testValue01.setText(BuildConfig.TestValue01);
 
 
 
 
 
 

 

포스팅 OS : Windows 10

검색어 : 코틀린(Kotlin), 셋팅(Setting), 셋업(Setup), 설치(Install)


앞으로 매번 포스팅 글 상단에 포스팅 OS를 기재해 놓을 생각입니다. 그 이유는 제가 노트북은 맥이고 데스크탑은 Windows를 사용하고 있어서 수시로 바뀔 예정이라 항상 상단에 표기해 놓도록 하겠습니다. 운영체제가 바뀐다 하여도 단축키나 메뉴의 위치 말고는 큰 영향이 없기에 무리 없을 것으로 판단됩니다. (이정도 차이조차 극복하지 못하신다면 개발 자체가 힘든분이라 생각됩니다...)



1. 코틀린(Kotlin) 플러그인 설치


1) 안드로이드 스튜디오 3.0 이전 버전


현재 설치되어 있는 안드로이드 스튜디오가 2.x 버전일 경우에는 플러그인을 설치해야 합니다.


File -> settings -> Plugins 에서 검색창에 Kotlin으로 검색하시면 JetBrains사에서 만든 플러그인이 딱 1개 나옵니다. install 버튼을 눌러서 설치하시면 됩니다. (아래 사진에는 이미 설치되어 있는 관계로 Uninstall 버튼이 표시되고 있습니다.)




2) 안드로이드 스튜디오 3.0 이상 버전


안드로이드 스튜디오 3.0 이상 버전일 경우에는 별도의 플러그인 설치 없이 바로 코틀린 사용이 가능합니다. 아래 사진처럼 include Kotlin support에 체크 후 프로젝트를 생성하면 코틀린으로 만들어진 메인 액티비티가 생성됩니다.





2. 프로젝트 그래들 셋팅


안드로이드 스튜디오 3.0 이상 버전일 경우 바로 위 사진처럼 include Kotlin support에 체크 후 사용해 프로젝트를 생성하면 아래와 같이 코틀린으로 생성된 메인 액티비티가 반겨줍니다.

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}


이제 그래들을 살펴 보겠습니다. 우선 build.gradle(Project : ...) 를 살펴보면 아래와 자바 프로젝트와 다른 점이 보입니다.

buildscript {
ext.kotlin_version = '1.2.21'
    ...
}

코틀린 버전을 입력해놓은 변수가 보입니다. 이걸 보면 딱 감이 옵니다. 코틀린이라는 언어를 라이브러리 처럼 사용하고 있구나... 라고 말이죠.

그럼 이제 build.gradle(Module:app)으로 가보겠습니다. 

dependencies {
...
implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
...
}

역시 생각대로 코틀린 라이브러리가 컴파일 되어 있는 것이 보입니다. 이걸 보면 기존에 자바 프로젝트에도 코틀린을 사용할 수 있다는 것을 알 수 있습니다.

여기서 눈썰미 있는 분들은 compile -> implementation 로 명령어가 바뀌어 있는 것을 눈치채셨을 겁니다. 이부분에 대한 설명은 지금은 중요한 것이 아니니 다음에 기회되면 포스팅하도록 하겠습니다. 지금은 그냥 compile 명령어가 바뀌었다라고만 알고 계시면 됩니다. 

(물론 implementation 대신 compile 명령어를 사용하셔도 작동합니다.)

 



3. Anko 라이브러리 추가


여기까지 코틀린 플러그인을 설치하고 코틀린을 사용한 프로젝트의 그래들까지 살펴보았습니다. 하지만 여기서 개발환경 셋팅의 끝이 아닙니다. 코틀린을 이용하여 안드로이드 앱을 개발할 때 조금 더 편리하게 사용가능하도록 도와주는 라이브러리가 있습니다. 그중 Anko는 가장 강력한 라이브러리 중 하나입니다. 가장 최신 Anko버전을 확인하려면 Anko repository에서 확인가능합니다.


아래와 같이 gradle에 추가해주시면 됩니다.

/* bulid.gradle(Project:...) */
buildscript {
ext.kotlin_version = '1.2.21'
ext.anko_version = '0.10.3'
    ...
}


/* bulid.gradle(Module:app) */
dependencies {
...
implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation "org.jetbrains.anko:anko:$anko_version"
...
}

Anko 라이브러리가 가지고 있는 기능은 해당 기능을 사용할때 하나하나 포스팅하도록 하겠습니다. 지금은 안드로이드 앱을 코틀린으로 개발시 필수 라이브러리라고 생각하시면 됩니다. 여기까지 하셨으면 기본적인 안드로이드 스튜디오에 코틀린 개발환경 셋팅은 끝난 것입니다. 




4. Hellow Kotlin 실행


Hellow Kotlin을 실행해보도록 하겠습니다. 


- activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.network_kotlin_test.MainActivity">

<TextView
android:id="@+id/txt_hellow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30sp"
android:gravity="center" />

</LinearLayout>

- MainActivity.kt

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

txt_hellow.text = "Hellow Kotlin"
}
}


위와 같이 셋팅하고 실행하면 아래와 같이 화면에 Hellow Kotlin이 출력되는 것을 확인할 수 있습니다.




이제 코틀린으로 안드로이드 앱을 개발하기 위한 셋팅을 마쳤습니다. 처음 써보는 포스팅인지라 많이 부족합니다. 최대한 알아보기 쉽게 작성하려고 노력하였으나 제 의도대로 쓰였는지 모르겠습니다. 그럼 이만 마치겠습니다.




+ Recent posts