Kotlin에서 변수 만들기 및 사용하기

1. 시작하기 전에

휴대전화에서 사용하는 앱에서는 일부 부분이 동일하게 유지되지만 다른 부분은 변경되거나 가변적입니다.

예를 들어 네트워크 및 인터넷, 연결된 기기, 앱 등 설정 앱의 카테고리 이름은 그대로 유지됩니다.

설정 앱의 스크린샷은 기기의 설정을 변경하는 다양한 메뉴 옵션을 보여줍니다. 화면에 표시되는 메뉴 항목은 네트워크 및 인터넷, 연결된 기기, 앱, 알림, 배터리, 저장용량, 소리 및 진동, 디스플레이입니다.

반면 뉴스 앱을 보면 기사가 자주 변경됩니다. 기사 제목, 출처, 게시 시간, 이미지가 변경됩니다.

시간 경과에 따라 콘텐츠가 변경되도록 코드를 어떻게 작성할까요? 매일, 매시간, 매분 게시되는 새로운 기사가 있을 때마다 앱의 코드를 다시 작성할 수는 없습니다.

이 Codelab에서는 완전히 새로운 명령 세트를 작성하지 않고도 프로그램의 특정 부분이 변경될 수 있도록 변수를 사용하는 코드를 작성하는 방법을 알아봅니다. 이전 Codelab에서와 마찬가지로 Kotlin 플레이그라운드를 사용합니다.

빌드할 항목

  • 변수를 사용하는 Kotlin의 간단한 프로그램

학습할 내용

  • 변수를 정의하고 그 값을 업데이트하는 방법
  • Kotlin의 기본 데이터 유형에서 변수에 적합한 데이터 유형을 선택하는 방법
  • 코드에 주석을 추가하는 방법

필요한 항목

  • 인터넷 액세스가 가능하고 웹브라우저가 있는 컴퓨터

2. 변수 및 데이터 유형

컴퓨터 프로그래밍에는 단일 데이터 컨테이너인 변수라는 개념이 있습니다. 값이 포함된 상자로 생각하면 됩니다. 상자에는 라벨이 있고 라벨은 변수 이름입니다. 상자를 이름으로 참조하여 상자에 포함된 값에 액세스할 수 있습니다.

이 다이어그램은 상자가 무언가를 보유할 수 있듯이 변수가 데이터를 보유할 수 있는 방식을 보여줍니다. name이라고 표시된 상자가 있습니다. 상자 밖에는 value라는 라벨이 있습니다. 값에서 상자를 가리키는 화살표가 있습니다. 즉, 값이 상자 안으로 들어갑니다.

간단히 값을 직접 사용할 수 있는데 값을 상자에 저장하고 이름으로 상자를 참조하는 이유는 무엇일까요? 문제는 코드가 모든 명령에서 직접 값을 사용하는 경우 프로그램은 그러한 특정 경우에만 작동한다는 것입니다.

다음은 변수가 유용한 이유를 쉽게 파악할 수 있게 해주는 비유입니다. 다음은 최근에 만난 사람에게 보내는 편지입니다.

안녕하세요, 이은수님

오늘 사무실에서 만나서 반가웠습니다. 금요일에 뵙겠습니다.

좋은 하루 보내세요.

이 편지는 훌륭하지만 이은수님과의 특정 상황에만 사용할 수 있습니다. 여러 사람에게 내용만 조금씩 바뀐 같은 편지를 여러 번 쓰게 되면 어떨까요? 변경될 수 있는 부분을 빈 공간으로 남겨 두고 편지 템플릿을 하나 만드는 것이 더 효율적입니다.

____님, 안녕하세요.

오늘 ____에서 만나서 반가웠습니다. ____에 뵙겠습니다.

좋은 하루 보내세요.

각 빈 공간에 들어갈 정보 유형을 지정할 수도 있습니다. 이렇게 하면 편지 템플릿이 예상대로 사용됩니다.

{ name }님, 안녕하세요.

오늘 { location }에서 만나서 반가웠습니다. { date }에 뵙겠습니다.

좋은 하루 보내세요.

개념적으로는 앱 빌드도 비슷합니다. 데이터의 자리표시자가 있지만 앱의 다른 부분은 동일하게 유지됩니다.

다음 그림은 뉴스 앱 샘플을 보여줍니다. 화면의 콘텐츠는 이름이 사용자의 실제 이름 자리표시자로 남겨진 환영 메시지로 시작합니다. 그런 다음 '최신 뉴스'라는 텍스트가 표시됩니다. 이 텍스트는 앱에 로드되는 기사와 관계없이 변경되지 않습니다. 그런 다음 각 새 기사의 행이 있으며 여기에는 기사의 이미지와 제목, 날짜, 출처의 자리표시자가 있습니다. 기사 목록 하단에는 '기사 더보기'라고 표시된 버튼이 있습니다.

위의 뉴스 앱 그림을 보면 'Welcome' 텍스트와 'Latest news for you' 제목, 'View more articles' 버튼 텍스트가 항상 동일하게 유지됩니다. 반대로 사용자 이름과 각 기사의 콘텐츠는 변경되므로 각 정보를 보유하는 변수를 사용할 훌륭한 기회가 될 수 있습니다.

이 그림에서는 상자 3개가 나란히 놓여 있습니다. 첫 번째 상자는 name이라고 합니다. 상자 옆에는 'Alex'라는 라벨이 있습니다. 'Alex'에서 상자를 가리키는 화살표가 있으며 이는 'Alex' 값이 name이라는 상자에 저장되어 있다는 의미입니다. 두 번째 상자는 article1Name입니다. 상자 옆에는 'New movie coming out'이라는 라벨이 있습니다. 이 문자열에서 두 번째 상자를 가리키는 화살표가 있습니다. 즉, 'New movie coming out'이라는 값이 article1Name이라는 상자에 저장됩니다. 세 번째 상자는 article1Date입니다. 상자 옆에는 'June 9'이라는 라벨이 있습니다. 'June 9'에서 세 번째 상자를 가리키는 화살표가 있습니다. 즉, 'June 9'이라는 값이 article1Date라는 상자에 저장됩니다.

이름이 Alex인 사용자 또는 항상 제목과 게시일이 같은 뉴스 기사에만 작동하도록 뉴스 앱의 코드나 명령을 작성하는 것은 바람직하지 않습니다. 대신 앱이 더 유연한 것이 좋습니다. 따라서 name, article1Name, article1Date 등의 변수 이름을 참조하여 코드를 작성해야 합니다. 그러면 코드가 사용자 이름이 다를 수 있고 기사 세부정보가 다를 수 있는 다양한 사용 사례에 작동하도록 충분히 일반화됩니다.

변수가 포함된 앱 예시

앱 예시에서 변수를 사용할 수 있는 위치를 살펴보겠습니다.

이 Google 지도 앱 스크린샷은 Googleplex 위치 세부정보를 보여줍니다. 회사 캠퍼스이며 Google의 글로벌 본사로 설명되어 있습니다. 위치는 9,831개 리뷰에서 별표 평점이 4.2입니다. 주소는 1600 Amphitheatre Pkwy, Mountain View, CA 94043입니다. 이 화면에는 사용자가 이 위치를 목록에 저장할 수 있는 옵션이 있습니다.

지도 앱에서는 식당이나 업체 등 각 위치의 세부정보 화면을 찾을 수 있습니다. 위의 Google 지도 앱 스크린샷에는 Googleplex라고 하는 Google 본사의 세부정보가 나와 있습니다. 앱에 변수로 저장되는 데이터는 무엇일까요?

  • 위치 이름
  • 위치의 별표 평점
  • 위치의 리뷰 수
  • 사용자가 이 위치를 저장(또는 북마크)했는지 여부
  • 위치 주소
  • 위치 설명

이러한 변수에 저장된 데이터를 변경하면 다른 위치의 세부정보도 표시하기에 충분히 유연한 지도 앱이 생깁니다.

데이터 유형

