오늘은 드디어 코틀린을 배우는 날이다.
그런데, 코틀린을 하려면 필수적안드로이드 스튜디오가 설치가 안된다! 몆번이나 다시해보고, 재부팅도 했지만 안되서 문의해보고, 검색도 해본 결과, 내 사용자 이름이 한글이라서 그랬다는 결론이 나왔다.
그래서 가장 먼저, 윈도우 계정을 새로 만들어 봤다. 실패.
그 다음엔 제어판으로 가서 사용자 이름을 바꿔봤다. 실패!
그 다음엔 컴퓨터 안에서 새 계정을 만들어 봤다. 처음엔 된줄 알았지만, 이것도 실패!!
실패의 원인은 뭔짓을 해도 폴더의 이름이 한글 이름에서 변경되지 않아서 였고, 그래서 폴더 이름을 변경하는법을 검색해서 cmd에 레지스터에 이것저것 건드리고 바꾸고, 관리자 계정을 다시 형성해서 그 계정에서 다시 cmd로 폴더 이름을 바꾸는 명령어를 입력했는데 안되서 알아본 결과, 그 계정 외의 다른 계정을 로그아웃 해야 된다고 해서 로그아웃을 하려 했는데, 그러면 다시 그 계정으로 로그인을 해야하는데, 왠지 비번을 입력해도 틀렸다면서 로그인이 전혀 되지 않아서 어떻게 해결해야 하는지 또 검색하다가, 비밀번호를 다시 변경하고 로그 아웃을 하고.....
관리자 계정인데도 관리자 권한이 없다고 나와서 다시 권한을 주고......
모든 난관을 뚫었을땐 이미 점심시간이 다가와있었다...
그리고 드디어 다운로드를 시작하자, 너무 오래걸려서 기다릴 수밖에 없었다. 그러다 드디어 다운로드가 완료되어 공부를 할수있게 되었다!!! 이것이 인간승리지!!
코드를 작성했는데 마음에 안들어서 지울거라면 Control + Y를 누르면 그 줄 전체가 지워진다.
하지만 만약을 위해 남겨놓거나, 설명을 쓸 생각이라면 앞에 //를 남기면 주석으로 처리가 된다. 간단하게 control /로도 된다.
esc는 포커싱 기능으로, 왼쪽의 목록을 누르면 커서가 사라지는데, 이때 esc를 누르면 다시 커서로 돌아간다. 즉 , 다른 작업을 하다 본래의 작업으로 돌아오는데 쓸수있다!
그리고 굉장히 유용한것으로, 컨트롤 f로 단어를 찿듯이, control shift f 를 누르면 뜨는 창에 찾고 싶은걸 입력하면 바로 찾을수있다!
그 외에도 여러가지 단축키들을 배웠다.
카멜 표기법
seoulFood처럼 앞은 소문자 뒤는 대문자. 이건 변수, 메소드의 이름 표기법. 이걸 주로 사용
스네이크케이스 표기법
seoul_food처럼 전부 소문자에 중간에 _ 이건 상수의 이름
파스칼 케이스 표기법
SeoulFood 처럼 앞뒤 대문자. 클래스 이름 표기할 때 사용
fun maim(){
val dataString = readLine()
println("나는 ${dataString }를 입력했어요!")
}
이러면 밑에 데이터베이스가 형성되서 밑의 화면에 뭘 입력하면
println의 형식으로 출력됨 dataString에서 String인 이유는 문자열이라서. 문자 아니면 딴걸로 바꿈
예시) kotlin리라고 치면 나는 kotlin를 입력했어요! 라고 뜸
val dataNumber = readLine()!!.toInt()
val sum = dataNumber + 3
println("입력은 ${dataNumber}인데 3을 더해서 ${sum }이예요!")
readLine()!!.toInt()의 뜻은 이건 문자가 아니라 숫자로 인식해! 라는 뜻.
Int가 바로 숫자에 쓰임
크기 |
특징 | |
Long | 64비트 | 정수 |
Int | 32비트 | 정수 |
Short | 16비트 | 정수 |
Byte | 8비트 | 정수 |
Double | 64비트 | 실수(소수) |
Float | 32비트 | 실수(소수) |
Char | 16비트 | 하나의 문자 |
Boolean | 8비트 | 논리(참 또는 거짓) |
String | X | 문자열 |
영어는 한글자면 boolean도 되지만 한글은 커서 char필요
이런걸 쓰는 이유는 32비트를 64로 쓰는건 낭비여서
변수와 상수
변수는 변하는거. var
var num1 = 1
println("내 첫변수 num1 변수에는 ${num1}이 들어있어")
num1 = 5
println("변경한 변수 num1 변수에는 ${num1}이 들어있어")
var num은 1이지만 num을 5라고 했기에 5로 변함
var one1 = '김'
println("내 첫변수 one1 변수에는 ${one1}이 들어있어")
one1 = '나' // one1변수에 들어있던 '김' 대신에 '나'를 대입
println("변경한 변수 one1 변수에는 ${one1}가 들어있어")
이것도 똑같이 김이 나 로변함
val은 상수. 절대 안변함
fun main() {
val num1 = 1
println("내 첫변수 num1 변수에는 ${num1}이 들어있어")
// Val cannot be reassigned 에러 발생!!
// num1은 var이 아니라 val이기때문에 들어있는 값을 변경하지 못함
num1 = 5
println("변경한 변수 num1 변수에는 ${num1}이 들어있어")
}
이건 실행이 안됨. val은 변하지 않는데, 5로 변화시키려 했기 때문.
곱하기는 *, 나누기는/ 나누고 난 나머지는 %
예시로 들자면,
var num1 = 30
var num2 = 10
일때
var multipleResult = num1 * num2
println("num1 * num2는 ${multipleResult}이야")
하면 300
var divideResult = num1 / num2
println("num1 / num2는 ${divideResult}이야")
혀면 3
// num2를 10에서 7로 변경
num2 = 7
// 나머지 연산자(%)사용해서 num1에서 num2를 나눈 나머지를 modResult에 대입함
var modResult = num1 % num2
println("num1 % num2는 정수로 ${modResult}야")
이러면 30을 7로 나누게되니 그냥/면 4겟지만, 30-28하고 남은 2가 됨
참고로, = 이건 오른쪽을 왼쪽에 집어넣는다는 뜻이다.
아까처럼 1은 30, 2는 10일때1과 2를 안더하고 40을 만드려면,
num1 = num1 + 10
println("산술, 대입 따로 적용한 결과 ${num1}")
이건 넘버1은 30+10 이라는게 되서 40이다. = 오른쪽이 30+10으로 40이 되기에 이렇게 되는 것이다.
num2 += 10
println("산술, 대입 따로 적용한 결과 ${num2}")
이러면 =의 오른쪽의 값인 10에 넘버2의 10을 더 더한 판정이 나와서 20이 된다.
만약 그 밑에 이걸 한다면?
num2 *= 10
println("산술, 대입 따로 적용한 결과 ${num2}")
그려면 200이 된다. 왜냐면 앞에서 num2 가 10+10으로 20으로 만들었기 때문에, 20*10이 된것이다.
그래서 위의 +=쪽을 지우면 10*10니 되서 100이 된다.
그리고 다시 30, 10으로 초기화 하고
num1 = num1 + 1, num1 += 1, num1++ 전부 1 추가. 근데 이것들을 전부 추가하면, 31, 32, 33으로 커짐. 앞이랑 똑같은 이유로 num1의 값 자체가 변해서 그런것.
반대로 -를 하려변,
num2 = num2 - 1, num2 -= 1, num2-- 전부 1씩 감소로, 9 8 7 이러고 작아짐.
전위연산자와 후위연산자.
전위연산자는 ++a고 후위연산자는 a++.
전위는 println 실행전에 더하고, 후위는 나온 뒤에 더한다.
예시를 보자면,
var num1 = 10
var num2 = 20
var num3 = 30
// 후위연산자는 println연산을 실행후에 증감해요
println(num1++)
println(num1)
// 전위연산자는 println연산 실행전에 증감해요
println(++num2)
println(num2)
num3++
println(num3)
++num3
println(num3)
이러면 값은 10,11,21,21,31,32.
println(num1++)을 했을땐 출력한 뒤에 증가했기에 출력은 10이고 다음의 println(num1)에야 11이 반영됨
반대로 ++num3 println(num3) 이건 출력 전에 증가했기에 고스란히 32가 반영된것.
비교연산자.
참 또는 거짓이므로 boolean자료형과 함께 사용.
>, >=, <, <=, ==, !=의 종류가 있다. 즉, 부등호를 쓰거나 =랑 다른걸 붙여쓰면 자동으로 비교연산자로 작동한다.
!=은 같지않다 라는 뜻이다.
var mathScore = 94
// 수학점수가 90점 초과인지 판단
var isMathHighRank = mathScore > 90
// 90점 초과라면 true (참)
// 90점 이하라면 false (거짓)
println("내 수학점수는 고등급이 맞나요? ${isMathHighRank}")
이러면 94>90이므로 true
var englishScore = 60
// 국어점수가 60점 이상인지 판단
var isEnglishMiddleRank = englishScore >= 60
// 60점 이상이라면 true (참)
// 60점 미만이라면 false (거짓)
println("${isEnglishMiddleRank}")
>=이건 같거나 크다로 이상과 같은말. 이러면 60도 60이상이기에 true
var baseAge = 20
var myAge = 20
var teacherAge = 50
var babyAge = 7
var isMyAgePass = myAge == baseAge
var isTeacherAgePass = teacherAge == baseAge
var isBabyAgeNoPass = babyAge != baseAge
println("어서오세요~")
println("이번 이벤트는 ${baseAge}살만 참여할 수 있습니다!")
println("================신분증 검사중================")
println("내 나이는 ${myAge}니까 ${isMyAgePass}다!")
println("선생님 연세는 ${teacherAge}니까 ${isTeacherAgePass}네요.. 미안해요!")
println("${babyAge}살은 참여할수 없는게 맞아요! ${isBabyAgeNoPass}")
var isMyAgePass = myAge == baseAge 베이스에이지랑 마이에이지가 20이니 이건 true
var isTeacherAgePass = teacherAge == baseAge 이건 50살은 20이 아니니 false
var isBabyAgeNoPass = babyAge != baseAge 이건 7살은 20살이 아니다!니까 true
if문과 when문
if문은
if(조건식) { // 조건식이 true일때 실행할 코드 } else { // 조건식이 false일때 실행할 코드 }
when문은
when(변수 또는 상수) { 값1 -> { // 실행할 코드 } 값2 -> { // 실행할 코드 } else -> { // 실행할 코드 } }로 여러개를 나타내기 쉽다.
var eventName = "참새"
var myName = "참새"
if(myName == eventName) {
println("환영합니다 ${myName}님! 이벤트에 당첨됐어요!")
} else {
println("환영합니다 ${myName}님!")
}
}
마이네임이 이벤트네임과 같으면 당첨됬어요가 뜨니까 이건 당첨됬어요가 뜨지만, 마이네임을 참세2 이러헤 바꾸면 환영합니다만 뜬다.
if도 else if를 여러개 쓰면 여러 조건을 나타낼수있음
var koreanScore = readLine()!!.toInt() // 국어점수 입력
var englishScore = readLine()!!.toInt() // 영어점수 입력
var mathScore = readLine()!!.toInt() // 수학점수 입력
var average = (koreanScore + englishScore + mathScore) / 3
if(average >= 90) {
println("당신의 등급은 A입니다")
} else if(average >= 80) {
println("당신의 등급은 B입니다")
} else if(average >= 70) {
println("당신의 등급은 C입니다")
} else {
println("당신의 등급은 F입니다")
}
이러면 밑의 칸에 숫자를 3개 입력하면 답이 출력됨
90
97
67
이러면 B 뜸
참고로, var 이름입력 = readLine() 은 밑에 칸에 글자입력이고 readLine()!!.toInt()는 숫자를 입력.
그리고 조건이 여러개면 when을 쓰는게 간편한데,
var todayNumber = readLine()!!.toInt()
when(todayNumber) {
1 -> {
println("재물이 들어올것입니다")
}
2 -> {
println("검정색을 조심하세요")
}
3 -> {
println("지인과의 관계에 조심하세요")
}
else -> {
println("물을 조심하십시오...")
}
}
이러면 1이면 재물이 들어올것입니다, 9면 물을 조심하십시오 뜬다.