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
반응형