앱의 어떤 측면이 변수가 될 수 있는지 결정할 때 이러한 변수에 저장할 수 있는 데이터 유형을 지정하는 것이 중요합니다. Kotlin에는 몇 가지 일반적인 기본 데이터 유형이 있습니다. 아래 표는 각 행의 다른 데이터 유형을 보여줍니다. 각 데이터 유형에는 보유할 수 있는 데이터 종류와 예시 값에 관한 설명이 있습니다.

Kotlin 데이터 유형

포함할 수 있는 데이터 종류

리터럴 값 예시

String

텍스트

"Add contact"
"Search"
"Sign in"

Int

정수

32
1293490
-59281

Double

십진수

2.0
501.0292
-31723.99999

Float

십진수(Double보다 정밀도가 낮음). 숫자 끝에 f 또는 F가 있습니다.

5.0f
-1630.209f
1.2940278F

Boolean

true 또는 false. 가능한 값이 두 개만 있을 때 이 데이터 유형을 사용합니다. truefalse는 Kotlin의 키워드입니다.

true
false

일반적인 Kotlin 데이터 유형을 알아봤습니다. 앞서 살펴본 위치 세부정보 페이지에서 식별된 각 변수에는 어떤 데이터 유형이 적절할까요?

이 Google 지도 앱 스크린샷은 Googleplex 위치 세부정보를 보여줍니다. 회사 캠퍼스이며 Google의 글로벌 본사로 설명되어 있습니다. 위치는 9,831개 리뷰에서 별표 평점이 4.2입니다. 주소는 1600 Amphitheatre Pkwy, Mountain View, CA 94043입니다. 이 화면에는 사용자가 이 위치를 목록에 저장할 수 있는 옵션이 있습니다.

  • 위치의 이름은 텍스트이므로 데이터 유형이 String.인 변수에 저장할 수 있습니다.
  • 위치의 별표 평점은 십진수(예: 별표 4.2)이므로 Double로 저장할 수 있습니다.
  • 위치의 리뷰 수는 정수이므로 Int로 저장해야 합니다.
  • 사용자가 이 위치를 저장했는지는 두 가지 가능한 값(저장함 또는 저장하지 않음)만 있으므로 Boolean으로 저장되며 여기서 truefalse는 이러한 각 상태를 나타낼 수 있습니다.
  • 위치의 주소는 텍스트이므로 String이어야 합니다.
  • 위치 설명도 텍스트이므로 String이어야 합니다.

아래의 두 가지 시나리오를 더 연습해 보세요. 다음 앱에서 변수와 그 데이터 유형의 사용을 확인합니다.

  1. YouTube 앱과 같은 동영상을 시청하는 앱에는 동영상 세부정보 화면이 있습니다. 어디에 변수가 사용될 수 있을까요? 이러한 변수의 데이터 유형은 무엇일까요?

이 스크린샷은 YouTube 앱에서 재생되는 동영상을 보여줍니다. 이 동영상의 이름은 'Android Developers has reached 1M subscribers!'입니다. Android 개발자 YouTube 채널에 게시되었습니다. 동영상은 조회수 6,900회, 좋아요 541개, 댓글 68개입니다.

한 가지 정답은 없지만 동영상 시청 앱에서는 변수를 다음과 같은 데이터에 사용할 수 있습니다.

  • 동영상 이름(String)
  • 채널 이름(String)
  • 동영상의 조회수(Int)
  • 동영상의 좋아요 수(Int)
  • 동영상의 댓글 수(Int)
  1. Gmail과 같은 이메일 앱에서는 받은편지함 화면에 최근에 받은 이메일 메시지가 표시됩니다. 어디에 변수가 사용될 수 있을까요? 이러한 변수의 데이터 유형은 무엇일까요?

이 Gmail 앱 스크린샷은 사용자의 받은편지함에 있는 메일 목록을 보여줍니다. 현재 발신자 Mary Joe가 보낸 메일 1개가 받은편지함에 있습니다. 이메일 제목은 'This weekend'입니다. 이메일에 별표표시하는 옵션이 있습니다.

다시 말하지만 정답은 없습니다. 이메일 앱에서는 변수를 다음과 같은 데이터에 사용할 수 있습니다.

  • 발신자의 이름(String)
  • 이메일의 제목(String)
  • 이메일의 별표표시 여부(Boolean)
  • 받은편지함의 새 이메일 수(Int)

직접 해 보기

  1. 휴대전화에서 좋아하는 앱을 엽니다.
  2. 앱의 특정 화면에서 변수가 사용될 것 같은 위치를 식별합니다.
  3. 이러한 변수의 데이터 유형을 추측합니다.
  4. 앱의 스크린샷과 변수가 사용될 것 같은 위치에 관한 설명, 해시태그 #AndroidBasics를 사용해 답변을 소셜 미디어에 공유합니다.

지금까지 이 Codelab을 잘 진행했습니다. 다음 섹션으로 이동하여 코드에서 변수와 데이터 유형이 사용되는 방식을 자세히 알아보세요.

3. 변수 정의 및 사용

변수 정의 및 사용

변수를 사용하려면 먼저 코드에서 변수를 정의해야 합니다. 이는 지난 Codelab에서 학습한 함수를 호출하기 전에 정의하는 것과 유사합니다.

변수를 정의할 때는 변수를 고유하게 식별하는 이름을 할당합니다. 데이터 유형을 지정하여 보유할 수 있는 데이터 유형도 결정합니다. 마지막으로 변수에 저장될 초깃값을 제공할 수 있지만 이는 선택사항입니다.

변수를 정의한 후에는 프로그램에서 이 변수를 사용할 수 있습니다. 변수를 사용하려면 코드에서 변수 이름을 입력합니다. 이렇게 하면 Kotlin 컴파일러에 개발자가 코드의 이 지점에서 변수의 값을 사용하려고 한다고 알립니다.

예를 들어 사용자의 받은편지함에 있는 읽지 않은 메일 수의 변수를 정의합니다. 이 변수의 이름은 count일 수 있습니다. 변수 내에 숫자 2와 같은 값을 저장하여 사용자 받은편지함에 있는 읽지 않은 메일 2개를 나타냅니다. 변수에 저장할 다른 숫자를 선택할 수 있지만 이 예에서는 숫자 2를 사용합니다.

count라고 표시된 상자가 있습니다. 상자 밖에는 2라는 라벨이 있습니다. 값에서 상자를 가리키는 화살표가 있습니다. 즉, 값이 상자 안으로 들어갑니다.

코드에서 읽지 않은 메일 수에 액세스해야 할 때마다 코드에 count를 입력합니다. 명령을 실행할 때 Kotlin 컴파일러는 코드에서 변수 이름을 확인하고 대신 변수 값을 사용합니다.

기술적으로 이 프로세스를 설명하는 더 구체적인 어휘가 있습니다.

표현식은 값이 있는 코드의 작은 단위입니다. 표현식은 변수, 함수 호출 등으로 구성될 수 있습니다. 아래 예에서 표현식count 변수 하나로 구성됩니다. 표현식의 값은 2입니다.

이 다이어그램은 표현식과 그 옆의 값을 보여줍니다. 표현식 라벨이 있고 그 아래에 count라고 표시됩니다. 오른쪽에는 값 라벨이 있고 그 아래에 2가 표시됩니다.

평가는 표현식의 값을 결정하는 것을 의미합니다. 이 경우 표현식은 2로 평가됩니다. 컴파일러는 코드에서 표현식을 평가하고 프로그램에서 명령을 실행할 때 이러한 값을 사용합니다.

이 다이어그램은 표현식 count가 2로 평가되는 것을 보여주기 위한 것입니다.  count 변수 이름(count)은 값 2 옆에 표시됩니다. count 변수에는 원이 표시되고 count 변수에서 값 2를 가리키는 화살표가 있습니다. 화살표의 라벨은 'evaluates to'라는 문구로 지정됩니다.

