클래스

- 1개의 primary constructor를 가진다.

- N개의 secondary constructor를 가진다.

- secondary constructor에서는 primary constructor를 호출해야 한다.

- primary constructor는 init() {...} 블록을 가진다.

- primary constructor에 정의된 변수는 전역 변수이다.

- 전역 변수는 default값을 가질 수 있다.

- default값을 정의한 클래스를 자바에서 사용하려면 @JvmOverloads 어노테이션을 적용해야 한다.

자바

public class Sample {

    private String name = "";

    private String name2 = "";

 

    Sample(String name) {

        this.name = name;

    }

    Sample(String name, String name2) {

        this.name = name;

        this.name2 = name2;

    }

}

코틀린

class Sample(val name: String, val name2: String) {

    init() {

        println("name : $name, name2 : $name2")

    }

    constructor(name: String) : this(name, "") {

        println("name : $name")

    }

}

 

 

 

 

 

상속

자바

default class

- Non final (재정의 가능)

abstract

- extends로 상속

interface

- implements로 상속

 

public class Sample extends abstract implements interface {

    Sample() {  }

}

 

코틀린

default class

- final (재정의 불가능)

- 재정의 하려면 open 키워드를 추가

 

상속은 콜론(:)으로 한다.

다중상속은 콤마(,)로 한다.

abstract와 interface의 순서는 상관없다.

 

class Sample : interface, abstract () {

    init() {  }

}

 

interface

자바

public interface Sample {

    int Type = 0;

    

    default void init() {

    }

 

    static void initstatic() {

    }  //call Sample.initstatic();

    

    void out();

}

코틀린

 

interface Sample() {

    val type: Int

 

    fun init() {

    }

    fun out()

}

 

변수를 자바처럼 사용하면 오류 발생

    val type = 0

 

companion object

- 자바에서 처럼 인터페이스에서 변수를 사용할수 있게 해주는 객체

interface Sample() {

    companion object {

        const val type: Int = 0

    }

    fun init() {  }

    fun out()

}

 

다중 상속

- 자바에서는 class의 init()만 접근가능.

- 코틀린에서는 super.init()을 할 경우 에러 발생 <타입>을 꼭 써줘야함.

자바

public interface InterfaceSample {

    default void init() {}

}

 

public abstract class AbstractSample {

    public void init() {}

}

public class Sample extends AbstractSample implements InterfaceSample {

    @Override

    public void init() {

        super.init();

    }

}

코틀린

interface InterfaceSample {

    fuc init() {}

}

 

abstract class AbstractSample {

    open fun init() {}

}

 

class Sample : InterfaceSample, AbstractSample() {

    override fun init() {

        super<InterfaceSample>.init()

        super<AbstractSample>.init()

    }

}

 

data class

자바

public final class User {

    private final long id;

    private final String name;

    private final String email;

 

    public final int getId() { return this.id; }

    public final String getName() { return this.name; }

    public final String getEmail() { return this.email; }

}

코틀린

data class User(val id: Long = 0,

                    val name: String? = null,

                    val email: String? = null)

 

 

 

 

 

 

 

Sealed class

- 다형성

sealed class Expr

data class Const(val number: Int) : Expr()

data class Sum(val e1: Expr, val e2: Expr) : Expr()

 

fun eval(expr: Expr): Int = when(expr) {

    is Const -> expr.number

    is Sum -> eval(expr.e1) + eval(expr.e2)

}

 

fun test() {

    eval(Sum(Const(0), Const(1)))

}

 

singleton

자바

public class Sample {

    private static Sample instance = new Sample();

    Sample() { }

    public Sample getInstance() {

        return instance;

    }

}

코틀린

object Sample

 

 

 

 

 

 

 

'Android' 카테고리의 다른 글

[Android] 코틀린 기본 문법 - 1  (0) 2019.04.09
[Android] Appcompat Library 란?  (0) 2019.04.08
[Android] retrofit 통신  (0) 2019.04.02
[Android] CustomListener 사용  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02

변수 타입

코틀린은 대문자로 시작

자바

