CODING/강의노트-부스트코스-코틀린

[부스트코스]📱코틀린 2-1 기본 자료형과 변수 선언방법 (1) 불변형, 기본형

codingTrip 2021. 1. 19. 20:08

안녕하세요? codingTrip입니다.

오늘은 "코틀린 프로그래밍  1/2(함수편)"

1단원 코틀린의 기본을 익혀요!

2장. 변수와 자료형, 연산자

2-1 기본 자료형과 변수 선언방법 (1) 불변형, 기본형

시작하겠습니다!

 

📚 자료형과 변수

▷ 자료형 : 우리가 다루고자 하는 데이터의 어떤 형식을 가지고 있는가를 나타냅니다.
Int는 정수이며, 1,2,3같이 숫자로 나열된 것입니다.
String는 문자열이며, "" 안에 있는 "Hello123"같이 문자로 나열된 것입니다.

(주의) 이 " " 안에 숫자를 쓰더라도 정수가 아닌 문자열이며, 일종의 배열입니다.
Float 실수형이며, 1.2와 같이 소숫점 이하의 숫자를 가지는 숫자입니다. 이외에는 double 등이 있습니다.

▷ 변수 : 데이터를 자료형에 따라서 선언을 해야 합니다.
변수를 선언하는 방법은 2가지가 있습니다.
① 불변형(immutable)은 일단 선언을 하고, 값을 초기화하면 더 이상 값을 바꿀 수 없는 변수가 됩니다.

val을 사용하며 val은 value의 약자입니다.
가변형(mutable)나중에 초기값을 바꿀 수 있습니다.

var을 사용하며 var은 variable의 약자입니다.

 

📢 변수의 선언

val username: String = "Kildong"

①      ②      ③  ④  ⑤  ⑥

변수의 선언 형식은 위와 같습니다. 이제 찬찬히 알아보겠습니다.

선언키워드 : val, var을 사용해서 선언합니다.
② 변수이름 : 이곳에 필요한 변수이름을 넣어줍니다. 맨앞은 무조건 소문자를 사용합니다.
: 콜론을 사용하고, 한 칸을 띄웁니다.  
위에서 배운 자료형식을 정해줍니다. (Int, String, Float, Double 등)
대입연산자 =을 써줍니다.  
초기값을 반드시 넣어줘야 합니다. val은 초기값 설정 이후에는 값을 변경 불가합니다.

 

💻 실습

이제 실습을 통해 자세하게 알아보겠습니다. 

먼저 datatype라는 이름으로 project를 새로 만듭니다.

This Window를 클릭하면 새로운 프로젝트를 현재 창에 만들 수 있습니다.

 

이제 새로운 코틀린 파일을 생성해야겠죠?

src 폴더 위에서 Alt+Insert새 파일을 생성합니다. 
datatype라고 입력한 뒤 enter를 눌러 파일을 만듭니다.

fun main(){ 
  val username: String = "Kildong" 
  println("username: ${username}") 
} 

위와 같이 코드를 입력합니다.
문자열 내에 변수나 식을 ${변수 혹은 식}와 같이 사용할 수 있어요! 
변수 이름이 하나인 경우에는 {} 중괄호를 생략해도 가능하다고 하시네요. (그것 참 편하네요.)

Shift+Alt+F10를 눌러 실행 설정 생성 및 실행을 합니다. 처음으로 실행할 때 쓰던 단축키였죠? 
2번째 DatatypeKt를 선택합니다.

그러면 위와 같이 출력되는 것을 확인하실 수 있습니다.

 

위에서 배운 개념들을 확인해볼까요?

fun main() { 
  val username: String = "Kildong" 
  username = "Dooly"
  println("username: $username")
} 

val username: String = "Kildong" 

username = "Dooly" 이렇게 초기값을 바꿀 수 있을까요?

안되죠. val은 불변형 변수 선언 키워드이므로 username은 불변형입니다. 