Kotlin 플레이그라운드에서 이 동작을 관찰하려면 다음 섹션에서 프로그램을 실행합니다.

  1. 웹브라우저에서 Kotlin 플레이그라운드를 엽니다.
  2. Kotlin 플레이그라운드의 기존 코드를 다음 프로그램으로 바꿉니다.

이 프로그램은 초깃값이 2count라는 변수를 만들고 count 변수의 값을 출력에 인쇄하여 사용합니다. 아직 코드 문법의 모든 측면을 이해하지 못하더라도 걱정하지 마세요. 이후 섹션에서 더 자세히 설명합니다.

fun main() {
    val count: Int = 2
    println(count)
}
  1. 프로그램을 실행하면 다음과 같이 출력됩니다.
2

변수 선언

실행한 프로그램에서 두 번째 코드 줄은 다음과 같습니다.

val count: Int = 2

이 문은 숫자 2를 보유하는 count라는 정수 변수를 만듭니다.

count라고 표시된 상자가 있습니다. 상자 밖에는 2라는 라벨이 있습니다. 값에서 상자를 가리키는 화살표가 있습니다. 즉, 값이 상자 안으로 들어갑니다.

Kotlin에서 변수를 선언하는 문법(또는 형식)을 잘 읽을 수 있으려면 시간이 걸릴 수 있습니다. 아래 다이어그램은 변수에 관한 각 세부정보가 있어야 하는 위치와 공백 및 기호의 위치를 보여줍니다.

다음 다이어그램은 Kotlin에서 변수를 선언하는 문법을 보여줍니다. 변수 선언은 val이라는 단어로 시작하고 그 뒤에 공백이 옵니다. val 오른쪽에는 name이라는 라벨이 지정된 상자가 있습니다. name 상자 오른쪽에는 콜론 기호가 있습니다. 콜론 뒤에는 공백이 있고 data type 라벨이 지정된 상자가 그 뒤에 있습니다. 그 오른쪽에는 공백, 등호, 또 하나의 공백 순으로 이어집니다. 오른쪽에는 initial value 라벨이 표시된 상자가 있습니다.

count 변수 예시의 컨텍스트에서 변수 선언은 val 단어로 시작하는 것을 볼 수 있습니다. 변수 이름은 count입니다. 데이터 유형은 Int이며 초깃값은 2입니다.

이 다이어그램은 val count: Int = 2라는 코드 줄을 보여줍니다. 코드 부분을 가리키는 화살표는 그 의미를 설명합니다. name 라벨이 코드의 count 단어를 가리킵니다. data type 라벨은 코드의 Int라는 단어를 가리킵니다. initial value 라벨은 코드의 숫자 2를 가리킵니다.

변수 선언의 각 부분은 아래에서 자세히 설명합니다.

새 변수를 정의하는 키워드

새 변수를 정의하려면 Kotlin 키워드 val(값을 의미함)로 시작하세요. 그러면 Kotlin 컴파일러가 이 문에 변수 선언이 있음을 인식합니다.

변수 이름

함수의 이름을 지정하는 것처럼 변수의 이름도 지정합니다. 변수 선언에서 변수 이름은 val 키워드 뒤에 있습니다.

다음 다이어그램은 Kotlin에서 변수를 선언하는 문법을 보여줍니다. 변수 선언은 val이라는 단어로 시작하고 그 뒤에 공백이 옵니다. val 오른쪽에는 name이라는 라벨이 지정된 상자가 있습니다. name 상자가 녹색 테두리와 녹색 배경으로 강조표시되어 변수 선언의 이 부분을 강조합니다. name 상자 오른쪽에는 콜론 기호가 있습니다. 콜론 뒤에는 공백이 있고 data type 라벨이 지정된 상자가 그 뒤에 있습니다. 그 오른쪽에는 공백, 등호, 또 하나의 공백 순으로 이어집니다. 오른쪽에는 initial value 라벨이 표시된 상자가 있습니다.

변수 이름은 원하는 대로 선택할 수 있지만 Kotlin 키워드는 변수 이름으로 사용하지 않는 것이 좋습니다.

코드를 더 쉽게 읽을 수 있도록 변수가 보유한 데이터를 설명하는 이름을 선택하는 것이 가장 좋습니다.

변수 이름은 함수 이름에서 학습한 카멜 표기법 규칙을 따라야 합니다. 변수 이름의 첫 번째 단어는 모두 소문자입니다. 이름에 단어가 여러 개 있는 경우 단어 사이에는 공백이 없어야 하며 다른 모든 단어는 대문자로 시작해야 합니다.

변수 이름의 예시는 다음과 같습니다.

  • numberOfEmails
  • cityName
  • bookPublicationDate

앞에서 본 코드 예시에서 count는 변수 이름입니다.

val count: Int = 2

변수 데이터 유형

변수 이름 뒤에 콜론과 공백, 변수의 데이터 유형을 추가합니다. 앞서 언급했듯이 String, Int, Double, Float,, Boolean은 기본 Kotlin 데이터 유형입니다. 이 과정의 뒷부분에서 더 많은 데이터 유형을 알아봅니다. 표시된 대로 데이터 유형의 철자를 정확히 입력하고 각각 대문자로 시작해야 합니다.

다음 다이어그램은 Kotlin에서 변수를 선언하는 문법을 보여줍니다. 변수 선언은 val이라는 단어로 시작하고 그 뒤에 공백이 옵니다. val 오른쪽에는 name이라는 라벨이 지정된 상자가 있습니다. name 상자 오른쪽에는 콜론 기호가 있습니다. 콜론 뒤에는 공백이 있고 data type 라벨이 지정된 상자가 그 뒤에 있습니다. data type 상자가 녹색 테두리와 녹색 배경으로 강조표시되어 변수 선언의 이 부분을 강조합니다. data type 상자의 오른쪽에는 공백, 등호, 또 하나의 공백이 있습니다. 오른쪽에는 initial value 라벨이 표시된 상자가 있습니다.

count 변수 예시에서 Int는 변수의 데이터 유형입니다.

val count: Int = 2

할당 연산자

변수 선언에서 등호(=)는 데이터 유형 뒤에 옵니다. 등호를 할당 연산자라고 합니다. 할당 연산자는 변수에 값을 할당합니다. 즉, 등호의 오른쪽에 있는 값이 등호의 왼쪽에 있는 변수에 저장됩니다.

이 다이어그램은 val count: Int = 2라는 코드 줄을 보여줍니다. 등호의 오른쪽에 있는 2에서 등호의 왼쪽에 있는 단어 count를 가리키는 화살표가 있습니다. 이는 값 2가 count 변수에 저장됨을 보여줍니다.

변수 초깃값

변수 값은 변수에 저장된 실제 데이터입니다.

다음 다이어그램은 Kotlin에서 변수를 선언하는 문법을 보여줍니다. 변수 선언은 val이라는 단어로 시작하고 그 뒤에 공백이 옵니다. val 오른쪽에는 name이라는 라벨이 지정된 상자가 있습니다. name 상자 오른쪽에는 콜론 기호가 있습니다. 콜론 뒤에는 공백이 있고 data type 라벨이 지정된 상자가 그 뒤에 있습니다. data type 상자의 오른쪽에는 공백, 등호, 또 하나의 공백이 있습니다. 오른쪽에는 initial value 라벨이 표시된 상자가 있습니다. initial value 상자가 녹색 테두리와 녹색 배경으로 강조표시되어 변수 선언의 이 부분을 강조합니다.

count 변수 예시에서 숫자 2는 변수의 초깃값입니다.

val count: Int = 2

'count 변수가 2초기화됩니다'라는 문구가 나올 수도 있습니다. 이는 변수가 선언될 때 2가 변수에 저장된 첫 번째 값이라는 의미입니다.

초깃값은 변수에 선언된 데이터 유형에 따라 다릅니다.

