Kotlin (1) 함수, 변수, 클래스 ,속성 값

오늘은 본격적인 코틀린 시리즈 첫 번째 글을 써보려고 한다!

자바와의 비교는 0번째 소개 글에서 충분히 했으니, 이제는 Kotlin에 집중해서 이야기해보려고 한다.

저번 글에서 비교를 위해 다뤘던 문법들이 중복으로 등장할 수도 있다.

이후에 나오는 코드들은 Kotlin Playground에서 직접 입력하고, 실행하며 학습하면 도움이 된다!

바로 본론으로 넘어가겠다.

Kotlin

☝ Hello, World!

Kotlin

fun main() {
    println("Hello, World!")
}

Result

Hello, world!

언어를 시작했다면 이거부터 해보자! 국룰!

  • fun
    • function의 약자. 함수를 정의할 것을 의미함.
  • main
    • 함수의 이름.
  • { ... }
    • 함수가 실행할 내용.

기본적으로 함수는 이런 형식으로 정의된다.

조금 더 깊게 알아보자.

🤞 함수와 변수

2.1 함수

Kotlin

fun isItPositive(number: Int): Boolean{
    return if (number >= 0) true else false
}

fun main() {
    println("${isItPositive(-1)}")
    println("${isItPositive(10)}")
}

Result

false
true

아까보다 조금! 정말 조금 더 복잡한 함수를 짰다.

  • : Boolean
    • 함수의 반환~return~형을 정의. 이게 있으면 반드시 값을 return해야 함.

그리고, 반환형에서 if문을 정의하였다.

Kotlin에서는 반복문을 제외한 모든 제어 문은 true/false로 값을 반환하는 형태이므로, 저런 식의 사용이 가능하다.

2.2 변수

Kotlin

fun main() {
    var someVariable: Int = 100
    var anotherVariable = 10
    
    print("$someVariable\n")
    print(anotherVariable)
}

Result

100
10

두 변수의 차이를 알겠는가?

someVariable는 형식~type~을 선언하였으나, anotherVariable 는 형식을 선언하지 않았다.

Kotlin은 컴파일러가 자동으로 형식을 유추하기 때문에, 굳이 입력하지 않더라도 사용이 가능하다! 이는 꽤 편한 장점이다.

Kotlin에서 변수형Int, Float, String 등은 반드시 첫 글자가 대문자여야 한다!

또한, Kotlin에서 변수는 반드시 val, var중 하나로 시작한다.

두 형식의 가장 큰 차이는 val은 불변하는~immutable~ 변수이고, var은 변할 수 있는~mutable~ 변수라는 점이다.

다음 예시를 통해 알아보자.

Kotlin

fun main() {
    var someVariable = 1000
    val someValue = 100
    
	someVariable += 1
    someValue += 1
}

Result

ERROR: Val cannot be reassigned

이런 식으로, val로 선언된 someValue 에 할당 된 값(100)은 변경이 불가능하므로 someValue += 1의 수행이 불가능해, 컴파일 에러로 실행이 불가능하다.

val은 Java의 final을 생각하면 될 것 이다.

2.3 문자열 String Interpolation

문자열을 사용할 때, ${변수명}을 이용하여, 변수에 할당 된 값을 문자열에서 사용할 수 있다.

아래 예시를 통해 알아보자.

Kotlin

fun main() {
    var str1 = "My"
    var str2 = " name is"
    print("${str1+str2} Donggi!\n")
    print("$str1+str2 Donggi!\n")
    print("$str1$str2 Donggi!")
}

Result

My name is Donggi!
My+str2 Donggi!
My name is Donggi!

세 경우 모두 다른 방법으로 출력 된 문장이다.

  1. 변수 2개를 ${}으로 묶은 경우
    • 두 변수 모두 성공적으로 호출되었다.
  2. 변수 2개를 $으로 묶은 경우
    • 첫 번째 변수만 호출되었다.
  3. 변수 2개를 각각 $으로 불러온 경우
    • 두 변수 모두 성공적으로 호출되었다.

위 결과로 얻어낼 수 있는 결론은 아래와 같다.

변수 $뒤에 {}을 안 붙여도 사용은 가능하지만, 2개 이상의 변수를 한번에 호출하기 위해서는 ${변수1+변수2+....}의 형태로 묶어야 한다.