double  :  123.5

float  :  123.5f

long  :  123L

int  :  123

short  :  16

byte  :  8

String

코틀린

Double  :  123.5

Float  :  123.5f

Long  :  123L

Int  :  123

Short  :  16

Byte  :  8

String

 

변수 선언

var 변수이름: 변수타입 = 값

자바

String name = "a";

final String name = "a";

코틀린

var name = "a"

val name = "a"

 

Null의 사용

코틀린은 Null을 허용하지 않는다 허용하려면 물음표(?)를 추가해야 한다

자바

String name = "a";

name = null;

코틀린

var name: String? = a

name = null

 

변수 Casting

자바 instanceof

Object object = "name";

int index = 0;

if (object instanceof Integer) {

    index = (int) object;

}

System.out.println("index : " + index);

 

 

 

 

 

 

코틀린 as 와 is

as의 사용

val a: Any? = "ABC"

val b: Int? = a as? Int

println("Out b $b") //Out b null

 

is의 사용

val a: Any? = "ABC"

val b: Int? = 0

if (a is Int) {

    b = a as? Int

}

println("Out b $b") //Out b 0

 

Elvis Operator

val a: Any? = "ABC"

val b: Int? = a as? Int ?: 0

println("Out b $b")

 

is와 when 활용

자바

Object object = "name";

int index = 0;

if (object instanceof Integer) {

    index = (int) object;

}

System.out.println("index : " + index);

코틀린

val a: Any? = "ABC"

when(a) {

    is Int -> println(a)

    is String -> println(a)

    else -> println("nothing")

} //print "ABC"

 

'Android' 카테고리의 다른 글

[Android] 코틀린 기본 문법 - 2  (0) 2019.04.09
[Android] Appcompat Library 란?  (0) 2019.04.08
[Android] retrofit 통신  (0) 2019.04.02
[Android] CustomListener 사용  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02

Appcompat 라이브러리는 안드로이드 UI가 발전함에 따라 이전 버전에서 발전된 UI를 지원하지 않을 경우

앱 내부의 Appcompat 라이브러리에 포함된 UI를 사용하고 사용자의 안드로이드 버전에서 지원할 경우

사용자 안드로이드의 UI를 사용한다.

'Android' 카테고리의 다른 글

[Android] 코틀린 기본 문법 - 2  (0) 2019.04.09
[Android] 코틀린 기본 문법 - 1  (0) 2019.04.09
[Android] retrofit 통신  (0) 2019.04.02
[Android] CustomListener 사용  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02

통신으로 받아올 Data

public class modelData() {
    public String id;
    public String type;
}

HTTP 통신을 위한 인터페이스

public interface GetDataService {
    @GET("상대 URI")
    Call<modelData> getData(
            @Query("id") String id,
            @Query("type") String type
    );
}

Retrofit 객체 생성

String BASE_URL = "통신 URL";

Retrofit retrofit = new retrofit2.Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();
   

Data 호출 Response.body()로 받아온다

GetDataService service = retrofit.create(GetDataService.class);
    
Call<modelData> call = service.getData("id", "type");

call.enqueue(new Callback<modelData>() {
    @Override
    public void onResponse(Call<modelData> call, Response<modelData> response) {
        Toast.makeText(MainActivity.this, "" + response.body().id, Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onFailure(Call<modelData> call, Throwable t) {
        Toast.makeText(MainActivity.this, "알수없는 오류가 발생했습니다...잠시후 다시 시도하십시오!", Toast.LENGTH_SHORT).show();
    }
});

'Android' 카테고리의 다른 글

[Android] 코틀린 기본 문법 - 1  (0) 2019.04.09
[Android] Appcompat Library 란?  (0) 2019.04.08
[Android] CustomListener 사용  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02
[Android] APK 만들기  (0) 2019.03.30

CustomListener interface 추가

public interface CustomListener {
    void onClick(String str);
    void onClick(int pos);
}

CustomListener를 적용

 - CustomListener 변수 추가

 - Set함수 추가

 - Click했을시 listener Click함수를 호출하게 설정

private CustomListener listener;
public void setCustomListener(CustomListener listener) {
    this.listener = listener;
}
holder.listLayout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        listener.onClick(position);
    }
});

 