이 Codelab의 앞부분에서 본 아래 표를 참고하세요. 세 번째 열은 상응하는 각 유형의 변수에 저장할 수 있는 예시 값을 보여줍니다. 이러한 값은 고정 값 또는 상수 값(값이 계속 동일함)이므로 리터럴이라고 합니다. 예를 들어 정수 32는 항상 값이 32입니다. 반대로 변수는 값이 변경될 수 있으므로 리터럴이 아닙니다. 이러한 리터럴 값이 문자열 리터럴, 정수 리터럴, 부울 리터럴 등 유형에 따라 참조되는 것을 볼 수도 있습니다.

Kotlin 데이터 유형

포함할 수 있는 데이터 종류

리터럴 값 예시

String

텍스트

"Add contact"
"Search"
"Sign in"

Int

정수

32
1293490
-59281

Double

십진수

2.0
501.0292
-31723.99999

Float

십진수(Double보다 정밀도가 낮음). 숫자 끝에 f 또는 F가 있습니다.

5.0f
-1630.209f
1.2940278F

Boolean

true 또는 false. 가능한 값이 두 개만 있을 때 이 데이터 유형을 사용합니다. truefalse는 Kotlin의 키워드입니다.

true
false

변수의 데이터 유형에 따라 적절하고 유효한 값을 제공하는 것이 중요합니다. 예를 들어 Int 유형의 변수 내에 "Hello"와 같은 문자열 리터럴은 저장할 수 없습니다. Kotlin 컴파일러에서 오류가 발생하기 때문입니다.

변수 사용

다음은 Kotlin 플레이그라운드에서 실행한 원본 프로그램입니다. 지금까지 배운 내용은 두 번째 코드 줄이 2라는 값이 포함된 count라는 새로운 정수 변수를 만든다는 것입니다.

fun main() {
    val count: Int = 2
    println(count)
}

이제 세 번째 코드 줄을 살펴보겠습니다. 출력에 count 변수를 인쇄합니다.

println(count)

count 단어 주위에 따옴표가 없습니다. 문자열 리터럴이 아닌 변수 이름입니다. 문자열 리터럴이라면 단어 주위에 따옴표가 옵니다. 프로그램을 실행하면 Kotlin 컴파일러는 println() 명령의 괄호 안의 표현식인 count를 평가합니다. 표현식은 2로 평가되므로 println() 메서드는 다음과 같이 입력으로 2를 사용하여 호출됩니다. println(2)

따라서 프로그램의 출력은 다음과 같습니다.

2

출력에서 숫자 자체는 그다지 유용하지 않습니다. 2가 나타내는 내용을 설명하는 좀 더 자세한 메시지를 출력에 인쇄되도록 하는 것이 더 유용할 수 있습니다.

문자열 템플릿

출력에 표시되는 더 유용한 메시지는 다음과 같습니다.

You have 2 unread messages.

아래 단계를 따라 프로그램에서 더 유용한 메시지를 출력하세요.

  1. 아래 코드를 사용하여 Kotlin 플레이그라운드에서 프로그램을 업데이트합니다. println() 호출의 경우 count 변수 이름이 포함된 문자열 리터럴을 전달합니다. 텍스트는 따옴표로 묶어야 합니다. 이렇게 해도 결과가 예상대로 표시되지는 않습니다. 이후 단계에서 문제를 해결합니다.
fun main() {
    val count: Int = 2
    println("You have count unread messages.")
}
  1. 프로그램을 실행하면 다음과 같이 출력됩니다.
You have count unread messages.

이 문장은 적절하지 않습니다. 메시지에 변수 이름이 아닌 count 변수의 값이 표시되어야 합니다.

  1. 프로그램을 수정하려면 다음과 같이 count 변수 앞에 $ 달러 기호를 추가합니다. "You have $count unread messages." 이 경우에는 $count라는 템플릿 표현식이 포함되어 있으므로 이는 문자열 템플릿입니다. 템플릿 표현식은 값을 평가한 후 문자열을 대체하는 표현식입니다. 이 경우 템플릿 표현식 $count2로 평가되고 2는 표현식이 있는 문자열을 대체합니다.
fun main() {
    val count: Int = 2
    println("You have $count unread messages.")
}
  1. 프로그램을 실행하면 출력이 원하는 대로 표시됩니다.
You have 2 unread messages.

이 문장은 사용자가 훨씬 더 이해하기 쉽습니다.

  1. 이제 count 변수의 초깃값을 다른 정수 리터럴로 변경합니다. 예를 들어 숫자 10을 선택할 수 있습니다. 프로그램의 나머지 코드 부분은 변경하지 않고 그대로 둡니다.
fun main() {
    val count: Int = 10
    println("You have $count unread messages.")
}
  1. 프로그램을 실행합니다. 출력이 적절하게 변경되며 프로그램에서 println() 문을 변경할 필요도 없습니다.
You have 10 unread messages.

문자열 템플릿이 얼마나 유용한지 확인할 수 있습니다. 코드에서 문자열 템플릿("You have $count unread messages.")을 한 번만 작성했습니다. count 변수의 초깃값을 변경해도 println() 문은 계속 작동합니다. 이제 코드가 더 유연해졌습니다.

이 점을 더 강조하기 위해 아래의 두 프로그램을 비교해 보세요. 아래의 첫 번째 프로그램은 문자열 리터럴을 사용하며 읽지 않은 메시지의 정확한 수가 문자열에 직접 표시됩니다. 이 프로그램은 사용자에게 읽지 않은 메시지가 10개 있을 때만 작동합니다.

fun main() {
    println("You have 10 unread messages.")
}

아래의 두 번째 프로그램에서는 변수와 문자열 템플릿을 사용하여 코드를 다양한 시나리오에 맞게 조정할 수 있습니다. 이 두 번째 프로그램이 더 유연합니다.

fun main() {
    val count: Int = 10
    println("You have $count unread messages.")
}

유형 추론

다음은 변수를 선언할 때 더 적은 코드를 작성할 수 있는 도움말입니다.

유형 추론은 Kotlin 컴파일러가 유형을 명시적으로 코드에 작성하지 않고도 변수가 어떤 데이터 유형이어야 하는지 추론하거나 결정할 수 있는 경우입니다. 즉, 변수의 초깃값을 제공하면 변수 선언에서 데이터 유형을 생략할 수 있습니다. Kotlin 컴파일러는 초깃값의 데이터 유형을 살펴보고 개발자가 이러한 유형의 데이터를 변수에 보관하길 바란다고 가정합니다.

다음은 유형 추론을 사용하는 변수 선언의 문법입니다.

이 다이어그램은 유형 추론을 사용하여 Kotlin에서 변수를 선언하는 문법을 보여줍니다. 변수 선언은 val이라는 단어로 시작하고 그 뒤에 공백이 옵니다. val 오른쪽에는 name이라는 라벨이 지정된 상자가 있습니다. name 상자의 오른쪽에는 공백, 등호, 또 하나의 공백이 있습니다. 오른쪽에는 initial value 라벨이 표시된 상자가 있습니다.

count 예시로 돌아가면 프로그램에 처음에는 다음 코드 줄이 포함되었습니다.

val count: Int = 2

하지만 이 코드 줄은 다음과 같이 작성할 수도 있습니다. 콜론 기호(:)와 Int 데이터 유형은 생략됩니다. 업데이트된 문법은 입력할 단어 수가 더 적지만 값 2가 있는 count라는 Int 변수를 만드는 동일한 결과를 얻습니다.

val count = 2

Kotlin 컴파일러는 개발자가 2(정수)를 count 변수에 저장하려는 것을 인식하므로 count 변수가 Int 유형이라고 추론할 수 있습니다. 간단합니다. 이는 Kotlin 코드를 더 간결하게 작성하는 방법을 보여주는 예입니다.

이 예시에서는 Int 유형의 변수만 설명하지만 유형 추론의 개념은 Kotlin의 모든 데이터 유형에 적용됩니다.

정수가 포함된 기본 수학 연산

값이 2Int 변수와 값이 "2"String 변수의 차이점은 무엇일까요? 둘 다 출력에 인쇄되면 똑같이 표시됩니다.

