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

1.1 변수 var

변수(variable)란 값을 임시로 메모리에 저장하고 그 저장공간에 이름을 부여한 것을 의미한다. 변수는 다음 그림과 같이 이름과 값으로 구성된다.

변수의 구성

변수는 변수의 이름앞에 var을 붙여서 선언할 수 있는데 변수 선언과 동시에 값 넣기, 값으로 초기화하지 않고 선언만 하고 사용하기로 나뉠 수 있다. 각각 알아보면 다음과 같다.


1. 변수 선언과 동시에 값 넣기 - 입력되는 값으로 타입을 추론할 수 있다. 

var 변수명(이름) = 값

ex) 변수명 mySubject에 문자열 "안드로이드"를 입력하는 예시

var mySubject = "안드로이드"

2. 값으로 초기화하지 않고 선언만 하고 사용하기 (반드시 변수명 옆에 : 붙여서 자료형 지정하기)

var 변수명 : 타입
변수명 = 값

ex) 변수명 myHeight에를 Int 타입으로 선언하고 다음 줄에서 정수형 180을 입력하는 예시

var myHeight: Int
myHeight = 180

1.2 결론

위의 1, 2 예시를 통해 변수는 최초 선언 시 타입이 결정된다는 것을 알 수 있다. 또한 변수는 한번 타입이 결정되면 결정된 타입과 동일한 타입의 값만 넣을 수 있다. 즉 다시 말하면 위의 mySubject 변수에 180을 넣을 수는 없다.


2.1 데이터 타입

Double : 소수점이 있는 값을 저장할 때 사용

var doubleValue: Double
doubleValue = 3.14

 

Float : Double과 동일하지만 Double에 비해 범위가 작다

var floatValue: Float
floatValue = 3.14F // Double과 구분하기 위해 F를 붙이는 것을 확인할 수 있다.

 

Int : 정수를 저장할 때 사용

var intValue: Int
intValue = 123456789

 

Long : Int보다 큰 범위

var longValue: Long
longValue = 123456789

 

Short, Byte : 두 경우 모두 정숫값을 저장하는 데 사용하지만 Int 보다 작은 범위

var byteValue: Byte = 123
var shortValue: Byte = 123

 

Char : 하나의 글자만 ' '로 감싸 지정

var charValue = 'A'

 

String : 여러 개의 문자를 지정할 수 있음

var stringValue: String = "Android"


Boolean : true, false 둘 중 1개의 값 지정 가능

var boolValue = true

2.2 출력 예시

package kr.co.kibeom.basicsyntax

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var mySubject = "안드로이드"
        var myHeight: Int
        myHeight = 180
        myHeight += 1
        Log.d("BasicSyntax", "mySubject = $mySubject, myHeight = $myHeight")
    }
}

 

로그 창


3.1 읽기 전용 변수 val

var과 다르기 읽기 전용인 val이 있다. 이 val은 var과 다르게 값을 변경할 수 없다. 선언하는 방법은 다음과 같이 변수와 동일하다.

val 변수명(이름) = 값

변하지 않는 값을 미리 지정해두고 필요에 따라 다른 값과 조합하여 사용할 수 있다.

val familyName = "김"
var fatherName = familyName + "아빠"
var sonName = familyName + "아들"

따라서 val로 지정한 값을 바꾸려 하면 에러가 발생한다.


3.2 const 상수

상수는 주로 기준이 되는 변하지 않는 값을 입력할때 사용, 읽기 전용 변수인 val 앞에 const를 붙여 사용한다.

const val PI = 3.14

val과 변경할 수 없다는 점에서 일치하지만 컴파일 시에 값이 결정되기 때문에 Int, Long과 같은 기본형과 문자열인 String만 입력할 수 있다.


4.1 코딩 컨벤션

코딩시에 지켜야 할 일종의 규칙

 

1. 클래스명 camel case로 작성

class MainActivity // 첫 글자는 대문자 새로운 단어의 첫 글자 대문자

2. 함수명

fun onCreateActivity() // 첫 글자는 소문자, 새로운 단어의 첫 글자만 대문자

3. 변수명

var intValue: Int // 첫 글자는 소문자, 새로운 단어의 첫 글자만 대문자

4. 상수명

const val PI = 3.14 // 모두 대문자
const val PI_VALUE = 3.14 // 두 개의 단어로 이루어져 있다면 단어 사이를 '_' 로 연결

5. 들여쓰기

package kr.co.kibeom.basicsyntax

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() { // 새로운 블록의 시작
    override fun onCreate(savedInstanceState: Bundle?) { // 4 칸 공백
        super.onCreate(savedInstanceState) // 이전 4칸의 공백에 추가로 4칸의 공백 즉 8칸 공백
        setContentView(R.layout.activity_main)
    
        var mySubject = "안드로이드"
        var myHeight: Int
        myHeight = 180
        myHeight += 1
        Log.d("BasicSyntax", "mySubject = $mySubject, myHeight = $myHeight")
    }
}

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

