No img

변수


변수는 "var" 또는 "val" 키워드를 앞에 붙여 선언한다.

기본 형태는 var(또는 val) 변수명: 변수 타입이다.

 

var nick:String = "Bonggang"

var name = "Bonggang"

var nickname:String
nickname = "bonggang"

 

위의 세 가지 방법 모두 가능하다. 

 

var과 val의 차이는 변경 가능한 변수와 변경 불가능한 변수라는 점이다.

변경 가능한 변수의 경우 선언 시 var을, 변경 불가능할 경우 val로 시작하는 것이다.

만일 val 변수일 경우 값을 변경하려고 한다면 컴파일러 에러를 발생시킨다.

 

 

함수


코틀린의 함수는 "fun"이라는 키워드를 앞에 붙여 선언한다.

기본 형태는 fun 함수명(매게변수: 변수 타입):반환 값 타입 { } 이다.

 

함수 예제를 들 때 많이 사용되는 기본 함수 더하기 함수를 작성하면 아래와 같다.

fun add(num1: Int, num2: Int):Int{
	return num1+num2
}

 

코틀린에서는 함수 구문이 한 줄로 끝날 경우 대괄호를 생략하고 더 간단하게 작성할 수 있다.

fun add(num1: Int, num2: Int):Int = num1+num2

fun add(num1: Int, num2: Int) = num1+num2

 

위의 두 줄 모두 같은 기능을 하는 함수다.

가장 마지막의 함수는 반환 타입마저 사라졌다. 이것은 코틀린의 타입 추론 덕분이다.

해당 값의 타입을 충분히 추론할 수 있을 경우 타입을 생략하는 것이다.

 

 

 

클래스


코틀린에서는 자바와 달리 파일명과 클래스명이 동일하지 않아도 되고 한 파일 내 여러 클래스가 존재할 수 있다.

클래스는 "class" 키워드를 앞에 붙여 선언한다.

기본 형태는 class 클래스명{ }이다.

 

class Bonggang{
	
    var nick:String = "Bonggang"
}


fun main(args:Array<String>){

    val bonggang: Bonggang = Bonggang()
    bonggang.nick = "Bong"
    
}

 

코틀린은 기본 접근 변경자가 public으로, 접근자를 명시하지 않으면 자동으로 public으로 선언된다.

public, protected, private, internal 4개의 접근자가 존재한다.

다른 접근자는 자바를 공부했다면 알고있을 것이라 가정하에 internal만 명시하겠다.

internal은 같은 모듈 내에서만 볼 수 있는 접근자다.

 

생성자

코틀린에서 생성자는 주 생성자와 부 생성자로 구분된다.

 

class Bonggang{
    var nick:String = "Bonggang"
}

위 코드에서 생성자는 생략되어 있다. 이것은 class Bonggang(){ 내용 }과 같은 형태이다.

만일 받아온 배개변수를 할당하고 싶다면 어떻게 해야할까?

 

자바의 경우 생성자 내에서

this.클래스변수 = 매개변수;

위와 같은 형식으로 받아온다. 하지만 위 코틀린 코드의 경우 이런 방법을 사용할 수 없다.

이를 위해 만든 것이 init이다.

 

init 영역은 초기화를 위한 영역이다.

class Bonggang(nick: String){
    var nick:String = ""
    init{
    	this.nick = nick
    }
}

 

그럼 init을 항상 만들어야하는가? 정답은 No. init을 쓰지 않아도 생성자의 인자를 바로 클래스 내에서 쓸 수 있다.

 

부생성자

위에서 이미 코틀린에는 부생성자라는 것이 존재한다고 밝혔다. 

부생성자는 "constructor" 키워드를 이용한다.

class Bonggang{
  var nick: String = ""
  constructor(nick: String){
  	this.nick = nick
  }
}

 

constructor는 여러 개를 사용할 수 있다. 즉, 생성자를 여러 개 생성하는 것이 가능하다는 뜻이다.

하지만 constructor를 사용할 때 주의할 점이 있다. 바로 주 생성자를 호출해야 한다는 점이다. 정확하게는 상속과 관련된 개념이 활용되지만 이것은 이후에 다루도록 하자. 그냥 기본 생성자를 상속받는 것이니 constructor로 만든 생성자들은 기본 생성자가 갖고있는 인자들을 갖고 있어야한다는 것만 알아두자.

부생성자가 주생성자를 호출하는 방법은 부생성자 선언부 옆에 ":this" 키워드를 붙여주는 것이다.

 

위의 말이 이해가 되지 않는다면 아래 코드를 보자.

class Bonggang(num:Int){
  var nick: String = ""
  constructor(nick: String):this(num){
  	this.nick = nick
  }
}

위의 코드는 실행 시 에러가 발생한다. constructor에 기본 생성자가 갖고 있는 num:Int가 없기 때문이다.

 

class Bonggang(num:Int){
  var nick: String = ""
  constructor(num:Int, nick: String):this(num){
  	this.nick = nick
  }
}

코드를 위와 같이 수정해주면 오류를 해결할 수 있다.

 

 

참고 자료


blog.naver.com/yuyyulee/221213012933

medium.com/@sket8993/kotlin-%EC%83%9D%EC%84%B1%EC%9E%90-%EC%B4%88%EA%B0%84%EB%8B%A8-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-b8a61df6fe6

'CS > Java & Kotlin' 카테고리의 다른 글

[Kotlin] 2. 상속  (0) 2020.10.04