정수를 String이 아니라 Int로 저장할 때의 이점은 덧셈, 뺄셈, 나눗셈, 곱셈과 같은 수학 연산을 Int 변수로 실행할 수 있다는 점입니다(다른 연산자 참고). 예를 들어 두 정수 변수를 더하여 합계를 얻을 수 있습니다. 정수를 문자열로 저장하는 것이 적합한 경우도 분명 있지만 이 섹션의 목적은 Int 변수로 실행할 수 있는 작업을 보여주는 것입니다.

  1. Kotlin 플레이그라운드로 돌아가서 코드 편집기의 모든 코드를 삭제합니다.
  2. 받은편지함의 읽지 않은 이메일 수에 관한 정수 변수를 정의하고 5와 같은 값으로 초기화하는 새 프로그램을 만듭니다. 원하는 경우 다른 숫자를 선택할 수 있습니다. 받은편지함의 읽은 이메일 수에 관한 두 번째 정수 변수를 정의합니다. 100과 같은 값으로 초기화합니다. 원하는 경우 다른 숫자를 선택할 수 있습니다. 두 정수를 더하여 받은편지함의 총 메일 수를 출력합니다.
fun main() {
    val unreadCount = 5
    val readCount = 100
    println("You have ${unreadCount + readCount} total messages in your inbox.")
}
  1. 프로그램을 실행하면 받은편지함의 총 메일 수가 표시됩니다.
You have 105 total messages in your inbox.

문자열 템플릿의 경우 $ 기호를 단일 변수 이름 앞에 배치할 수 있다는 것을 알아봤습니다. 그러나 더 복잡한 표현식이 있는 경우 표현식을 중괄호로 묶고 $ 기호를 중괄호 앞에 배치해야 합니다(예: ${unreadCount + readCount}) 중괄호 내의 표현식 unreadCount + readCount105로 평가됩니다. 그러면 값 105가 문자열 리터럴 내에 대체됩니다.

이 다이어그램은 표현식과 그 옆의 값을 보여줍니다. 표현식 라벨이 있고 그 아래에 unreadCount + readCount라고 표시됩니다. 오른쪽에는 값 라벨이 있고 그 아래에 105가 표시됩니다.

  1. 이 주제를 더 자세히 알아보려면 이름과 초깃값이 다양한 변수를 만들고 템플릿 표현식을 사용하여 출력에 메시지를 인쇄합니다.

예를 들어 다음을 출력하도록 프로그램을 수정합니다.

100 photos
10 photos deleted
90 photos left

다음은 프로그램을 작성할 수 있는 한 가지 방법이지만 다른 방법으로도 올바르게 작성할 수 있습니다.

fun main() {
    val numberOfPhotos = 100
    val photosDeleted = 10
    println("$numberOfPhotos photos")
    println("$photosDeleted photos deleted")
    println("${numberOfPhotos - photosDeleted} photos left")
}

4. 변수 업데이트

앱이 실행 중일 때는 변수 값을 업데이트해야 할 수 있습니다. 예를 들어 쇼핑 앱에서는 사용자가 장바구니에 상품을 추가할 때마다 장바구니 합계가 증가합니다.

쇼핑 사용 사례를 간단한 프로그램으로 만들어 보겠습니다. 아래에는 Kotlin이 아닌 인간 언어로 로직이 작성되어 있습니다. 이를 의사코드라고 합니다. 코드 작성 방식의 요점을 설명하지만 코드의 모든 세부정보를 포함하지는 않기 때문입니다.

프로그램의 main 함수에서 다음을 실행합니다.

  • 0에서 시작하는 정수 cartTotal 변수를 만듭니다.
  • 사용자가 20달러짜리 스웨터를 장바구니에 추가합니다.
  • cartTotal 변수를 장바구니에 있는 상품의 현재 비용인 20으로 업데이트합니다.
  • 장바구니에 있는 상품의 총 비용(cartTotal 변수)을 출력에 인쇄합니다.

코드를 더 간소화하기 위해 사용자가 장바구니에 상품을 추가할 때 코드를 작성하지 않아도 됩니다. 프로그램이 사용자 입력에 응답하는 방법은 아직 학습하지 않았습니다. 이 내용은 이후 단원에서 제공됩니다. 따라서 cartTotal 변수를 만들고 업데이트하고 출력하는 부분에 집중하세요.

  1. Kotlin 플레이그라운드의 기존 코드를 아래 프로그램으로 바꿉니다. 프로그램의 2번째 줄에서 cartTotal 변수를 값 0으로 초기화합니다. 초깃값을 제공하므로 유형 추론으로 인해 Int 데이터 유형을 지정할 필요가 없습니다. 프로그램의 3번째 줄에서 할당 연산자(=)를 사용하여 cartTotal 변수를 20으로 업데이트하려고 합니다. 프로그램의 4번째 줄에서는 문자열 템플릿을 사용하여 cartTotal 변수를 출력합니다.
fun main() {
    val cartTotal = 0
    cartTotal = 20
    println("Total: $cartTotal")
}
  1. 프로그램을 실행하면 컴파일 오류가 발생합니다.
  2. 이 오류에는 val을 다시 할당할 수 없다고 표시됩니다. 오류는 cartTotal 변수 값을 20.으로 변경하려고 한 프로그램의 세 번째 줄에서 발생합니다. val cartTotal은 초깃값(0)이 할당된 후에 다른 값(20)으로 다시 할당할 수 없습니다.
Val cannot be reassigned

변수 값을 업데이트해야 한다면 val 대신 Kotlin 키워드 var로 변수를 선언합니다.

  • val 키워드: 변수 값이 변경되지 않을 것으로 예상하는 경우 사용합니다.
  • var 키워드: 변수 값이 변경될 수 있을 것으로 예상하는 경우 사용합니다.

val을 사용하면 변수가 읽기 전용입니다. 즉, 변수 값을 읽거나 이 값에 액세스할 수만 있습니다. 값이 설정되면 수정할 수 없습니다. var을 사용하면 변수가 변경 가능합니다. 즉, 값을 변경하거나 수정할 수 있습니다. 값이 변경될 수 있습니다.

이 차이점을 기억하려면 val을 고정 으로, var변수로 생각하면 됩니다. Kotlin에서는 가능한 경우 var 키워드 대신 val 키워드를 사용하는 것이 좋습니다.

  1. val 대신 var을 사용하도록 프로그램의 2번째 줄에서 cartTotal의 변수 선언을 업데이트합니다. 코드는 다음과 같습니다.
fun main() {
    var cartTotal = 0
    cartTotal = 20
    println("Total: $cartTotal")
}
  1. 변수를 업데이트하는 프로그램의 3번째 줄에서 코드 문법을 확인하세요.
cartTotal = 20

할당 연산자(=)를 사용하여 기존 변수(cartTotal)에 새 값(20)을 할당합니다. 변수가 이미 정의되어 있으므로 var 키워드를 다시 사용할 필요가 없습니다.

이 다이어그램은 cartTotal = 20이라는 코드 줄을 보여줍니다. 등호 오른쪽에 있는 20에서 등호 왼쪽에 있는 단어 cartTotal을 가리키는 화살표가 있습니다. 이는 값 20이 cartTotal 변수에 저장됨을 보여줍니다.

상자 비유를 사용하여 cartTotal 라벨이 지정된 상자에 값 20을 저장한다고 상상해 보세요.

cartTotal이라고 표시된 상자가 있습니다. 상자 밖에는 20이라는 라벨이 있습니다. 값에서 상자를 가리키는 화살표가 있습니다. 즉, 값이 상자 안으로 들어갑니다.

다음 다이어그램은 이전 코드 줄에서 이미 선언된 변수를 업데이트하는 일반적인 문법을 보여줍니다. 업데이트할 변수 이름으로 문을 시작합니다. 공백을 추가한 후 등호, 또 하나의 공백을 추가합니다. 그런 다음 업데이트된 변수 값을 작성합니다.