외부에서 set함수 호출하여 listener 설정

adapter.setCustomListener(new CustomListener() {
    @Override
    public void onClick(String str) {

    }
});

 

'Android' 카테고리의 다른 글

[Android] Appcompat Library 란?  (0) 2019.04.08
[Android] retrofit 통신  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02
[Android] APK 만들기  (0) 2019.03.30
[Android] '돌아가기' 버튼 구현  (0) 2019.03.29

AlertDialog.Builder를 통해 AlertDialog를 만들 수 있다.

dialog.setView() 함수에 Dialog에 뷰를 추가 할 수 있다.

dialog.setButton() 함수에 확인, 취소 버튼을 추가할 수 있다.

dialog.show() 함수로 원하는 위치에서 AlertDialog를 띄울수 있다.

AlertDialog dialog = new AlertDialog.Builder(this).create();
//dialog.setView(추가할 뷰);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "취소", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        dialog.dismiss();
    }
});
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "확인", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        
    }
});
dialog.show();

 

'Android' 카테고리의 다른 글

[Android] retrofit 통신  (0) 2019.04.02
[Android] CustomListener 사용  (0) 2019.04.02
[Android] APK 만들기  (0) 2019.03.30
[Android] '돌아가기' 버튼 구현  (0) 2019.03.29
[Android] Comparable 정렬  (0) 2019.03.28

APK를 만들기 전에 먼저 Google Play 스토어에 같은 이름의 패키지가 있는지 확인한다.

패키지명이 겹치는지 확인하기

https://play.google.com/store/apps/details?id={AndroidManifest.xml에에 있는 package의 값}

 

Google Play 스토어에 앱을 등록하려면 반드시 서명된 APK 파일로 만들어야 한다.

단순 빌드가 아닌 Generate Signed Bundle / APK를 선택하자.

우리는 APK를 만들 것이기 때문에 APK를 선택하고 Next.

 

여기서 Key store를 선택하라고 하는데 우린 없으니까 Create new...를 선택.

 

Key store를 저장할 경로를 선택하고 Key store 비밀번호를 입력

Key에 대한 내용을 입력한 후 OK버튼을 눌러서 완료한다.

  - Alias : 전자 증명서의 명칭

  - Password : 증명서의 비밀번호

  - Confirm : 증명서 비밀번호 확인

  - Validity(years) : 증명서 유효기간 (보통 25년 이상 설정)

  - First and Last Name : 전자 증명서의 작정자 이름

  - Organizational Unit : 회사의 부서이름

  - Organization : 회사 이름

  - City or Locality : 도시 또는 지역 이름

  - State or Province : 주 이름 또는 지방 이름

  - Country Code (XX) : 국가 코드(한국은 kr)

 

 

debug 모드가 아닌 release 모드를 선택하고 버전에 관계없이 사용 할 수 있게 V1, V2

모두 체크 후 Finish를 눌러 주면 APK를 생성한다.

 

'Android' 카테고리의 다른 글

[Android] CustomListener 사용  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02
[Android] '돌아가기' 버튼 구현  (0) 2019.03.29
[Android] Comparable 정렬  (0) 2019.03.28
[Android] Tab 사용법  (0) 2019.03.27

오버라이드 함수 dispatchKeyEvent(KeyEvent event) 함수에서 물리버튼 이벤트를 받아올 수 있다.

키코드를 비교하여 돌아가기 버튼을 구분할 수 있다.

 

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
            //돌아가기 버튼
            return true;
        }

        return super.dispatchKeyEvent(event);
    }

 

'Android' 카테고리의 다른 글

[Android] AlertDialog 사용  (0) 2019.04.02
[Android] APK 만들기  (0) 2019.03.30
[Android] Comparable 정렬  (0) 2019.03.28
[Android] Tab 사용법  (0) 2019.03.27
[Android] RecyclerView 예제  (0) 2019.03.26

+ Recent posts