기능 상의 큰 차이는 없으니, 본인이 편한 방식으로 코딩하면 된다.

🤟 클래스와 속성 값Property

3.1 클래스

클래스란, 같은 집단에 공통된 속성과 행위를 통해 정의한 사용자 정의 데이터 형을 의미한다.

말이 어려우니 예시로 직접 확인해보자.

Kotlin

class Student (
	val name: String,
    val s_id: Int,
    val age: Int
)

나는 이름name, 학번s_id, 나이age를 공통된 속성으로 갖는 Student라는 클래스를 새로 정의한 것이다.

Kotlin

    var hdg = Student("Donggi Hong", 12345, 25)

만들어진 클래스는 위처럼 변수에 할당하여 공통된 특성을 갖도록 사용할 수 있다.

3.2 속성 값Property

Java에서는 만든 class에 접근하기 위해 getter, setter 등 여러가지 함수가 필요하다.

Kotlin은 getter, setter와 같은 함수들을 컴파일러가 자동으로 사용할 수 있게 해주며, .을 사용하여 접근할 수 있다.

아래 예시에서 직접 확인해보자.

Kotlin

class Student (
	val name: String,
    val s_id: Int,
    val major: String,
    var age: Int
)

fun main() {
    var hdg = Student("Donggi Hong", 12345, "Mathmatics", 25)
    var jbj = Student("Byeongjin Ju", 67890, "Computer Science", 27)
    print("${hdg.name+", "+hdg.s_id+", "+hdg.major+", "+hdg.age}\n")
    print("${jbj.name+", "+jbj.s_id+", "+jbj.major+", "+jbj.age}\n")
    jbj.age += 1
    print("${jbj.name+", "+jbj.s_id+", "+jbj.major+", "+jbj.age}\n")
}

Result

Donggi Hong, 12345, Mathmatics, 25
Byeongjin Ju, 67890, Computer Science, 27
Byeongjin Ju, 67890, Computer Science, 28

클래스로 생성된 변수의 이름에 .을 붙이고, 속성 값을 이어 쓰는 것으로 해당 변수를 get하거나, set할 수 있다.

물론 클래스에 사용자 정의 get, set함수를 정의 할 수도 있다.

아래 예시를 참고해보자.

Kotlin

class Student (
	val name: String,
    val s_id: Int,
    val major: String,
    var age: Int
)

class aboutStudent(val student: Student) {
    val isOld: String
        get() {
            val str = "Is ${student.name} getting old? "
            return if (student.age > 25) str+"YES" else str+"NO"
        }
    val majorIsMath: String
    	get() {
            val str = "${student.name}'s major is mathmatics? "
            return if (student.major == "Mathmatics") str+"YES" else str+"NO"
        }
}

fun main() {
    var hdg = Student("Donggi Hong", 12345, "Mathmatics", 25)
    var jbj = Student("Byeongjin Ju", 67890, "Computer Science", 27)
    println("${aboutStudent(hdg).isOld}")
    println("${aboutStudent(jbj).isOld}")
    println("${aboutStudent(hdg).majorIsMath}")
    print("${aboutStudent(jbj).majorIsMath}")
}

Result

Is Donggi Hong getting old? NO
Is Byeongjin Ju getting old? YES
Donggi Hong's major is mathmatics? YES
Byeongjin Ju's major is mathmatics? NO

위와 같이 속성 값의 get()함수를 직접 설정해 주는 것으로, 속성 값을 호출했을 때 원하는 결과를 받아오도록 할 수 있다.

👏 마치며

아래의 블로그에서 많은 부분을 참고하여 공부하며 글을 작성했다.

기존의 다른 언어에서 작동하던 함수들과 비교하며 학습하니 머릿속에 확실히 뚜렷하게 그려졌다.

다음 시간에는 열거형, when, 반복문 등에 대해서 공부해야겠다.

글의 이어지는 내용을 보다 보니 스마트 캐스트에 관한 내용도 있던데, 확실히 이해하면 나중에 다뤄봐야겠다.

참고한 블로그 : https://tourspace.tistory.com/64

태그:

카테고리:

업데이트:

댓글남기기