자료형

 - 값의 형태

 - 변수가 가질 수 있는 데이터의 종류

 

정수 (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 감소
+= 왼쪽에 있는 값을 오른쪽에 있는 값만큼 증가시킴. 문자열이라면 뒤에 붙이기
-= 왼쪽에 있는 값을 오른쪽에 있는 값만큼 감소시킴
*= 왼쪽에 있는 값에 오른쪽에 있는 값을 곱한 값을 왼쪽에 넣음
/= 왼쪽에 있는 값을 오른쪽에 있으로 나눈 값을 왼쪽에 넣음
== 양쪽에 있는 것이 서로 같으면 참, 다르면 거짓
!= 양쪽에 있는 것이 서로 다르면 참, 같으면 거짓
! 부정
< 좌변이 우변 미만
> 좌변이 우변 초과
<= 좌변이 우변 이하
>= 좌변이 우변 이상
&& 그리고
|| 또는

 

+ Recent posts