티스토리 뷰

main()

-main함수가 있어야함

-실행시 main함수가 처음으로 실행됨

fun main(){
	println("hello world")
 }

변수 선언

-코틀린은 val, var 키워드로 변수 선언

-val은 value 초깃값 할당 되면 바꿀 수 없는 변수를 선언

-var는 variable 초깃값 설정 한 뒤에도 값 바꿀 수 있는 변수를 선언

-변수명 뒤에 콜론 추가해 타입 명시, 대입하는 값에 따라 타입 유추 가능할땐 생략할 수 있다

val data1: Int=10
val data2=20

위 코드에서 data1은 Int명시, data2는 20을 대입하여 유추가능하기때문에 Int명시 안함

-초깃값 할당시 최상위에 선언한 변수나 클래스 멤버 변수는 선언과 동시에 초깃값 할당해야 함

-함수 내부에 선언한 변수는 선언만 하고 초깃값 할당하지 않아도 된다. 물론 변수 이용하려고 할땐 값을 할당 한 다음 사용해야 한다

val data1:Int //최상위에 선언하였으므로 초깃값 할당해야함 이 경우 오류생김
fun main(){
	val data2: Int//함수 안이므로 초깃값 없이 선언 가능
	println("$data2")//선언만 하고 값 할당 안하여 사용 불가, 에러남
}
class test{
	val data3: Int//클래스 멤버 변수이므로 선언과 동시에 초깃값 할당 필요, 이 경우 에러남
}

-초기화 미루기: 변수 선언할때 초기값 할당 불가능한 경우가 있음.. 그때 컴파일러에게 값을 나중에 할당할것이라고 알려줘야함 -> lateinit, lazy키워드를 사용

         -lateinit

                var키워드로 선언한 변수에만 사용가능함

                Int, Long, Short, Double, Float, Boolean, Byte에는 사용 불가능

                타입을 명시해줘야됨

lateinit var data3:String
lateinit var data4//이 경우 에러, 타입 명시해야함

        -lazy

                소스에서 변수가 최초로 이용되는 순간 중괄호로 묶은 부분이 자동으로 실행, 그 결과가 변수 초기값으로 할당된다


데이터 타입

-코틀린의 모든 변수는 객체

-따라서 모든 변수의 타입은 primitive type(기초 데이터 타입)이 아니라 클래스다

-클래스이므로 null대입이 가능함

  •  java의 경우 프리미티브 타입에 null불가능, 프리미티브 타입에는 디폴트 값이 있어서 자동으로 디폴트값으로 초기화되기때문, null을 넣고싶으면 래퍼클래스 사용해야됨
var data:Int?=null

-변수가 객체이므로 그 변수한테 해당하는 클래스 메서드 호출 가능

var data1:Int=10
data1=data1.plus(10)//메서드 호출

-기초 데이터 타입

  • Int, Short, Long, Double, Float, Boolean

-문자 데이터 타입 Char, 문자열은 String

  • Char의 경우 작은 따옴표로 감싸서 표현한다. 

-문자열 탬플릿

  • String타입 데이터에 변수값, 연산식 결과를 포함해야될때 ${} (자바스크립트에도 이거임)

-Any

  • 코틀린 최상위 클래스임
  • 모든 타입이 가능함(최상위 클래스니깐), 다른 모든 타입들은 Any의 하위 클래스
  • Any로 선언한 변수에는 모든 타입의 데이터 할당가능
fun main(){
    val data1:Any=10;
    val data3:Any="hello"
    val data4:Any=1.4
}

-Unit

  • 반환문이 없는 함수
  • 다른 타입들과 다르게 데이터의 형식이 아닌 특수한 상황을 표현하는데 사용됨
  • 함수의 반환 구문이 없음을 표현하는데 흔하게 사용된다. 자바 void같은거
fun some1():Int{
	return 10
}//이 함수의 경우 Int반환
//반환 타입을 명시한 경우 반드시 return 이 있어야 하며 명시된 타입과 반환 타입 일치해야 함
fun some2():Unit{
	println(10+10)
}//이 함수의 경우 반환문 없음, 이렇게 Unit은 반환 없음에 사용됨
fun some3(){
	println("hi")
}//이 함수는 반환 타입 생략함, 생략되면 Unit을 명시한것과 동일

-Noting

  • Unit과 마찬가지로 특수한 상황을 표현하는데 사용된다
  • Noting으로 선언한 변수에는 null만 대입할수있다. 따라서 Nothing으로 선언한 변수는 데이터로서의 의미없음
val data1:Nothing?=null
  • 주로 함수 반환타입에 사용한다. 어떤 함수의 반환 타입이 Nothing인 경우에는 그 함수가 null을 반환하는거임 근데 null 반환하는경우엔 ? 을 붙여야됨
  • 혹은 예외를 던지는 함수의 반환타입을 Nothing으로 선언한다
fun some1():Nothing?{
	return null
}//null반환함, 따라서 Nothing뒤 ? 를 붙임
fun some2():Nothing{
	throw Exception()
}//예외 던지는 함수

