Android/Kotlin

코틀린 기본 문법

세밍_ 2020. 3. 6. 07:11
728x90
반응형

 

코틀린을 공부하며 정리해 본 코틀린 기본 문법 입니다!

println("hi")//출력하기

​

//scratch 파일은 프로젝트로 들어감

​

var a:Int=10//변수를 선언해 만드는 방법-var은 값을 바꿀 수 있음

val b:String="Hi"//val도 변수를 선언, 정적 변수선언-값을 바꿀 수 없음

//함수형 프로그래밍을 사용하는 요즘 현재 언어들의 추세, 변수를 많이 쓰면 error 확률이 늘어나는 것

//변수를 안쓰는 추세

println(a)

println(b)

​

fun greet(str:String){//함수 만드는 것, 자료형은 변수면 뒤에 옴

//fun 함수면(입력인지:입력타입)출력타입{ 실행문}

println(str)

}

//자료형은 대문자로 시작할 것

val int =10

val long =10L

val double=10.0

val float=10.0f

​

val str="안녕하세요"//쌍따옴표는 리터럴, 작은 따옴표는 한 문자라는데,,,

val char="a"

​

​

greet("Hi")

​

fun greeting(str:String)=println(str)//함수를 식처럼 바꿀 수 있음

​

greeting("Hello")

​

val strline="""

하하하

정말 재밌다

하하하

"""

//쌍따옴표 3개는 여러줄

​

println(str)

//문자열 비교는 ==을 사용, 자바의 equals()와 대응응

//자바에서 오브젝트 비교 시 ==, 코틀린에서는 ===

​

//자바에서는 문자열과 변수를 넣은 것은+로 했지만 코틀린에서는 $기호를 써서 사용

val InStr ='A'

​

val sql="B is behind "+ InStr

val sql2="B is behind ${InStr} hahaha"

println(sql2)

​

//배열 Array는 따로 객체로 존재하고 arrayOf()의 메서드 사용

val numbers: Array<Int> = arrayOf(1,2,3,4,5)

val numbers2=arrayOf(1,2,3,4,5)//자료형 생략

println(numbers[0])

​

//if 문 자바랑 똑같

val ifa=10

val ifb=20

​

//일반적인 방법

var max= ifa

if(ifa<ifb){

max=ifb

}else{

max=ifa

}

​

​

​

//자바의 switch 문 대신 코틀린의 when

val x=1

when(x){

1-> println("x==1")//값 하나

2,3-> println("x==2,3")//여러값은 콤마로

in 4..8->println("4부터 7 사이")//in 연산자로 범위 지정

!in 8..10->println("8부터 10 사이가 아님")//

else->{

println("x는 1이나 2가 아님")//else는 디폴트 값

}

}

​

val numStr=1

val numnum=when(numStr%2){

0->"even"

else->"odd"

}

​

println(numnum)

​

val number=1

fun isEven(num:Int)=when(num%2){

0->"even"

else->"odd"

}

​

​

println(isEven(number))

​

​

//for도 자바와 비슷

for(num in numbers){

println(num)

}

​

val nums= listOf(1,2,3,4,5)

nums.forEach{println(it)}//for문을 안써도 되는 여러 함수가 있음

nums.filter{it%2==0}.forEach{println(it)}

​

//0~10까지 2씩 증가하며 출력

for(i in 0..10 step 2){

println(i)

}

//0~10까지 2씩 감소하며 출력

for(i in 10 downTo 0 step 2){

println(i)

}

​

//while문도 완전히 똑같지만 쓸일이 거의 없음 forEach를 많이 사용

​

//class: 파일의 단위-붕어빵 틀: 도장같은 느낌->인스턴스를 만듦음

//class 생성

class Person{}

//instance 생성

val per:Person=Person()

val per2=Person()//자료형 추론이 되니까 생략가능, new키워드를 사용하지 않음

​

//

class Animal(var name:String="Upa",var age:Int=0){

init{

println(name)

​

}//초기화 코드를 작성하려할 때때

​

}//up는 디폴트 값

val cat = Animal("Coco", 2)

​

val cat2=Animal(age=10)

​

//코틀린은 오버로드를 많이 줄일 수 있다.

​

//class의 속성은 프로퍼티라고 부르면 된다.

​

val dog=Animal()

dog.name

dog.name="dora"//쓰기

println(dog.name)//읽기

​

//접근제한자

//public: 생략가능: 전체공개, 아무것도 안쓰면 기본적으로 public

//private:현재 파일 내부에서만 사용할 수 있음

//internal:같은 모듈 내에서만 사용할 수 있음//하나의 모듈이 하나의 앱임

//protected: 상속밭은 클래스에서 사용할 수 있음

​

//클래스의 상속

//java는 extend인데 코틀린은 : , 코틀린은 기본적으로 상속이 안되게 되어 있고 상속을 시키려면 앞에 open써진 클래스만 상속 가능

​

open class Animal2{

​

}

class dog: Animal2(){

​

}

​

//내부 클래스

class OuterClass{

var outerA=10

//내부 클래스

inner class OuterClass2{

fun something(){

outerA=20

}

}

}

//추상클래스는 미구현 메서드가 포함된 클래스를 말한다.

//클래스와 미구현 메서드 앞에 abstract 키워드를 붙인다

//추상클래스는 직접 인스턴스화 할수 없고 다른 클래스가 상속하여 미구현 메서드를 구현해야 한다.

abstract class A{

abstract fun func()

fun func2(){

​

}

}

​

class B:A(){

override fun func(){//자바의 @Override가 코틀린의 override의 anotation을 붙인다.

println("hello")

}

}

//val overA=A(): 에러남

val overB=B()

​

//: : 상속할 때도 쓰고 타입을 정의할 때도 쓰고 리턴타입을 선언할 때도 사용

​

//인터페이스: 이벤트(클릭이벤트, 콜백) 구현할 때 많이 사용함

//안드로이드 프로그램에서 그냥 가져다 쓸 일은 많은데

//코틀린 자체에서 사용할 일이 적었음

// 자바랑 비슷

​

interface Runnable{

fun run()

}

​

//자바에서는 null포인트 엑셉션을 많이 만나는데 컴파일 툴이 알려주지 않음

//코틀린은 기본적으로 null을 허용하지 않음

//물음표를 붙여야 null나옴

val nulla:String?=null

​

//lateinit 키워드로 늦은 초기화: 특정타이밍에 변수 초기화

//안드로이드 개발할 때는 초기화를 나중에 함, lateinit 키워드를 변수 선언 앞에 추가해 초기화를 사용

//센서를 다룰 때 사용

​

lateinit var lateinitA:String

lateinitA="jay"

println(lateinitA)

//var 변수에서만 사용함

//null 값으로 초기화할 수 없음

//초기화 전에는 변수를 사용ㅇ할 수 없음

//Int, Long, Float, Double에서는 사용할 수 없음

​

//lazy로 늣은 초기화

//val 의 변수에서 초기화

val lazystr: String by lazy{

println("reset")

"hello"

}

println(lazystr)

println(lazystr)

//lazystr이 처음 호출 될 때 초기화 블록의 코드가 실행, println()메서드로 둡ㄴ 호출하면 처음에만 "reset"이 출력

​
728x90
반응형