따라서 var로 바꿔줘야 한답니다.

fun main(){ 
  var username: String = "Kildong" 
  var count: Int = 3 
  username="Dooly" 
  println("username: $username, count: $count") 
} 

사실 "Kildong"3처럼 어떤 값인지 금방 알 수 있는 타입

즉, 컴파일러가 데이터타입을 추론할 수 있는 타입은

컴파일러가 값에 따라 데이터형을 추론해 선언됩니다.

val username = "Kildong" 

var count =3 

따라서 이런 경우에는 자료형을 생략해도 괜찮습니다.

자료형을 생략한 경우에 추론 타입 확인Ctrl+Shift+p으로 확인할 수 있습니다.
빠른실행 단축키는 Shift+F10인거 기억 나시죠? 처음 실행Shift+Alt+F10, 다음부터는 Shift+F10!

 

💡 변수 선언

▷ 변수 선언 예

val username = "Kildong" // 자료형을 추론하여 String으로 결정
var username // 자료형을 지정하지 않은 변수는 사용할 수 없다.
val init: Int // 사용전 혹은 생성자 시점에서 init변수를 초기화 해야함
val number=10 // number변수는 Int형으로 추론

첫 번째의 경우에는 자료형이 생략되었죠?

그렇지만 컴파일러가 "Kildong"을 보고 String이라는 것을 추론해서 String으로 결정해서 괜찮답니다.

두 번째의 경우에는 사용할 수 없는 경우에요. 값이 없으면 컴파일러가 추론조차 못하겠죠?

세 번째의 경우에도 사용할 수 없는 경우에요. 초기값을 생성해서 초기화를 해줘야 해요.

네 번째의 경우에는 자료형이 생략되었지만 10을 보고 Int형으로 추론해서 괜찮답니다.

 

fun main(){ 
  var username: String = "Kildong" 
  var username2 //초기화를 하거나 데이터형을 넣어줘야 합니다. 
  username = "Test" 
  var count: Int = 3 
  username = "Dooly" 
  println("username: $username, count: $count") 
} 

var username2 이렇게 하면 안돼요. 초기화를 하거나 데이터형을 넣어줘야 한답니다.

- 변수 이름은 123abc와 같이 숫자로 시작하면 안됩니다.
- 변수 이름에는 while, if 와 같이 코틀린에서 사용하는 키워드는 사용할 수 없습니다. 
- 변수 이름은 의미 있는 단어를 사용하여 만드는 것이 좋습니다.
- 여러 단어를 사용하여 변수 이름을 지을 경우 카멜 표기법(Camel Expression)을 사용하세요.

변수 이름은 숫자로 시작할 수 없어요. 아마 다른 언어들도 거의 그럴거에요.

그리고 변수 이름은 for, if, while처럼 이미 사용하는 키워드는 사용하면 안돼요.

이것을 예약어라고 하는데요. 사용불가인 이유는 해당 키워드를 변수이름으로 사용하면 오류가 나요.

변수 이름은 형식만 지키면 아무렇게나 작성할 수 있어요. abcd, apple, mouse, moon... 정말 아무렇게나요.

하지만 의미 있는 단어를 사용해서 만들어야 나중에 그 변수가 무슨 값을 의미하는지 빨리 알아낼 수 있어서 편리해요.

예를들어, 사과의 가격에 대해 변수를 만든다고 해봐요.

var abcd: Int = 10000 보다는

var applePrice: Int= 10000 이렇게 변수이름을 정하는 것이 더 알아보기 쉽겠죠?

applePrice? codingTrip은 왜 이렇게 썼지? 이게 바로 카멜 표기법이에요.

자세한 내용은 아래에서 더 설명할게요.

💡 변수 선언

▷ 일반 변수, 함수명 등(단봉 낙타와 같은 카멜 표기법)
camelCase
numberOfBooks
myFirstNumber

위의 예시를 보니 감이 오시나요? 이렇게 일반 변수의 이름이나 함수명 등은 