-null 허용과 비허용

  • 코틀린의 모든 타입은 객체이므로 변수에 null대입이 가능
  • null 대입 되는경우엔 ? 을 붙이고 아니면 안붙임
var data1:Int=10//null 불허
var data2:Int?=10//null 허용

함수 선언

-함수 선언은 아래와 같이 한다

fun 함수명(매개변수명:타입,매개변수명:타입=디폴트값):반환타입{
	...
}

-함수 안에서 매개변수의 값을 변경하는것은 불가능하다

fun some3(a:Int,b:String) {
    a=10//에러, 매개변수 값 변경 불가능
}

-매개변수의 디폴트 값 선언 가능

-named parameter: 매개변수명을 지정해서 함수를 호출하는것


컬렉션 타입

-컬렉션타입은 여러개의 데이터를 표현하는 방법

-Array, List, Set, Map

-Array

  • 배열을 표현하는 클래스
  • Array클래스 생성자
    • <init>(size:Int,init(Int)->T)
  • 아래처럼 선언한다
val arr1=Array(배열크기,{초깃값})
    •  사용하는법
arr1[0]=10
arr1.set(2,30)//arr1의 2번 인덱스값 30으로
arr1.get(2)//arr1의 2번 인덱스값 가져오기
  • 기초타입의 배열들
    • BooleanArray, ByteArray, CharArray, DoubleArray, FloatArray, IntArray, LongArray, ShortArray
val data1:IntArray=IntArray(3,{0})
//data1에 Int들이 들어가는 Array를 만듦, 배열 크기는 3, 초기값은 0
//배열모양 [0,0,0]
  • arrayOf() 함수 사용하면 선언과 동시에 배열 요소 값 할당 가능
val data2=arrayOf<Int>(1,2,3)
  • 기초 데이터 타입인 경우 *ArrayOf()형태로 arrayOf함수를 제공
val data4=intArrayOf(1,2,3)
val data5=booleanArrayOf(true,false,true)

-List, Set, Map

  • Collection<T> 는 list, set, map의 최상위클래스
  • Collection 인터페이스를 타입으로 표현한 클래스
  • 컬렉션 타입 클래스는 가변 클래스, 불변 클래스로 나뉜다
    • 불변 클래스는 데이터 대입 후 변경이 불가능, 가변 클래스는 데이터 추가와 변경 가능
  • List
    • 순서가 있는 데이터 집합, 중복 가능
    • List: 불변, listOf()
    • Mutable List: 가변, mutableListOf()
  • Set
    • 순서 없고 중복 불가
    • Set: 불변, SetOf()
    • MutableSet: 가변, mutableSetOf()
  • Map
    • 키와 값으로 이루어진 테이터 집합
    • 순서 없음, 키의 중복은 불허
    • Map: 불변, mapOf()
    • MutableMap: 가변, mutableMapOf()
    • Pair객체를 통해 데이터를 넣거나 키 to 값 형태로 이용할 수 있음
    • get으로 값 가져올땐 키를 사용함
//Map 객체 함수
var m=mapOf<String,String>(Pair("one","hello"),"two"to"world")
m.get("one")

조건문 if else

if(data1>0){
}else if(data1<-10){
}else{
}

-위 코드처럼 다른 언어들의 if, else와 비슷함, 하지만 코틀린에서는 표현식으로도 사용가능함

  • 표현식: 결과값을 반환하는 계산식을 뜻함

-표현식으로 사용할땐 else구문이 필수적, 표현식이 반환하는 결과값은 각 영역 마지막줄에 해당됨

val res=if(data1>0){
	true//data1이 0보다 크면 res에 true가 들어감
}else{
	false//아니라면 res에 false
}

조건문 when

when(data1){
	10->println("data is 10")
	20->println("data is 20")
	else->{
		println("data is not valid data")
	}
}

-위 코드는 data1이 10이면 "data is 10" 이 출력되고 20이면 "data is 20" 이 출력, 둘다 아니면 "data is not valid data"가 출력

var data1:Any=10
when(data1){
	is String->println("data의 타입 string")//타입으로 구분
	20,30->println("data가 20 또는 30")//20 또는 30 일때
	in 1..10->println("data가 1~10의 값")//1~10사이 값일때 
	else->println("data is not valid data")//위의 조건 전부 아닐때
}
var data1=10
when{
	data1<=0->println("data is <=0")
	data1>100->println("data is >100")
	else->println("data is valid")
}

-위의 코드처럼 when 문 파라미터에 값을 안적고 써도 됨

-참인 조건을 찾으면 바로 블록 밖으로나옴


반복문 for

-until 사용하면 끝 숫자는 포함하지 않음

-step 사용하면 몇씩 증가할지 정할수있다. downTo는 감소

-indices로 컬렉션 타입의 요소 수 만큼 반복할 수 있다


반복문 while

-다른 언어의 while과 유사

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함