코틀린 함수와 변수

siwan·2021년 10월 26일
0

코틀린 기초

목록 보기
1/6

Hello world

fun main(args: Array<String>){
   println("Hello World")
}
  • 함수선언을 할때 fun 키워드 이용한다.
  • 파리미터 : 파라미터 이름 뒤에 타입을 쓴다. (args : Array<String>)
  • 자바와 달리 함수를 최상위 수준에 정의 할 수 있다. class안에 함수를 넣어야 할 필요가 없다.
  • 배열도 일반적인 클래스와 마찬가지다.
  • 코드 끝에 세미콜론(;)을 넣을 필요가 없다.

기본 함수

fun max(a:Int,b:Int):Int{
   return if(a>b) a else b
}
  • 함수는 fun 키워드 그 뒤에 함수 이름이 온다 그리고 괄호를 열어 파라미터 목록이 온다.
    그리고 그 뒤에는 :Type 을 넣어 반환할 타입을 정한다.
    fun max(a:Int,b:Int):Int
  • 함수 본문은 반환 할 식에 대해서 작성한다.
    { return if(a>b) a else b }
  • 코틀린은 함수를 본문이 아닌 식으로 쓸 수 있다.

    코틀린의 if는 문이 아니라 식이다. (물론 문으로도 활용 가능하다)
    식은 값을 만들어 내며 다른 식의 하위 요소로 계산에 참여 할 수 있는 반면
    문은 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재하며 아무런 값을 만들어내지 않는다는 차이가 있다.

 위 예제를 식으로 변경하면 
 fun max(a:Int,b:Int) = if(a>b) a else b
 로 이용 할 수 있다.
  • 타입추론을 통해 컴파일러가 타입을 분석해 프로그래머 대신 프로그램 구성 요소 정해준다.

변수

  • 자바와 반대로 변수를 타입(자료형 또는 클래스) 선언을 앞이 아닌 뒤에 선언해준다.
  • 코틀린은 타입 생략이 가능하다. 대신 초기화값을 입력 해야 한다.
 val a = "가나다라마바사" //타입 생략
 val a:String = "가나다라마바사" // 타입 명시

식이 본문인 함수와 마찬가지로 컴파일러가 초기화 식을 분석해서 타입 추론을 해준다.

  • 변경 가능한 변수와 변경 불가능한 변수로 나뉜다.
    1. val(값을 뜻하는 value에서 따옴):
      a. 변경 불가능한 참조를 저장하는 변수
      b. 초기화가 되면 재 대입이 불가능하다.
      c. 자바로 따지면 final 변수
    2. var(변수를 뜻하는 variable에서 따옴):
      a. 변경 가능한 참조다.
      b. 변수의 값을 바꿀 수 있다.
      c. 자바의 일반 변수에 해당 된다.
- val 변수는 블록을 실행 할 때 한번만 초기화 되어야 한다. 조건에 따라 val 값을 다른 여러 값으로 초기화 할 수 있다.

 val message :String
 if(true){
   message = "abcd" 
 } else{
  message + "efgh"
 }

- val 참조 자체는 불변일지라도 객체의 내부 값은 변경이 가능하다.
 val a = arrayList("a","b","c") //불변 참조를 선언
 a.add("d") //참조가 가리키는 객체 내부를 변경

문자열 템플릿

코틀린에서 키워드 $를 통해 변수를 문자열 안에 이용이 가능하다.

val a = "world" println("hello $a")
result = hello world

$문자를 문자열에 넣고 싶으면 $ 앞에 \를 삽입해야 한다.

  1. 복잡한 식은 {} 중괄호를 이용해서 문자열 템플릿안에 넣을 수 있다.
    ex) val apple = Apple()
    println ("apple color = ${apple.color()})
  2. 한글 문자열 템플릿에서는 유니코드 변수 이름으로 인해 컴파일러가 오류를 내놓을 수 있다.
    한글 문자열 변수를 중괄호에 넣어서 이용하는게 좋다.
    ex) val hello ="안녕하세요"
    println("korean hello = ${hello})
profile
station3 다방 안드로이드 개발자

0개의 댓글