혹이 하나 달린 낙타처럼 연결되는 단어 첫 글자를 대문자로 표기해요.

의무는 아니지만 확실히 이렇게 하면 띄어쓰기를 안해도 잘 보이지 않나요?

 클래스, 인터페이스 등(쌍봉 낙타 혹은 파스칼 표기법)
AnimalCategory
CarEngine

클래스, 인터페이스의 이름을 짓는 경우에는 혹이 2개 달린 낙타처럼 맨 처음 글자도 대문자로 해요.

확실히 이렇게 하면 단어가 길어진다고 해도 보기 쉽죠?
이름은 누구나 읽고 쉽게 만들어주어야하므로
프로그래밍의 가장 중요한 포인트✨라고 하셨답니다.

💾 자료형 알아보기

 기본형(Primitive date type)

- 가공되지 않은 순수한 자료형으로 프로그래밍 언어에 내장
- int, long, float, double 등

사실 이 기본형은 코틀린에서는 사용하지 않지만 자바에서는 사용한답니다.
순수한 자료형은 직접 입력할 수 있는 형태라는 뜻이에요.

 참조형(Reference type)

- 동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형
- Int, Long, Float, Double 등 

코틀린에서는 바로 이 참조형을 사용한답니다.
참조형으로 만들어진 데이터 형식은 특정 객체가 되어서 동적 공간에 메모리에 위치합니다. 
특정 객체의 특정 주소를 참조해서 가는 것입니다.
성능으로 보면, 직접 데이터를 다루기 때문에 기본형의 성능이 훨씬 좋습니다.
참조형처럼 어디를 갔다가 다시 어디를 가서 데이터를 쓰는게 아니기 때문입니다.

다만, 기본형을 쓸 때는 막 쓰면 복잡해집니다. 


따라서 코틀린은 성능을 증가하기 위해서 참조형을 사용하고,
컴파일 과정을 통해서 기본형으로 코틀린이 알아서 바꿔준답니다.


기본형과 참조형의 동작원리 이해하기

int a =77; // 기본형
Person person = new Persion(); // 객체 참조형으로 person객체를 위해 참조주소를 가진다.

두 번째의 경우에는 객체의 참조 주소가 있습니다.

주소를 통해서 먼저 해당 저장공간에 간 다음에 그 내부에 있는 값을 찾아야 합니다.

Heap는 프로그램이 실행될 때 사용되는 동적공간입니다.
필요할 때 나타나고, 필요 없을때 사라집니다.

Stack은 임시 저장소이며, 특정 {} 중괄호 안에 있는 변수일 경우
Stack에서 바로 접근합니다. 

코틀린은 참조형을 사용하며, 기본형으로 직접 사용하지 않지만
val a: Int = 77
실제로는 내부의 컴파일 과정을 거쳐서 코틀린에서 기본형으로 사용합니다.

 

 

자, 오늘도 마무리하는 시간이 왔네요.

선생님께서 직접 실습으로 보여주시면서 설명하시고,

마지막에 pdf 자료로 개념을 다시 정리해주셔서 좋았답니다. 


그리고 자바의 개념(기본형)도 같이 다뤄주셔서 좋았어요.

안드로이드 앱개발을 처음 배우는 사람들은

코틀린만 배워도 된다고 하셨지만

그래도 자바의 특징도 조금씩 알아두면

나중에 자바로 된 프로그램을 봐도 크게 당황하지 않을 것 같아요.

 

변수 선언 방법,기본형, 참조형, 카멜표기법...

처음 보는 표현들이라 당황하신 분 계시나요?

저도 코틀린은 처음이라 지금은 많이 생소하지만

언젠가는 눈감고도 할 수 있을만큼 익숙해지는 날이 오길 바라요.

그냥 이번 시간에는 이렇게 하는구나... 하고 넘어가자고요.

 

그럼 다음 시간에 만나요 ㅎㅅㅎ