자료형
- 값의 형태
- 변수가 가질 수 있는 데이터의 종류
정수 (int, long)
- 1, 2, 3, 2147483647 같은 정수
- int는 - 2147483648부터 2147483647까지만 표현 가능.
- 해당 범위를 넘어간 값은 long(긴 정수)을 사용하면 됨
- int보다 범위가 작은 short도 있음
실수 (float, double)
- 1.0, 3.14 같은 실수
- float보다 double이 더 많은 메모리를 사용하고, 그만큼 정밀도도 높음
문자 (char, character의 약자)
- 'a', 'b', '가'과 같은 글자 하나. 유니코드라서 2바이트를 차지하고, 한글도 넣을 수 있음
- 작은 따옴표로 감싸놓음
문자열 (String)
- "a", "abc", "응애"와 같은 글자들. "a"의 경우 길이가 1인 문자열로, 'a'와는 다름
- 큰 따옴표로 감싸놓음
논리값 (boolean)
- 참과 거짓만 있는 값
- true, false
객체
- 나중에. 사실 String도 객체임
변수 (variable)
- 대충 이름에 값 저장하고 불러오기라고 생각해도 됨
- "어떠한 값을 저장할 수 있는 것" 그 자체
- 해당 값은 컴퓨터 부품 중 RAM에 저장. 즉, 무언가를 저장하기 위해 운영체제로부터 받아온 RAM에 있는 메모리 공간
- 이름에 수가 들어가서 값일 것 같지만, 값이 아님. 번역 개판으로 했다고 욕하는 사람들 있음
자바에서 변수 선언하기
//변수 선언만 하기
자료형 변수이름;
int a;
double b;
char c;
//변수에 값 넣기
변수이름 = 값;
a = 1;
b = 3.14;
c = 'a';
//변수 선언과 동시에 갆 넣기
자료형 변수이름 = 값;
int a = 1;
double b = 3.14;
char c = 'a';
코틀린에서 변수 선언하기
//변수 선언만 하기
var 변수이름: 자료형
var a: Int
var b: Double
var c: Char
//변수에 값 넣기
변수이름 = 값
a = 1
b = 3.14
c = 'a'
//변수 선언과 동시에 갆 넣기
var 변수이름: 자료형 = 값
var a: Int = 1
var b: Double = 3.14
var c: Char = 'c'
//선언과 동시에 값을 넣는 경우는 자료형을 생략해도 됨
//넣는 값을 보고 알아서 자료형 맞춰줌
var 변수이름 = 값
var a = 1
var b = 3.14
var c = 'c'
변수로 더하기 빼기 해보기
//자바
int a = 1;
int b = 2;
int c = a + b; //변수 c에는 3이 들어감. a에 저장된 값 1과 b에 저장된 값 2를 더해서 c에 넣었기 때문int a = 1;
//코틀린
var a = 1
var b = 2
var c = a + b //변수 c에는 3이 들어감. a에 저장된 값 1과 b에 저장된 값 2를 더해서 c에 넣었기 때문
그래서 변수를 어디다가 씀?
- 실제로 프로그래밍을 해보면 아주 많이 사용할 것
상수 (constant)
- 변하지 않는 값. 또는 그 값 그 자체
리터럴 상수
- 1, 2, 3.14, "응애"와 같은 값 그 자체
- 1은 항상 1이고, 2는 항상 2이며, 3.14는 항상 3.14고 "응애"라는 글자는 항상 응애임
- 값 그 자체는 변하지 않기 때문에 상수
심볼릭 상수
- 이름이 있는 상수
- 변수 선언과 동시에 값을 넣을 때, 다른 값으로 바뀌지 않도록 고정하는 방식
자바에서 상수 선언
- 자료형 앞에 final 붙이기
int a = 10;
a = 20; //a에 저장된 값을 20으로 변경
final int a = 10;
a = 20; //상수는 값을 바꿀 수 없으니, 오류 발생
코틀린에서 상수 선언
- var 대신 val 사용하기
- var은 variable의 약자, val은 value의 약자
- 안드로이드 스튜디오에서 코틀린으로 앱 개발을 하는 경우, var를 사용하고 값을 바꾸지 않는다면 val로 바꾸는게 어떻냐는 제안 메시지가 나옴
var a = 10;
a = 20; //a에 저장된 값을 20으로 변경
val a = 10;
a = 20; //상수는 값을 바꿀 수 없으니, 오류 발생
변수 & 상수 선언시 암묵의 룰
변수의 이름은 주로 소문자로, 상수의 이름은 전부 대문자만 사용하는 암묵의 룰이 있음
//변수 : 전부 소믄자 사용, 여러 단어가 있으면 _로 구분하거나 첫 글자를 대문자로 선언
int speed = 50;
int current_speed = 50; //주로 C언어나 파이썬에서 쓰는 방식
int currentSpeed = 50; //주로 자바에서 쓰는 방식
//상수 : 전부 대문자 사용, 여러 단어가 있으면 _로 구분
final int MAX_SPEED = 100;
코틀린에서, 원래 변수를 사용했어야 할 위치에 val을 적은 듯한 느낌인 경우는, 그냥 변수 선언하는 암묵의 룰을 따름
배열 (Array)
- 이름 하나에 값 여러개를 저장하는 경우에 사용
- 넣은 값들은 순서(index)로 구분. index는 0부터 시작
- 언제가에는 사용할 일이 올 것
- 한 번 선언하면 길이가 고정됨.
//int만 담을 수 있는 길이가 3인 배열 a
int[] a = { 1, 2, 3 };
리스트 (List)
- 배열 비슷한 거 있음
- 배열과는 달리, 길이가 알아서 늘어남
제어문
- 프로그램의 실행 순서와 흐름을 제어
- 뭐가 많지만, 사실상 if, for, while를 사용하는 경우가 99%
조건문 : if
- 조건이 참이면 실행. 아니면 else 부분 실행. else가 꼭 올 필요는 없음
if (조건) {
//조건이 참이면 실행햘 내용
} else {
//조건이 거짓이면 실행햘 내용
}
int a = 10;
if (a == 10) { //같은지 아닌지 구분은 "=" 2개 사용
//a에 저장된 값이 10이라면 실행될 내용
} else {
//a에 저장된 값이 10이 아니라면 실행될 내용
}
조건문 : switch
- 값 하나를 여러번 비교하는 경우에 사용. 주로 메뉴 구성애 사용되며, 초심자는 일단 if만 사용해도 됨
- 자바와 같은 대부분의 언어에는 switch문이 있고, 코틀린에는 switch문 대신 when문이 있음. 기능은 동일
- 자바 switch 예시
예시) 메뉴 id에 따라 다른 메뉴를 열어야 하는 경우,
//if-else 사용
if (menuId == 1) {
//1번 메뉴 열기
} else if (menuId == 2) {
//2번 메뉴 열기
} else if (menuId == 3) {
//3번 메뉴 열기
} else {
//잘못된 메뉴입니다
}
//switch 사용
switch (menuId) {
case 1:
//1번 메뉴 열기
break;
case 2:
//1번 메뉴 열기
break;
case 3:
//1번 메뉴 열기
break;
default:
//잘못된 메뉴입니다.
}
- 코틀린 when 예시. 코틀린의 장점인 간결함을 볼 수 있다.
예시) 메뉴 id에 따라 다른 메뉴를 열어야 하는 경우,
//if-else 사용
if (menuId == 1) {
//1번 메뉴 열기
} else if (menuId == 2) {
//2번 메뉴 열기
} else if (menuId == 3) {
//3번 메뉴 열기
} else {
//잘못된 메뉴입니다
}
//when 사용
when (menuId) {
1 -> //1번 메뉴 열기
2 -> //2번 메뉴 열기
3 -> //3번 메뉴 열기
else -> //잘못된 메뉴입니다
}
반복문 : while
- 조건이 참이면 계속 실행
- 언젠가에는 거짓이 될 조건과 함께 사용
while (조건) {
//반복할 내용
}
//예시 : 1부터 100까지 더하기
int sum = 0; //합이 저장될 변수
int i = 1; //1씩 증가할 변수
while (i <= 100) { //i가 100 이하면
sum = sum + i; //sum에다가 i 더하기
i = i + 1; //i에 있는 값 1 증가
}
//반복이 끝나면 sum에는 5050이 저장된 상태
//위와 동일하게 작동하는 소스
int sum = 0, i = 1; //변수의 자료형이 같으면 한 번에 선언 가능
while (i <= 100) { //i가 100 이하면
sum += i; //+=로 값 증가 가능
i++; //++로 값 1 증가 가능
}
//반복이 끝나면 sum에는 5050이 저장된 상태
//이런식으로 아예 대놓고 조건에 true를 넣어버리면 항상 참이라서 무한반복이 됨
while (true) {
//무한반복
}
반복문 : do~white
- 일단 실행 먼저 해보고 조건 확인. 이거 사용하는거 싫어하는 사람이 있음
- 사용 예시) 사용자로부터 값을 입력받고, 올바르지 않은 값이 입력되었다면 다시 입력을 요청하는 프로그램
do {
//일단 실행할 내용
} while(조건);
//예시 : 10 미만인 수만 입력받아야 하는 경우
int input;
do {
input = (사용자로부터 값 입력);
} while(input < 10);
반복문 : for
- "N회 반복"을 할 일이 아주 많아져서 생겨난 제어문
- 예시) 배열에 있는 모든 값 확인해보기. i에 0을 넣고, 1씩 증가시키면서 계속 반복하면 됨
- 자바 예시
for (초기화; 조건; 증감) {
//실행할 내용
}
//예시) 10회 반복
int i;
for (i = 0; i < 10; i++) {
//무언가
}
/*
일단 i에 0이 들어감
0은 10보다 작으니 무언가 실행
i에 저장된 값 1 증가
1은 10보다 작으니 무언가 실행
i에 저장된 값 1 증가
2은 10보다 작으니 무언가 실행
i에 저장된 값 1 증가
.
.
.
9은 10보다 작으니 무언가 실행
i에 저장된 값 1 증가
10은 10보다 작지 않으니 반복 종료
*/
//for 안에서 변수 선언해도 됨. 이 경우, 변수 i는 for 안에서만 존재
for (int i = 0; i < 10; i++) {
//무언가
}
//예시) 1부터 100까지 더하기
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
반복이 끝나면 sum에는 5050이 저장된 상태
- 코틀린 예시
for (변수 in 범위) {
//실행할 내용
}
//예시) 10회 반복
for (i: Int in 1..10) {
//무언가
}
/*
일단 i에 1이 들어감
1은 10 이하니까 무언가 실행
i에 저장된 값 1 증가
2은 10 이하니까 무언가 실행
i에 저장된 값 1 증가
3은 10 이하니까 무언가 실행
i에 저장된 값 1 증가
.
.
.
10은 10 이하니까 무언가 실행
i에 저장된 값 1 증가
11은 10 이하가 아니니 반복 종료
*/
//예시) 1부터 100까지 더하기
var sum = 0;
for (i: Int in 1..100) {
sum += i;
}
//반복이 끝나면 sum에는 5050이 저장된 상태
//위와 동일하게 작동하는 소스
var sum = 0;
for (i: Int in 1 until 100) {
sum += i;
}
break, continue
- break : 실행 중인 반복문을 멈춤
- continue : 현재 반복 회차를 중단하고 다음 회차로 넘어감
연산자
- ,과 new 등도 연산자이지만, 귀찮으니 생략
| = |
오른쪽에 있는 값을 왼쪽에 넣음 |
| + |
더하기, 문자열이라면 붙이기 |
| - |
빼기 |
| * |
곱하기 |
| / |
나누기 |
| % |
나머지 구하기 |
| ++ |
1 증가 |
| -- |
1 감소 |
| += |
왼쪽에 있는 값을 오른쪽에 있는 값만큼 증가시킴. 문자열이라면 뒤에 붙이기 |
| -= |
왼쪽에 있는 값을 오른쪽에 있는 값만큼 감소시킴 |
| *= |
왼쪽에 있는 값에 오른쪽에 있는 값을 곱한 값을 왼쪽에 넣음 |
| /= |
왼쪽에 있는 값을 오른쪽에 있으로 나눈 값을 왼쪽에 넣음 |
| == |
양쪽에 있는 것이 서로 같으면 참, 다르면 거짓 |
| != |
양쪽에 있는 것이 서로 다르면 참, 같으면 거짓 |
| ! |
부정 |
| < |
좌변이 우변 미만 |
| > |
좌변이 우변 초과 |
| <= |
좌변이 우변 이하 |
| >= |
좌변이 우변 이상 |
| && |
그리고 |
| || |
또는 |