콘텐츠 데이터 모델 데이터의 구조를 지키지 않고 마구잡이로 삽입한다면 나중에 관리하기 쉽지 않을 것이다. 그렇기 때문에 데이터에 대한 모델을 작성하여 데이터의 구조를 표준화해주는 작업이 필요하다. navigation 패키지 안에 'model'이라는 패키지를 만들자. 그 후 contentDTO라는 코틀린 파일을 작성하자. package com.example.firstapp.navigation.model import java.sql.Timestamp data class ContentDTO(var explain: String? = null, var imageUrl: String? = null, var uid: String? = null, var userId: String? = null, var timestam..
분류 전체보기
Bottom Navigation bottomNavigation을 추가하여보자. 여기에 menu를 적용하기 위해 menu res를 만들어야 한다. 간단하게 id와 icon정도만 정의해주면 된다. 이제 navigation에서 icon이 클릭되었을 때 처리 로직만 만들어주면 간단하게 처리할 수 있다. icon이 클릭되었을 때 main_content에 Fragment를 바꿔줄 것이다. 일단은 구분만 되도록 색상만 바꾼 간단한 Fragment를 구성해보자. package com.example.firstapp.navigation import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view...
구글 로그인 구글 로그인과 같은 소셜 로그인 기능을 추가해보자. Gradle에서 google-service 버전이 4.2.x 버전 이상이어야 한다. 그리고 라이브러리를 설치하자. 그리고 만들어 놓은 구글 로그인 버튼에 id를 추가하자. 이제 버튼을 아이디로 찾아 리스너를 달고 동작시켜보자. package com.example.firstapp import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.Button import android.widget.EditText import android.widg..
로그인 뷰 로그인 뷰를 짜 보자. 이제 액티비티를 수정해보자. package com.example.firstapp import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.Button import android.widget.EditText import android.widget.Toast import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseUser class LoginActivity : AppComp..
Object Expressions and Declarations object의 용도는 어떤 class에서 조금 변경된 객체를 생성할 때, 새로운 subclass의 명시적인 선언 없이 객체를 생성할 수 있다는 점이다. 또한, kotlin에서는 static이 없다. 따라서 kotlin에서는 패키지 내에 함수를 사용하기를 권장한다. 하지만 Companion Object를 이용하여 싱글턴 + Class method를 사용할 수 있다. 객체 표현식 Java에서는 익명 내부 클래스를 사용해서 처리했다. kotlin에서는 object expressions을 이용한다. //Java btn.setOnClickListener(new OnClickListener(){ public void onClick(View v){ } ..
Data & Nested classes 자바에서 데이터만 보유하는 클래스를 만들려면 여러 가지 정의해야 하는 경우가 있다 코틀린은 Data클래스를 지원하여 이러한 상황에서 보다 손쉽게 구현할 수 있다. data class User(val name: String, val age: Int) 기본 생성자에서 선언된 속성을 톻애 equals(), toString() 등의 여러 함수들을 자동으로 생성해준다. 물론 명시적으로 정의할 수도 있다. 기본 생성자에서 1개 이상의 프로퍼티가 있을 경우에 의미가 있으며, abstract, open, sealed, inner가 안된다. 하지만 1.1이후로는 sealed class를 상속할 수 있게 되었다. 만약 Data class에 아무런 프로퍼티를 주지 않고 생성하고 싶을 ..
Properties & Field 자바에서는 프로퍼티를 지원하지 않는다. 따라서 getter나 setter를 만들어서 변수에 접근해야 했다. 하지만 코틀린에서는 프로퍼티를 지원하기 때문에 getter나 setter를 만들지 않아도 된다. class Address{ var name: String = "Kotlin" val city: String = "Seoul" } fun copyAddress(address: Address): Address{ val result = Address() result.name = address.name return result } 사실 프로퍼티는 getter와 setter가 있지만 생략 가능하다. public static final void main() { Address obj..
Inheritance 객체지향적인 언어의 장점 중 하나는 바로 상속이다. 코틀린에서의 상속을 알아보자. 코틀린의 최상의 클래스는 Any이다. 클래스에 상위 타입을 선언하지 않으면 Any가 상속된다. class Ex1 //암시적 Any상속 class Ex2: Any() //명시적 Any상속 Any는 java에서 Object와 비슷해 보이지만 조금 다르다. equals(), hashCode(), toString()만 존재한다. 상속을 해줄 클래스가 open을 해줘야 상속이 가능하다. 또한 부모 클래스에 기본 생성자가 있다면 호출하여 초기화 가능하다. 코틀린에서 클래스는 기본적으로 final이다. 따라서 상속을 원한다면 open을 반드시 적어야 한다. open class parent(firstName: Str..
class 코틀린에서 class를 선언할 때는 자바와 마찬가지로 class라는 키워드로 선언한다. class Invoice(data: Int){ } 헤더와 바디는 옵션이다. 바디가 없다면 { }도 생략 가능하다. 기본 생성자 자바와는 달리 생성자가 여러 개로 나뉜다. 우선 기본 생성자는 클래스별로 없거나 단 하나만 존재한다. class Person constructor(firstName: String){ } 어노테이션이나 접근 지정자가 없을 때는 기본 생성자의 construcor 키워드를 생략할 수 있다. 기본 생성자는 코드를 가질 수 있다. 초기화는 init 블록 안에서 작성해야 한다. class Customer(name: String){ init{ println("Customer initalized ..
Packages 소스 파일은 패키지 선언으로 시작된다. 만약 패키지를 선언하지 않는다면 기본 패키지에 포함된다. 모든 컨텐트는 패키지에 포함된다. 다른 파일이나 소스에서 호출을 하려면 패키지를 import 해야 한다. 기본 패키기 기본으로 import가 되는 package가 있다. JVM에서 실행을 한다면 java.lang.*나 kotlin.jvm.* 등이 자동으로 import 된다. Return and Jumps 3개지 jump표현식이 있다. return: 함수나 익명 함수에서 반환 break: 루프를 종료 continue: 루프의 다음 단계로 진행 kotiln에서는 label로 break and continue가 가능하다. label@, abc@, fooBak@등과 같이 레이블을 달아 그 부분으로 분..