다음 다이어그램은 Kotlin에서 변수를 업데이트하는 문법을 보여줍니다. 코드 줄은 name으로 라벨이 지정된 상자로 시작합니다. name 상자의 오른쪽에는 공백, 등호, 또 하나의 공백이 있습니다. 그 오른쪽에는 'updated value' 라벨이 표시된 상자가 있습니다.

  1. 프로그램을 실행하면 코드가 성공적으로 컴파일됩니다. 다음과 같이 출력됩니다.
Total: 20
  1. 프로그램이 실행되는 동안 변수 값이 어떻게 변경되는지 보려면 변수를 처음 선언한 후 출력에 cartTotal 변수를 인쇄합니다. 아래에서 코드 변경사항을 확인하세요. 3번째 줄에 새 println() 문이 있습니다. 코드의 4번째 줄에 빈 줄도 추가되었습니다. 빈 줄은 컴파일러가 코드를 이해하는 방식에 영향을 미치지 않습니다. 빈 줄을 추가하면 관련 코드 블록을 구분하여 코드를 더 쉽게 읽을 수 있습니다.
fun main() {
    var cartTotal = 0
    println("Total: $cartTotal")

    cartTotal = 20
    println("Total: $cartTotal")
}
  1. 프로그램을 다시 실행하면 다음과 같이 출력됩니다.
Total: 0
Total: 20

처음에는 장바구니 합계가 0인 것을 확인할 수 있습니다. 그런 다음 20으로 업데이트됩니다. 변수가 업데이트되었습니다. 이는 cartTotal을 읽기 전용 변수(val 사용)에서 변경 가능한 변수(var 사용)로 변경해서 가능했습니다.

값이 변경될 것으로 예상되는 경우에만 var을 사용하여 변수를 선언해야 합니다. 그렇지 않은 경우에는 기본적으로 val을 사용하여 변수를 선언해야 합니다. 이렇게 하면 코드가 더 안전해집니다. val을 사용하면 예상하지 않는 경우 변수가 프로그램에서 업데이트되지 않습니다. val에 값이 할당되면 항상 이 값을 유지합니다.

증감 연산자

이제 값을 업데이트하려면 변수를 var로 선언해야 한다는 것을 알았습니다. 아래 익숙한 이메일 메시지 예시에 이 지식을 적용하세요.

  1. Kotlin 플레이그라운드에서 코드를 다음 프로그램으로 바꿉니다.
fun main() {
    val count: Int = 10
    println("You have $count unread messages.")
}
  1. 프로그램을 실행합니다. 다음과 같이 출력됩니다.
You have 10 unread messages.
  1. count 변수를 변경 가능한 변수로 만들려면 val 키워드를 var 키워드로 바꿉니다. 프로그램을 실행하면 출력에 아무 변화가 없습니다.
fun main() {
    var count: Int = 10
    println("You have $count unread messages.")
}
  1. 그러나 이제 count를 다른 값으로 업데이트할 수 있습니다. 예를 들어 사용자의 받은편지함에 새 이메일이 수신되면 count를 1씩 늘릴 수 있습니다. 이메일 수신에 관한 코드는 작성할 필요가 없습니다. 인터넷에서 데이터 가져오기는 이후 단원의 고급 주제입니다. 지금은 다음 코드 줄을 사용하여 1씩 증가하는 count 변수에 집중합니다.
count = count + 1

등호 오른쪽의 표현식은 count + 1이고 11로 평가됩니다. 이는 count의 현재 값이 10(프로그램의 두 번째 줄에 있음)이고 10 + 111과 같기 때문입니다. 그리고 할당 연산자를 사용하면 값 11count 변수에 할당되거나 저장됩니다.

이 다이어그램은 count = count + 1이라는 코드 줄을 보여줍니다. 표현식 count + 1 주위에 원이 표시됩니다. 등호 오른쪽의 원이 표시된 표현식에서 등호 왼쪽의 단어 count를 가리키는 화살표가 있습니다. 이는 count + 1 표현식의 값이 count 변수에 저장됨을 보여줍니다.

main() 함수 하단에서 이 코드 줄을 프로그램에 추가합니다. 코드는 다음과 같습니다.

fun main() {
    var count = 10
    println("You have $count unread messages.")
    count = count + 1
}

지금 프로그램을 실행하면 출력이 전과 같습니다. 업데이트한 후 count 변수를 사용할 코드를 추가하지 않았기 때문입니다.

  1. 변수가 업데이트된 후 읽지 않은 메시지 수를 출력하는 또 다른 print 문을 추가합니다.
fun main() {
    var count = 10
    println("You have $count unread messages.")
    count = count + 1
    println("You have $count unread messages.")
}
  1. 프로그램을 실행합니다. 두 번째 메시지에는 업데이트된 count11 메시지가 표시됩니다.
You have 10 unread messages.
You have 11 unread messages.
  1. 간단히 말해 1씩 변수를 늘리려면 더하기 기호 두 개로 구성된 증가 연산자(++)를 사용하면 됩니다. 변수 이름 바로 뒤에 이러한 기호를 사용하여 컴파일러에 개발자가 현재 변수 값에 1을 추가하고 새 값을 변수에 저장하려는 것을 알립니다. 다음 코드 두 줄은 동일하지만 ++ 증가 연산자를 사용하면 입력 작업이 줄어듭니다.
count = count + 1
count++

코드에 이 수정사항을 적용하고 프로그램을 실행합니다. 변수 이름과 증가 연산자 사이에는 공백이 없어야 합니다.

fun main() {
    var count = 10
    println("You have $count unread messages.")
    count++
    println("You have $count unread messages.")
}
  1. 프로그램을 실행합니다. 출력은 동일하지만 새 연산자를 알게 됐습니다.
You have 10 unread messages.
You have 11 unread messages.
  1. 이제 count 변수 이름 뒤에 감소 연산자(--)를 사용하도록 프로그램의 4번째 줄을 수정합니다. 감소 연산자는 빼기 기호 두 개로 구성됩니다. 감소 연산자를 변수 이름 뒤에 넣어 컴파일러에 개발자가 변수 값을 1씩 줄이고 새 값을 변수에 저장하려는 것을 알립니다.
fun main() {
    var count = 10
    println("You have $count unread messages.")
    count--
    println("You have $count unread messages.")
}
  1. 프로그램을 실행합니다. 다음과 같이 출력됩니다.
You have 10 unread messages.
You have 9 unread messages.

이 섹션에서는 증가 연산자(++)와 감소 연산자(--)를 사용하여 변경 가능한 변수를 업데이트하는 방법을 알아봤습니다. 더 구체적으로 count++count = count + 1과 같고 count--count = count - 1과 같습니다.

5. 다른 데이터 유형 살펴보기

이 Codelab 앞부분에서는 일반적인 기본 데이터 유형인 String, Int, Double, Boolean을 소개했습니다. 지금까지 Int 데이터 유형을 사용했습니다. 이제 다른 데이터 유형을 살펴보겠습니다.

Kotlin 데이터 유형

포함할 수 있는 데이터 종류

String

텍스트

Int

정수

Double

십진수

Boolean

true 또는 false(가능한 값이 두 개만 있음)

Kotlin 플레이그라운드에서 이러한 프로그램을 시도하여 어떻게 출력되는지 확인하세요.

Double

십진수 값이 있는 변수가 필요하면 Double 변수를 사용합니다. 유효한 범위에 관해 알아보려면 이 표를 참고하고 예를 들어 저장할 수 있는 소수점 이하 자릿수를 확인하세요.

목적지로 이동하고 있는데 가는 길에 멈춰야 해서 여행이 세 부분으로 나뉜다고 가정해 보겠습니다. 이 프로그램은 목적지에 도착하는 데 남은 총 거리를 표시합니다.

  1. Kotlin 플레이그라운드에서 다음 코드를 입력합니다. 각 코드 줄의 의미를 이해할 수 있나요?
fun main() {
    val trip1: Double = 3.20
    val trip2: Double = 4.10
    val trip3: Double = 1.72
    val totalTripLength: Double = 0.0
    println("$totalTripLength miles left to destination")
}

