Mobile/Kotlin

    [Kotlin] 레이아웃(Layout) - 컨스트런트

    [Kotlin] 레이아웃(Layout) - 컨스트런트

    Android Studio에서 화면 표시를 담당하는 영역이 레이아웃이며 처음 프로젝트를 생성하면 자동으로 생성되는 파일인 activity_main.xml이 바로 레이아웃 파일에 해당합니다. 참고로 Kotlin에서는 소스파일을 제외하고 모든 파일을 리소스 파일로 취급하기 때문에 파일명이 소문자로 이루어져 있습니다. 위 상태에서 레이아웃 파일을 디자인 모드로 바꿔서 보면 다음과 같은 화면을 볼 수 있습니다. 노란색 부분이 화면에 배치할 수 있는 여러가지 위젯과 위젯에 대한 속성을 지정할 수 있는 파란색 속성 창 그리고 현재 화면을 구성하기 위한 레이아웃 방식을 나타내는 붉은색의 컴포넌트 트리 창을 볼 수 있습니다. 우리는 이 레이아웃을 통해서 여러가지 위젯을 배치해 화면을 구성할 수 있는데 어떤 방식으로 화..

    [Kotlin] 제네릭(Generics)

    [Kotlin] 제네릭(Generics)

    제네릭은 데이터 타입을 자유롭게 지정할 수 있도록 해주는 형태를 말합니다. 예를 들어 좀 억지스럽지만 정수형 데이터를 받는 아래 클래스가 있다고 가정해 보겠습니다. class myCal(param1: Int, param2: Int) { var value1 = param1 var value2 = param2 fun Plus(): Int { return value1 + value2 } fun Minus(): Int { return value1 - value2 } } 위와 같이 클래스를 생성하고 나면 다음과 같이 클래스를 호출하여 원하는 동작을 수행할 수 있습니다. var mc = myCal(10, 20) Log.d("test", "결과값: ${mc.Plus()}") 그런데 클래스를 호출할 때 정수가 아닌 소..

    [Kotlin] 추상 클래스와 인터페이스

    [Kotlin] 추상 클래스와 인터페이스

    클래스라는 것을 만들어 두면 이것을 인스턴스화 하여 객체를 생성하고 객체를 통해 클래스의 기능을 이용하게 됩니다. 객체지향 언어(코틀린은 함수형언어)에서 클래스는 객체를 구체화한 것인데 이 구체화 단계가 명확하게 떨어지지 않을 때 추상 클래스를 사용하게 됩니다. 예를 들어 고양이라는 대상이 있으면 고양이를 클래스로 만들어 구체화 할 수 있고, 고래가 있으면 고래라는 클래스를 만들어 구체화할 수 있을 것입니다. 그런데 '동물'이라는 대상이 있으면 얘는 어떻게 클래스로 만들어 구체화할까요? '동물'이라는 대상은 개인지 고양이인지, 고래인지, 두더지인지.. 암튼 특정 류의 동물에 따라 구체화할 수 있는 방법이 달라집니다. 객체 자체가 명확하지 않은 셈인데 이렇게 불분명한 상태를 나타내고자 할 때 이걸 추상 클..

    [Kotlin] 데이터 클래스

    [Kotlin] 데이터 클래스

    데이터 클래스는 특정 데이터를 클래스로 규격화하여 저장하기 위한 용도로 사용되는 클래스를 의미하며 다음과 같은 형식을 가집니다. data class 클래스명 (var/val 이름: 형식...) var는 변수를 val은 상수를 의미하며 뒤에 변수나 상수가 될 이름을 지정합니다. 그리고 : 뒤에 형식을 사용하여 저장할 데이터를 정의하는데 이러한 매개변수 형식은 몇 개든 , (콤마)로 구분하여 정의할 수 있습니다. 다만 데이터 클래스는 위에서 설명드린 크래스와 달리 값을 받고 저장하는 용도로만 사용되기 때문에 클래스의 본체가 별도로 정의되지 않습니다. data class MyCar (val color: String, var speed: Int) var mc = MyCar("Red", 70) Log.d("tes..

    [Kotlin] 클래스(Class)

    [Kotlin] 클래스(Class)

    특정 처리를 위해 관련된 변수, 함수 등을 한꺼번에 모아놓은 프로그램의 단위를 클래스(Class)라고 합니다. Aandroid Studio에서 처음 프로젝트를 생성하고 나면 다음과 같은 코드를 볼 수 있는데 이것은 Android Studio가 onCreate라는 함수를 포함하고 있는 MainActivity라는 클래스를 자동 생성한 것입니다. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } 이제까지 어떠한 출력을 위해 자주 사용했던 Lod.d() ..

    [Kotlin] 함수

    [Kotlin] 함수

    Android Studio에서 Kotlin으로 프로젝트를 생성하면 대부분 아래와 같은 구조의 코드로 시작합니다. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } 우리가 주목해야 할 부분은 onCreate입니다. onCreate는 함수이며 MainActivity클래스에 속해 있습니다. 함수라는 것은 프로그램을 구성하는 최소한의 덩어리이며 프로그램을 실행하면서 필요한 처리를 하기 위한 부분이기도 합니다. 참고로 onCreate는 Android가 시작..

    [Kotlin] 배열과 컬렉션

    [Kotlin] 배열과 컬렉션

    1. 배열 배열은 다음과 같이 선언합니다. var ints = IntArray(10) 예제는 Int형 배열을 10개 할당하라는 의미입니다. Long이나 Double과 같이 다른 타입의 배열을 지정하고자 한다면 해당 타입 + Array형태로 배열을 선언하면 됩니다. var doubles = DoubleArray(10) 다면 문자열에 대한 배열을 선언하려면 다음과 같이 해야 합니다. var s = Array(10, {item -> ""}) 배열의 크기는 배열 변수 선언 시 지정할 수 있으며 향후 배열의 크기를 변경하는 것은 불가능합니다. 이제까지 예제는 미리 배열의 크기만 확보하는 방법이었는데 반면 다음과 같이 배열을 선언하는 방법도 있습니다. var ints = arrayOf(10, 20, 30) //또는..

    [Kotlin] 반복문

    [Kotlin] 반복문

    반복문은 말 그대로 특정 처리를 반복하기 위해 사용되는 구문입니다. (1) for for는 다음과 같이 사용할 수 있습니다. for(i in 1..10) { Log.d("test", "${i}") } i는 변 수명이며 '1..10'에서 1은 시작 값, 10은 종료 값을 의미합니다. 따라서 i를 1부터 10까지 저장하며 순회(반복)하도록 합니다. 이때 변수명 i는 임의로 바꿀 수 있으며 for에서의 사용을 위해 외부에서 미리 선언될 필요는 없습니다. for(i in 1 until 10) { Log.d("test", "${i}") } .. 대신 until을 사용하면 종료 값의 -1까지만 반복합니다. -1 까지만 반복한다는 특성을 배열을 가지고 설명드리자면 배열의 시작 값은 0이고 이것을 for를 통해 반복하..