이 포스팅은 고돈호 님의 이것이 안드로이드다 with 코틀린(한빛미디어)을 기반으로 작성되었습니다.

코틀린의 경우 다른 언어에서 지원하는 null 이상의 것을 제공한다. 아래의 것들을 통해 알아보자.

 

1. null값 허용 '?'

코틀린은 기본적으로 다른 언어와 달리 기본 변수에 null을 집어넣을 수 없다. 따라서 null을 입력하기 위해서는 '?'를 붙여줘야 한다. 사용법은 다음과 같다.

var variable: String?

예시 코드는 다음과 같다.

var nullVariable: String? // 변수 nullVariable에 null 초기화 허용
nullVariable = null
        
var notNullVariable: String // null 초기화 불가능
notNullVariable = null // null 입력 불가능

2. 함수의 매개변수로 null값 허용

함수 역시 매개변수로 null값을 허용해주기 위해 '?'를 넣어주어야 한다. 예시 코드는 다음과 같다.

fun nullParameter(str: String?) {
    if(str != null) {
        var length2 = str.length
    }
}

3. 함수의 리턴 타입에 null값 허용

return 타입에도 '?'를 붙여 return type을 null을 허용할 수 있다. 예시 코드는 다음과 같다.

fun nullReturn(): String? {
    return null
}

4. Safe call '?.'

'?.'를 이용하여 안전한 호출을 사용할 수 있다. 예시 코드는 다음과 같다.

fun safeCall(str: String?): Int? {
    var resultNull: Int? = str?.length
    return resultNull
}

?. 가 있으면 앞에 변수가 null이면 ?. 뒤를 실행하지 않는다. 즉 str이 null이면 이 예시에서는 길이를 반환하지 않는다. 


5. Null값 대체하기 '?:' - Elvis Operator

fun elvisFunction(str: String?): Int {
    var resultNotNull: Int = str?.length?:0
    return resultNotNull
 }

?: 가 있으면 ?. 앞의 변수가 null일 경우 ?:를 반환한다. 즉 str이 null이면 이 예시에서는 0을 반환한다.

 

'안드로이드 앱 개발' 카테고리의 다른 글

9. 지연 초기화  (0) 2021.12.23
7. 클래스  (0) 2021.12.21
6. 함수  (0) 2021.12.20
5. 반복문  (0) 2021.12.19
4. 배열과 컬렉션  (0) 2021.12.14

배열을 이용하여 문자열을 표현할 수 도 있다. 다음을 보자.

char str[ ] = "Hello world!"; 

위의 코드를 통해 배열 str에 char형 배열이 할당된 것을 확인할 수 있다. 그렇다면 위의 배열의 앞에서 배웠던 sizeof함수를 이용하여 길이를 알아보자.

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(void) {
    char str[] = "Hello world!"// 글자는 공백을 포함하여 12개 이다. 
 
    int len = sizeof(str) / sizeof(char);
    printf("배열의 길이 : %d\n", len);
    
    return 0;
}
cs

<실행결과>

공백을 포함하여 Hello world! 는 12글자인데 왜 13글자가 나올까? 이는 널 문자 때문이다. 다시 말하면 배열 str은 다음의 구조와 같다.

널 문자 \0가 포함된 모습

그렇다면 이 널 문자는 왜 포함되는 것 일까? 바로 문자열을 표현하기 위해서 이다.

 

char arr[ ] = {'H', 'i', '~'}; // 널 문자(\0)가 없으므로 단순한 문자 배열

char arr2[ ] = {'H', 'i', '~', '\0'}; // 널 문자(\0)가 존재하므로 문자열  

 

즉 C언어에서는 문자열에서 널 문자를 인식하고 이를 문자열의 마지막으로 인식한다.


예제

프로그램 사용자로부터 하나의 영단어를 입력받아서 입력받은 영단어를 뒤집어서 출력하도록 예제를 작성하라 단 널 문자의 위치를 변경해서는 안된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int main(void) {
    char str[100];
    scanf("%s", str);
 
    int len = 0;
    while (str[len] != '\0')
        len++;
 
    char temp;
 
    for (int i = 0; i < len / 2; i++) {
        temp = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = temp;
    }
 
    printf("%s", str);
    return 0;
}
cs

<실행결과>

 

'C' 카테고리의 다른 글

5. 포인터와 함수  (0) 2021.06.25
4. 포인터와 배열  (0) 2021.06.22
3. 포인터  (0) 2021.06.21
1-1 배열 예제  (0) 2021.06.21
1. 배열 - 배열과 초기화에 관하여  (0) 2021.06.21

+ Recent posts