trip1, trip2, trip3라는 변수 세 개는 여행의 각 부분의 거리를 나타내도록 선언됩니다. 모두 십진수 값을 저장하므로 Double 변수입니다. val을 사용하여 각 변수를 선언합니다. 각 변수는 값이 프로그램 과정 중에 변경되지 않기 때문입니다. 프로그램은 현재 0.0으로 초기화되는 totalTripLength라는 네 번째 변수도 만듭니다. 프로그램의 마지막 줄은 totalTripLength 값을 사용하여 메시지를 출력합니다.

  1. totalTripLength 변수가 3가지 여행 거리의 합계가 되도록 코드를 수정합니다.
val totalTripLength: Double = trip1 + trip2 + trip3

등호 오른쪽의 표현식은 9.02로 평가됩니다. 3.20 + 4.10 + 1.729.02와 같기 때문입니다. 값 9.02totalTripLength 변수에 저장됩니다.

이 다이어그램은 val totalTripLength: Double = trip1 + trip2 + trip3라는 코드 줄을 보여줍니다. 표현식 trip1 + trip2 + trip3 주위에 원이 표시됩니다. 등호 오른쪽의 원이 표시된 표현식에서 등호 왼쪽의 단어 totalTripLength를 가리키는 화살표가 있습니다. 이는 trip1 + trip2 + trip3 표현식의 값이 totalTripLength 변수에 저장됨을 보여줍니다.

전체 프로그램은 다음 코드와 같이 표시됩니다.

fun main() {
    val trip1: Double = 3.20
    val trip2: Double = 4.10
    val trip3: Double = 1.72
    val totalTripLength: Double = trip1 + trip2 + trip3
    println("$totalTripLength miles left to destination")
}
  1. 프로그램을 실행합니다. 다음과 같이 출력됩니다.
9.02 miles left to destination
  1. 유형 추론으로 인해 변수 선언에서 불필요한 Double 데이터 유형을 삭제하도록 코드를 수정합니다. Kotlin 컴파일러는 초깃값으로 제공된 십진수를 기반으로 이러한 변수가 Double 데이터 유형이라고 추론할 수 있습니다.
fun main() {
    val trip1 = 3.20
    val trip2 = 4.10
    val trip3 = 1.72
    val totalTripLength = trip1 + trip2 + trip3
    println("$totalTripLength miles left to destination")
}
  1. 코드를 다시 실행하여 코드가 여전히 컴파일되는지 확인합니다. 출력된 내용은 같지만 코드가 이제 더 간단해졌습니다.

String

텍스트를 저장할 수 있는 변수가 필요한 경우 String 변수를 사용합니다. "Hello Kotlin"과 같이 문자열 리터럴 값은 따옴표로 묶지만 IntDouble 리터럴 값에는 따옴표가 없습니다.

  1. 이 프로그램을 복사하여 Kotlin 플레이그라운드에 붙여넣습니다.
fun main() {
    val nextMeeting = "Next meeting is:"
    val date = "January 1"
    val reminder = nextMeeting + date
    println(reminder)
}

String 변수 두 개(nextMeeting 변수와 date 변수)가 선언되어 있습니다. 그런 다음 reminder라는 세 번째 String 변수가 선언됩니다. 이 변수는 nextMeeting 변수와 date 변수를 합한 값과 동일하게 설정됩니다.

+ 기호를 사용하여 문자열 두 개를 함께 추가할 수 있습니다. 이를 연결이라고 합니다. 두 문자열은 차례로 결합됩니다. 표현식 nextMeeting + date의 결과는 아래 다이어그램과 같이 "Next meeting is:January 1"입니다.

이 다이어그램은 표현식 nextMeeting + date가 "Next meeting is:January 1"로 평가됨을 보여주기 위한 것입니다.  표현식 nextMeeting + date에는 원이 표시되고 표현식에서 "Next meeting is:January 1" 값을 가리키는 화살표가 있습니다. 화살표의 라벨은 'evaluates to'라는 문구로 지정됩니다.

그런 다음 "Next meeting is:January 1" 값은 프로그램의 4번째 줄에서 할당 연산자를 사용하여 reminder 변수에 저장됩니다.

  1. 프로그램을 실행합니다. 다음과 같이 출력됩니다.
Next meeting is:January 1

두 문자열을 연결하면 문자열 사이에 공백이 추가되지 않습니다. 결과 문자열에서 콜론 뒤에 공백을 추가하려면 한 문자열 또는 다른 문자열에 공백을 추가해야 합니다.

  1. 닫는 따옴표 앞 문자열 끝에 추가 공백이 있도록 nextMeeting 변수를 업데이트합니다. 또는 date 변수의 시작 부분에 공백을 추가할 수도 있습니다. 프로그램은 다음과 같이 표시됩니다.
fun main() {
    val nextMeeting = "Next meeting is: "
    val date = "January 1"
    val reminder = nextMeeting + date
    println(reminder)
}
  1. 프로그램을 다시 실행하면 출력 메시지의 콜론 뒤에 공백이 있습니다.
Next meeting is: January 1
  1. reminder 변수에 저장되는 표현식에 다른 텍스트를 연결하거나 추가하도록 코드를 수정합니다.

+ 기호를 사용하여 문자열 리터럴 "at work"reminder 문자열 끝에 추가합니다.

  1. 프로그램을 실행합니다.

다음과 같이 출력됩니다.

Next meeting is: January 1 at work

아래 코드는 동작을 구현할 수 있는 한 가지 방법을 보여줍니다.

fun main() {
    val nextMeeting = "Next meeting is: "
    val date = "January 1"
    val reminder = nextMeeting + date + " at work"
    println(reminder)
}

nextMeetingdate에는 따옴표가 없습니다. 기존 문자열 변수의 이름(각각의 값이 따옴표로 묶인 텍스트임)이기 때문입니다. 반대로 리터럴 "at work"는 이전에 변수에 정의되지 않았으므로 이 텍스트 주위에 따옴표를 사용하여 컴파일러가 이 문자열을 다른 문자열에 연결해야 하는 문자열임을 인식하도록 합니다.

엄밀히 말하면 별도의 변수를 사용하는 대신 단일 String 변수를 전체 텍스트로 선언하면 동일한 출력을 얻을 수 있습니다. 그러나 이 연습의 목적은 String 변수를 선언하고 조작하는 방법, 특히 별도의 문자열을 연결하는 방법을 설명하는 것입니다.

  1. 문자열이 포함된 코드를 읽을 때 이스케이프 시퀀스가 발생할 수 있습니다. 이스케이프 시퀀스는 백슬래시 기호(\)가 앞에 오는 문자이며, 이스케이프 백슬래시라고도 합니다.

아래 예와 같이 문자열 리터럴 내에 \"가 표시됩니다. 이 코드를 복사하여 Kotlin 플레이그라운드에 붙여넣습니다.

fun main() {
    println("Say \"hello\"")
}

앞서 문자열 리터럴에 큰따옴표를 사용하는 방법을 알아보았습니다. 하지만 문자열에 " 기호를 사용하려면 어떻게 해야 할까요? 이 기호를 사용하려면 문자열에서 큰따옴표 앞에 \"와 같이 백슬래시 기호를 추가해야 합니다. 이 경우에도 전체 문자열을 큰따옴표로 묶어야 합니다.

  1. 프로그램을 실행하여 출력을 확인합니다. 다음과 같이 표시됩니다.
Say "hello"

println() 문에서 hello 앞뒤에 \"를 추가했으므로 출력의 hello에 큰따옴표가 표시됩니다.

Kotlin에서 지원되는 다른 이스케이프 문자 시퀀스는 이스케이프 문자 시퀀스 문서 페이지를 참고하세요. 예를 들어, 문자열에 새 줄을 넣으려면 \n과 같이 문자 n 앞에 \ 기호를 사용합니다.

이제 문자열 연결과 문자열 내의 이스케이프 문자 시퀀스도 알아봤습니다. 이 Codelab에서 다루는 마지막 데이터 유형으로 이동합니다.

Boolean

