# 코딩 컨벤션
- 다른 사람들도 이해하기 쉽게 코드를 작성하는 규칙
- 코드의 가독성이 증가해서 나중에 봐도 쉽게 이해가능
- 유지보수가 용이
- 효율적인 협업 가능
- 카멜케이스 표기법
- 주로 변수, 메소드 이름 지정할 때 사용
seoulFood (O)
- 스네이크케이스 표기법
- 주로 상수의 이름 지정할 때 사용
seoul_food (O)
- 파스칼케이스 표기법
- 주로 클래스의 이름을 지정할 때 사용
SeoulFood (O)
# 출력과 입력
- 출력 (Output)
- 프로그램에서 다른 장치로 데이터를 전송하는 행위
- ex) 프로그램의 결과를 모니터로 정보 출력
- 입력 (Input)
- 다른 장치로부터 데이터를 불러와서 프로그램에서 확인하는 행위
- ex) 키보드에서 입력한 내용을 불러와서 프로그램에서 확인
# 자료형
- 자료를 저장할 수 있는 적절한 형태
- 제한적인 자원을 효율적으로 사용하기 위해 (상황에 맞는 적절한 형태의 데이터타입을 사용해서 낭비를 줄이고 효율적으로 사용하자)
구분 | 데이터타입 | 설명 |
숫자형 | Double | 64비트 정수 |
Float |
32비트 정수
|
|
Long | 64비트 정수 | |
Int | 32비트 정수 | |
Short | 16비트 정수 | |
Byte | 8비트 정수 | |
문자형 | Char | 1 개의 문자 |
String |
여러 개의 문자
|
|
불리언형 | Boolean | true, false |
# 변수와 상수
- 변수 (var - 변할 수 있다)
- 숫자를 나타내는 변수
// var num1:Int = 1
// var 변수이름:자료형(생략가능) = 값
// 값을 특정 자료형을 저장할 수 있는 변수이름에 대입한다
var num1 = 1
println("내 첫변수 num1 변수에는 ${num1}이 들어있어")
num1 = 5
println("변경한 변수 num1 변수에는 ${num1}이 들어있어")
// 결과
//내 첫변수 num1 변수에는 1이 들어있어
//변경한 변수 num1 변수에는 5이 들어있어
- 문자를 나타내는 변수
// var one1:Char = '김'
// var 변수이름:타입(생략가능) = 값
var one1 = '김'
println("내 첫변수 one1 변수에는 ${one1}이 들어있어")
one1 = '나' // one1변수에 들어있던 '김' 대신에 '나'를 대입
println("변경한 변수 one1 변수에는 ${one1}가 들어있어")
//결과
//내 첫변수 one1 변수에는 김이 들어있어
//변경한 변수 one1 변수에는 나가 들어있어
- 문자열을 나타내는 변수
// var name:String = "참새"
var name = "참새"
println("새의 이름을 저장하는 name 변수에는 ${name}가 들어있어")
name = "조롱박이" // name변수에 들어있던 "참새" 대신에 "조롱박이"를 대입
println("변경한 변수 name에는 ${name}가 들어있어")
//결과
//새의 이름을 저장하는 name 변수에는 참새가 들어있어
//변경한 변수 name에는 조롱박이가 들어있어
- 상수 (val - 변할 수 없다)
val num1 = 1
println("내 첫변수 num1 변수에는 ${num1}이 들어있어")
// Val cannot be reassigned 에러 발생!!
// num1은 var이 아니라 val이기때문에 들어있는 값을 변경하지 못함
num1 = 5
println("변경한 변수 num1 변수에는 ${num1}이 들어있어")
-> 상수는 변경할 수 없기 때문에, num1이라는 변수를 변경하려고하면 오류가 뜨기 때문에 num1 = 5는 삭제해줘야함
삭제하고 코드 재실행해주면 출력이 잘 된다
# 연산자의 종류
- 산술연산자 (+,-,*,/,%)
var num1 = 30
var num2 = 10
// 덧셈 연산자(+)사용해서 num1과 num2를 더한후에 plusResult에 대입함
var plusResult = num1 + num2
println("num1 + num2는 ${plusResult}이야")
// 뺄셈 연산자(-)사용해서 num1에서 num2를 뺀후에 minusResult에 대입함
var minusResult = num1 - num2
println("num1 - num2는 ${minusResult}이야")
// 곱셈 연산자(*)사용해서 num1과 num2를 곱한후에 multipleResult에 대입함
var multipleResult = num1 * num2
println("num1 * num2는 ${multipleResult}이야")
// 나눗셈 연산자(/)사용해서 num1에서 num2를 나눈후에 divideResult에 대입함
var divideResult = num1 / num2
println("num1 / num2는 ${divideResult}이야")
// num2를 10에서 7로 변경
num2 = 7
// 나머지 연산자(%)사용해서 num1에서 num2를 나눈 나머지를 modResult에 대입함
var modResult = num1 % num2
println("num1 % num2는 정수로 ${modResult}야")
// 결과
//num1 + num2는 40이야
//num1 - num2는 20이야
//num1 * num2는 300이야
//num1 / num2는 3이야
//num1 % num2는 정수로 2야
- 대입연산자 (=)
// = 기준으로
// 오른쪽: "참새"
// 왼쪽의 이름: name
// 즉, "참새"를 name변수에 대입한다라고 읽을 수 있음
var name = "참새"
println("내 이름은 ${name}")
// = 기준으로
// 오른쪽: 10
// 왼쪽의 이름: age
// 즉, 10을 age변수에 대입한다라고 읽을 수 있음
val age = 10
println("내 나이는 ${age}")
//결과
//내 이름은 참새
//내 나이는 10
-복합 대입연산자(+= ,-= ,*= , /=, %=)
var num1 = 30
var num2 = 10
// 산술연산자와 대입연산자를 따로 사용
// num1의 값을 10 증가시켜서 40을 만들고 싶다면?
num1 = num1 + 10
println("산술, 대입 따로 적용한 결과 ${num1}")
// 복합대입연산자를 사용
// num2의 값을 10 증가시켜서 20을 만들고 싶다면?
num2 += 10
println("산술, 대입 따로 적용한 결과 ${num2}")
// 뺄셈, 곱셈, 나눗셈, 나머지연산도 동일하게 사용가능해요
// 뺄셈: a-=b
// 곱셈: a*=b
// 나눗셈: a/=b
// 나머지: a%=b
//결과
//산술, 대입 따로 적용한 결과 40
//산술, 대입 따로 적용한 결과 20
- 증감 연산자(++, --)
-> 변수의 왼쪽에 위치하면 전위연산자, 변수의 오른쪽에 위치하면 후위연산자
-> 단독적으로 사용하면 결과값 동일, 다른 연산과 같이 사용했을때 차이가 발생
var num1 = 10
var num2 = 20
var num3 = 30
// 후위연산자는 println연산을 실행후에 증감해요
println(num1++) //10
println(num1) //11
// 전위연산자는 println연산 실행전에 증감해요
println(++num2) //21
println(num2) //21
num3++
println(num3) //31
++num3
println(num3) //32
//결과
//10
//11
//21
//21
//31
//32
- 비교연산자(로직연산자) ( >, >=, <, <=, ==, != )
결과는 Boolean의 형식인 true 또는 false로 나온다
// 수학은 94점
var mathScore = 94
// 수학점수가 90점 초과인지 판단
var isMathHighRank = mathScore > 90
// 90점 초과라면 true (참)
// 90점 이하라면 false (거짓)
println("내 수학점수는 고등급이 맞나요? ${isMathHighRank}")
//결과
//내 수학점수는 고등급이 맞나요? true
// 영어는 60점
var englishScore = 60
// 국어점수가 60점 이상인지 판단
var isEnglishMiddleRank = englishScore >= 60
// 60점 이상이라면 true (참)
// 60점 미만이라면 false (거짓)
println("내 영어점수는 턱걸이로 중위권이 맞나요? ${isEnglishMiddleRank}")
//결과
//내 영어점수는 턱걸이로 중위권이 맞나요? 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}")
//결과
//어서오세요~
//이번 이벤트는 20살만 참여할 수 있습니다!
//================신분증 검사중================
//내 나이는 20니까 true다!
//선생님 연세는 50니까 false네요.. 미안해요!
//7살은 참여할수 없는게 맞아요! true
# 조건식 (if, when)
- if - else 구조
// 조건식은 앞서배운 비교 연산자를 사용합니다
// 즉, 조건식 자리에는 true 또는 false의 결과가 들어갑니다
// 조건식이 true일때 중괄호 안의 코드를 실행합니다
if(조건식) {
// 실행할 코드
}
// 둘 중 한개의 코드만 실행됩니다
if(조건식) {
// 조건식이 true일때 실행할 코드
} else {
// 조건식이 false일때 실행할 코드
}
- when 구조
when(변수 또는 상수) {
값1 -> {
// 실행할 코드
}
값2 -> {
// 실행할 코드
}
else -> {
// 실행할 코드
}
}
- 예제
- 특정 이름을 가진 사람일때 축하메시지를 띄워주기
var eventName = "참새"
var myName = "참새"
if(myName == eventName) {
println("환영합니다 ${myName}님! 이벤트에 당첨됐어요!")
} else {
println("환영합니다 ${myName}님!")
}
//결과
//환영합니다 참새님! 이벤트에 당첨됐어요!
- 티켓 100개가 전부 매진되면 더 이상 구매할 수 없다고 알림창을 띄워주기
티켓 100개가 전부 매진되면 더 이상 구매할 수 없다고 알림창을 띄워줘요의 예시입니다.
var ticketCount = 0
if(ticketCount > 0) {
println("티켓을 구매했어요")
} else {
println("티켓이 모두 매진되었습니다")
}
//결과
//티켓이 모두 매진되었습니다
- 기말고사 평균점수를 구간별로 나눠서 A,B,C,D 등급을 매겨주기 (고정값)
var koreanScore = 88
var englishScore = 92
var mathScore = 99
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입니다")
}
//결과
//당신의 등급은 A입니다
- 기말고사 평균점수를 구간별로 나눠서 A,B,C,D 등급을 매겨주기 (입력값)
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입니다")
}
//결과(내가 키보드로 입력한 숫자에따라 출력값 달라짐)
//100
//70
//74
//당신의 등급은 B입니다
- 행운의 숫자를 뽑아서 운세를 알려주기
var todayNumber = readLine()!!.toInt()
when(todayNumber) {
1 -> {
println("재물이 들어올것입니다")
}
2 -> {
println("검정색을 조심하세요")
}
3 -> {
println("지인과의 관계에 조심하세요")
}
else -> {
println("물을 조심하십시오...")
}
}
//결과(내가 키보드로 입력한 숫자에따라 출력값 달라짐)
//7
//물을 조심하십시오...
# 반복문 (for, while)
- for문 구조
// 코틀린의 for 반복문은 다양한 형태가 존재합니다.
// 리스트(묶음)에서 하나의 요소들을 반복해서 가져오는 경우입니다
for(요소 in 리스트) {
소스코드 (로직)
}
// 숫자의 범위를 기준으로 반복하는 경우입니다
// 시작값이 0이고, 마지막값이 5라면 인덱스는 0,1,2,3,4이므로 총 5번 반복해요
// until을 생략해서 시작값..마지막값으로 사용할수도 있어요
for(인덱스 in 시작값 until 마지막값) {
소스코드 (로직)
}
- while문 구조
// 코틀린의 while 반복문은 조건식, 증감식을 이용합니다
while(조건식) {
소스코드 (로직)
증감식
}
- 예제
- 내이름을 10번 출력하기 (for문)
//내 이름을 10번 출력해요 (for)의 예시입니다
// 1부터 10까지 변화하는 i변수
for(i in 1..10) {
println("${i}번째: 내 이름은 참새")
}
//결과
//1번째: 내 이름은 참새
//2번째: 내 이름은 참새
//3번째: 내 이름은 참새
//4번째: 내 이름은 참새
//5번째: 내 이름은 참새
//6번째: 내 이름은 참새
//7번째: 내 이름은 참새
//8번째: 내 이름은 참새
//9번째: 내 이름은 참새
//10번째: 내 이름은 참새
-> 1 .. 10 이라고 썼을땐 1부터 10까지 ( 1 ≤ i ≤ 10) 반복문을 돌음
//내 이름을 10번 출력해요 (for)의 예시입니다
// 1부터 10까지 변화하는 i변수
for(i in 1 until 10) {
println("${i}번째: 내 이름은 참새")
}
//결과
//1번째: 내 이름은 참새
//2번째: 내 이름은 참새
//3번째: 내 이름은 참새
//4번째: 내 이름은 참새
//5번째: 내 이름은 참새
//6번째: 내 이름은 참새
//7번째: 내 이름은 참새
//8번째: 내 이름은 참새
//9번째: 내 이름은 참새
-> 1 until 10 이라고 썼을땐 1부터 9까지 ( 1 ≤ i < 10 ) 반복문을 돌음
-> until은 마지막숫자는 포함하지 않는다!!
- 내이름을 10번 출력하기 (while문)
var i = 0
while(i < 10) {
println("${i}번째: 내 이름은 참새")
i++
}
//결과
//0번째: 내 이름은 참새
//1번째: 내 이름은 참새
//2번째: 내 이름은 참새
//3번째: 내 이름은 참새
//4번째: 내 이름은 참새
//5번째: 내 이름은 참새
//6번째: 내 이름은 참새
//7번째: 내 이름은 참새
//8번째: 내 이름은 참새
//9번째: 내 이름은 참새
- 전화번호부에서 이름이 “참새”인 사람을 찾을때까지 한명씩 조회하고 비교하기
var infos = arrayOf("꿩", "닭", "참새", "오목눈이", "공작새")
for(info in infos) {
if(info == "참새") {
println("찾았다 참새!")
break
} else {
continue
}
}
//결과
//찾았다 참새!
-> break는 가장 가까운 반복문에서 탈출하고 다음 블록으로 넘어감
-> continue는 이후의 코드를 실행하지 않음
- 상자에서 사료를꺼내 고양이에게 10번 먹여주기
var catStatus = false
println("고양이는 매우 배고픕니다..")
println("사료를 10번 먹여주세요")
// 고양이가 현재 배고프니까(false) 사료 배급가능
if(catStatus == false) {
for(idx in 0..9) {
println("${idx}번째: 냠냠")
}
}
// 사료를 10번 준 이후의 상태변화
catStatus = true
if(catStatus == true) {
println("배부른 고양이입니다")
}
//결과
//고양이는 매우 배고픕니다..
//사료를 10번 먹여주세요
//0번째: 냠냠
//1번째: 냠냠
//2번째: 냠냠
//3번째: 냠냠
//4번째: 냠냠
//5번째: 냠냠
//6번째: 냠냠
//7번째: 냠냠
//8번째: 냠냠
//9번째: 냠냠
//배부른 고양이입니다
# 전체 예제
val worldName = "스코월드"
var myName = readLine()
var myAge = readLine()!!.toInt()
var myJob = readLine()
var isNamePass = true
var isAgePass = true
var isJobPass = true
var names = arrayOf("참새", "꿩", "비둘기")
for(name in names) {
if(myName == name) {
println("중복된 이름이 존재합니다.")
isNamePass = false
break
}
}
if(myAge < 12) {
println("12세 미만은 이용할 수 없습니다.")
isAgePass = false
}
if(myJob == "전사") {
println("일시적으로 전사를 이용할 수 없습니다.")
isJobPass = false
}
// 모든 조건을 통과한 경우에만 환영
if(isNamePass && isAgePass && isJobPass) {
println("==================${worldName}에 오신것을 환영합니다==================")
println("당신의 정보는 다음과 같습니다.")
println("이름: ${myName}입니다.")
println("나이: ${myAge}입니다.")
println("직업: ${myJob}입니다.")
println("모험을 떠나 볼까요?")
}
//결과 (내가 키보드로 입력한 숫자에따라 출력값 달라짐)
독수리
13
새
==================스코월드에 오신것을 환영합니다==================
당신의 정보는 다음과 같습니다.
이름: 독수리입니다.
나이: 13입니다.
직업: 새입니다.
모험을 떠나 볼까요?
'개발 노트 > Kotlin' 카테고리의 다른 글
[kotlin] 문법 4주차 정리 - 객체지향 프로그래밍 심화 (5) | 2024.03.12 |
---|---|
[kotlin] 문법 3주차 정리 - 기초 (0) | 2024.03.07 |
RecyclerView 레이아웃이 안보이는 문제 [변수명 오류] (1) | 2024.03.05 |
파이어베이스 이미지URL을 통해 이미지 수정하기 (0) | 2024.03.05 |
[kotlin] 문법 1주차 정리 - 기초 (1) | 2024.03.05 |