6. 함수  (0) 2021.12.20
5. 반복문  (0) 2021.12.19
4. 배열과 컬렉션  (0) 2021.12.14
3. 조건문  (0) 2021.12.12
1. 코틀린의 기본적인 문법  (0) 2021.12.12

C에서 어려운 포인터입니다. C는 low-level 언어라고 하는데 바로 이 포인터를 이용해 메모리에 직접 접근이 가능하기 때문에 low-level 언어라고 불립니다. 그렇다면 이 포인터는 과연 어떤 것일까요?

int num = 10; 즉 변수 num의 경우 int형이므로 4바이트가 메모리에 저장이 된다. 이 메모리의 주소 값을 임의로 0x123456부터 시작한다고 가정해보자. 이때 이 0x123456이라는 번지를 주소 값이라고 한다. 이 주소 값 역시 저장할 수 있는 값이며 포인터 변수는 메모리의 주소 값을 저장하기 위한 변수이다.


포인터 변수의 선언

이 포인터 변수의 선언은 매우 간단하다. 다음을 보자

int * pnum; // int 형 변수를 가리키는 포인터 변수 pnum

double * pnum2; // double 형 변수를 가르키는 포인터 변수 pnum2

float * pnum3; // float 형 변수를 가르키는 포인터 변수 pnum3

즉 저장하고자 하는 변수의 형에 따라 포인터 변수의 형 역시 정해진다.


& 연산자

& 연산자는 피연산자의 주소 값을 반환하는 연산자이다. 이를 다음의 예시를 통해 살펴보면 다음과 같다.

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main(void) {
    int num = 7;
    int* pnum;
    pnum = &num; // num의 주소값을 &연산자를 통해 반환하여 포인터 변수 pnum을 초기화 한다.
 
    return 0;
}
cs

이때 변수의 형과 포인터 변수의 형은 일치해야 한다. 즉 다음의 경우는 오류가 발생할 수 있다.

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main(void) {
    int num = 7;
    double* pnum; 
    pnum = &num; // double 형 포인터 변수에 int형 변수의 주소값을 넣으려 하므로 오류 발생
 
    return 0;
}
cs

* 연산자

* 연산자는 포인터가 가리키는 메모리 공간에 접근할 때 사용하는 연산자이다. 다음을 보자. 주석이 그 의미이다.

*pnum = 20; // 포인터 변수 pnum이 가리키는 메모리 공간인 변수 num에 int 값 20을 저장하라

printf("%d", *pnum); // 포인터 변수 pnum이 가리키는 메모리 공간인 변수 num에 저장된 값을 출력하라

예시를 통해 살펴보자

<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main(void) {
    int num1 = 50, num2 = 100;
    int* pnum;
 
    pnum = &num1; // 포인터 변수 pnum이 int형 변수 num1을 가리킴
    (*pnum) += 30// num1 += 30과 동일하다
 
    pnum = &num2; // 포인터 변수 pnum이 int형 변수 num2를 가리킴
    (*pnum) -= 30;
 
    printf("num1 : %d\n", num1); // 50 + 30 
    printf("num2 : %d\n", num2); // 100 - 30
 
    return 0;
}
cs

<실행결과>

위의 결과를 그림으로 그려보면 다음과 같다.

포인터 구조


예제

int형 변수 num1, num2를 선언과 동시에 각각 30, 20으로 초기화하고 int형 포인터 변수 ptr1, ptr2를 선언하여 각각 num1, num2를 가리키게 하자. 그 후 ptr1과 ptr2를 이용하여 num1의 값을 10 증가시키고, num2의 값을 10 감소시키자. 이제 두 포인터 변수 ptr1과 ptr2가 가리키는 대상을 서로 바꾸고 ptr1과 ptr2가 가리키는 변수에 저장된 값을 출력하라

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
#include <stdio.h>
 
int main(void) {
    int num1 = 30, num2 = 20;
    int* ptr1, * ptr2;
 
    // ptr1, ptr2가 num1과 num2를 가리키게 한다.
    ptr1 = &num1;
    ptr2 = &num2;
 
    // ptr1과 ptr2를 각각 10 증가 10 감소
    (*ptr1) += 10;
    (*ptr2) -= 10;
 
    // 두 포인터 변수 ptr1과 ptr2가 가리키는 대상 변경
    int* temp;
    temp = ptr1;
    ptr1 = ptr2;
    ptr2 = temp;
 
    // 출력
    printf("*ptr1 = %d\n"*ptr1);
    printf("*ptr2 = %d\n"*ptr2);
 
    return 0;
}
cs

<실행결과>

 

'C' 카테고리의 다른 글

5. 포인터와 함수  (0) 2021.06.25
4. 포인터와 배열  (0) 2021.06.22
2. 배열을 이용하여 문자열의 표현  (0) 2021.06.21
1-1 배열 예제  (0) 2021.06.21
1. 배열 - 배열과 초기화에 관하여  (0) 2021.06.21

+ Recent posts