Boolean 데이터 유형은 변수에 true 또는 false로 표현되는 값 두 개만 있을 때 유용합니다.

기기의 비행기 모드가 켜져 있는지 꺼져 있는지 또는 앱의 알림이 사용 설정되어 있는지 사용 중지되어 있는지 나타내는 변수를 예로 들 수 있습니다.

  1. Kotlin 플레이그라운드에서 다음 코드를 입력합니다. 이 프로그램의 2번째 줄에서 notificationsEnabled라는 Boolean 변수를 선언하고 true로 초기화합니다. 엄밀히 말하면 선언에서 : Boolean을 생략할 수 있으므로 원한다면 삭제해도 됩니다. 프로그램의 3번째 줄에서 notificationsEnabled 변수의 값을 출력합니다.
fun main() {
    val notificationsEnabled: Boolean = true
    println(notificationsEnabled)
}

프로그램을 실행하면 다음과 같이 출력됩니다.

true
  1. 프로그램의 2번째 줄에서 Boolean의 초깃값을 false로 변경합니다.
fun main() {
    val notificationsEnabled: Boolean = false
    println(notificationsEnabled)
}

프로그램을 실행하면 다음과 같이 출력됩니다.

false
  1. 다른 데이터 유형은 Strings에 연결할 수 있습니다. 예를 들어 BooleansStrings에 연결할 수 있습니다. + 기호를 사용하여 notificationsEnabled 부울 변수의 값을 "Are notifications enabled? " 문자열 끝에 연결(또는 추가)합니다.
fun main() {
    val notificationsEnabled: Boolean = false
    println("Are notifications enabled? " + notificationsEnabled)
}

프로그램을 실행하여 연결 결과를 확인합니다. 프로그램은 다음과 같이 출력됩니다.

Are notifications enabled? false

Boolean 변수를 true 또는 false 값으로 설정할 수 있음을 확인할 수 있습니다. Boolean 변수를 사용하면 Boolean 변수의 값이 true일 때 일부 명령을 실행하는 좀 더 흥미로운 시나리오를 코딩할 수 있습니다. 또는 Boolean 값이 false이면 이러한 명령을 건너뜁니다. 이후 Codelab에서 Booleans를 자세히 알아봅니다.

6. 코딩 규칙

이전 Codelab에서는 Google에서 권장하고 다른 전문 개발자들이 따르는 일관된 방식으로 Android 코드를 작성하는 Kotlin 스타일 가이드를 소개했습니다.

다음은 학습한 새 주제를 바탕으로 따라야 할 다른 형식 지정 및 코딩 규칙입니다.

  • 변수 이름은 카멜 표기법을 사용하고 소문자로 시작해야 합니다.
  • 변수 선언에서는 데이터 유형을 지정할 때 콜론 뒤에 공백이 있어야 합니다.

이 다이어그램은 val discount: Double = .20이라는 코드 줄을 보여줍니다. 콜론 기호와 Double 데이터 유형 사이의 공백을 가리키는 화살표가 있고 라벨은 space입니다.

  • 할당(=), 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/) 연산자 등과 같은 연산자 앞뒤에 공백이 있어야 합니다.

이 다이어그램은 var pet = "bird"라는 코드 줄을 보여줍니다. 등호 앞뒤의 공백을 가리키는 화살표가 있고 라벨은 space입니다.

이 다이어그램은 val sum = 1 + 2라는 코드 줄을 보여줍니다. 더하기 기호 앞뒤의 공백을 가리키는 화살표가 있고 라벨은 space입니다.

  • 좀 더 복잡한 프로그램을 작성할 때는 줄당 100자(영문 기준)로 제한하는 것이 좋습니다. 이렇게 하면 코드를 읽을 때 가로로 스크롤하지 않고도 프로그램의 모든 코드를 컴퓨터 화면에서 쉽게 읽을 수 있습니다.

7. 코드에 주석 달기

코딩할 때 코드의 의도를 설명하는 주석을 추가하는 것도 좋은 방법입니다. 주석을 통해 코드를 읽는 사람이 더 쉽게 코드를 파악할 수 있습니다. 슬래시 기호 두 개(//)는 줄의 나머지 부분에 있는 그 뒤의 텍스트가 주석으로 간주되므로 코드로 해석되지 않음을 나타냅니다. 일반적으로 슬래시 기호 두 개 뒤에 공백을 추가합니다.

// This is a comment.

주석은 코드 줄 중간에서 시작할 수도 있습니다. 이 예시에서 height = 1은 일반 코딩 문입니다. // 뒤에 오는 모든 내용(Assume the height is 1 to start with)은 주석으로 해석되며 코드의 일부로 간주되지 않습니다.

height = 1 // Assume the height is 1 to start with.

한 줄에 100자(영문 기준)를 초과하는 긴 주석으로 코드를 자세히 설명하려면 여러 줄 주석을 사용하세요. 슬래시(/)와 별표 기호(*)를 /*와 같이 사용하여 여러 줄 주석을 시작합니다. 주석의 각 새 줄의 시작 부분에 별표를 추가합니다. 그런 다음 별표와 슬래시 기호(*/)로 주석을 종료합니다.

/*
 * This is a very long comment that can
 * take up multiple lines.
 */

이 프로그램에는 코드를 설명하는 한 줄 및 여러 줄 주석이 포함되어 있습니다.

/**
 * This program displays the number of messages
 * in the user's inbox.
 */
fun main() {
    // Create a variable for the number of unread messages.
    var count = 10
    println("You have $count unread messages.")

    // Decrease the number of messages by 1.
    count--
    println("You have $count unread messages.")
}

앞서 언급했듯이 관련 문을 함께 그룹화하도록 코드에 빈 줄을 추가하면 코드를 더 쉽게 읽을 수 있습니다.

  1. 앞에서 사용한 코드 스니펫에 주석을 추가합니다.
  2. 프로그램을 실행하여 동작이 변경되지 않았는지 확인합니다. 주석은 출력에 영향을 주지 않아야 하기 때문입니다.

8. 결론

훌륭합니다. Kotlin의 변수와 프로그래밍에서 변수가 유용한 이유, 변수를 만들고 업데이트하고 사용하는 방법을 알아봤습니다. 데이터 유형 Int, Double, String, Boolean을 비롯한 Kotlin의 다양한 기본 데이터 유형을 사용해 봤습니다. val 키워드와 var 키워드의 차이점도 알아봤습니다.

이러한 모든 개념은 개발자가 되는 여정의 중요한 구성 요소입니다.

다음 Codelab에서 뵙겠습니다.

요약

  • 변수는 단일 데이터를 담는 컨테이너입니다.
  • 변수를 사용하려면 먼저 선언해야 합니다.
  • val 키워드는 할당된 값이 변경될 수 없는 읽기 전용 변수를 정의하는 데 사용합니다.
  • 변경 가능한 변수를 정의하려면 var 키워드를 사용합니다.
  • Kotlin에서는 가능하면 var보다 val을 사용하는 것이 좋습니다.
  • 변수를 선언하려면 val 또는 var 키워드로 시작합니다. 그런 다음 변수 이름, 데이터 유형, 초깃값을 지정합니다. val count: Int = 2를 예로 들 수 있습니다.
  • 유형 추론을 사용하면 초깃값이 제공된 경우 변수 선언에서 데이터 유형을 생략합니다.
  • 일반적인 기본 Kotlin 데이터 유형으로는 Int, String, Boolean, Float, Double이 있습니다.
  • 할당 연산자(=)를 사용하여 변수를 선언하거나 변수를 업데이트하는 동안 값을 변수에 할당합니다.
  • 변경 가능한 변수로 선언된 변수만 업데이트할 수 있습니다(var 사용).
  • 증가 연산자(++) 또는 감소 연산자(--)를 사용하여 각각 정수 변수 값을 1씩 늘리거나 줄입니다.
  • + 기호를 사용하여 문자열을 함께 연결합니다. IntBoolean과 같은 다른 데이터 유형의 변수를 Strings에 연결할 수도 있습니다.

자세히 알아보기