Kotlin/StoreInfo

<강의> Kotlin 문법 종합반 2주차

re트 2023. 11. 27. 16:54
728x90

1. 코딩 컨벤션

  - 다른 사람들도 이해하기 쉽게 코드를 작성하는 규칙

  - 필요한 이유

    1) 코드의 가독성 증가 → 나중에 봐도 쉽게 이해 가능

    2) 유지보수 용이

    3) 효율적인 협업 가능

  - 자주 사용하는 표기법

    1) 주로 변수, 메소드의 이름을 지정할 때 사용하는 camelCase 표기법 (예: seoulFood) 

    2) 주로 상수의 이름을 지정할 때 사용하는 snake_case 표기법 (예: seoul_food)

    3) 주로 클래스의 이름을 지정할 때 사용하는 PascalCase 표기법 (예: SeoulFood)

 

2. 코틀린의 출력과 입력

  - 모니터에 데이터를 출력

fun main() {
    println("안녕하세요.")
    println("아주 간단하네요~")
    println("출력은 println!")
}

  <출력결과>

안녕하세요.
아주 간단하네요~
출력은 println!

 

  - 키보드에서 입력한 내용(텍스트)을 출력

fun main() {
    val dataString = readLine()
    println("내가 입력한 게 ${dataString}(이)라뇨...")
}

  <출력결과>

kotlin
내가 입력한 게 kotlin(이)라뇨...

 

  - 키보드에서 입력한 내용(숫자)을 출력

fun main() {
    val dataNumber = readLine()!!.toInt()
    val sum = dataNumber + 3
    println("내가 입력한 숫자가 ${dataNumber}인데 3을 더하면 ${sum} 맞죠?")
}

  <출력결과>

5
내가 입력한 숫자가 5인데 3을 더하면 8 맞죠?

 

3. 자료형

  - 프로그램의 모든 정보를 데이터 또는 자료라고 하는데 이 자료를 저장할 수 있는 적절한 형태

  - 비트 : 컴퓨터 메모리를 구성하는 방 한 칸(8 비트 = 1 바이트)

  - 자료형의 종류

자료형 크기 특징
Long 64비트 정수
Int 32비트 정수
Short 16비트 정수
Byte 8비트 정수
Double 64비트 실수(소수)
Float 32비트 실수(소수)
Char 16비트 하나의 문자
Boolean 8비트 논리(참 또는 거짓)
String x 문자열

  - 자료형이 중요한 이유

    1) 컴퓨터의 하드웨어 사양은 한정적이기 때문에

    2) 목적에 맞는 자료형이 다르기 때문에

 

4. 변수와 상수

  - 변수

    1) 숫자를 나타내는 변수

fun main() {
    // var num1:Int = 1
    // var 변수이름:자료형(생략가능) = 값
    // 값을 특정 자료형을 저장할 수 있는 변수이름에 대입한다
    var num1 = 1
    println("num1 변수에는 ${num1}이 들어있어")

    num1 = 5
    println("변경한 num1 변수에는 ${num1}이 들어있어")
}

    <출력결과>

num1 변수에는 1이 들어있어
변경한 num1 변수에는 5이 들어있어

 

    2) 문자를 나타내는 변수

fun main() {
    // var one1:Char = '김'
    // var 변수이름:타입(생략가능) = 값
    var one1 = '김'
    println("내 one1 변수에는 ${one1}이 들어있어")

    one1 = '나'
    println("변경한 one1 변수에는 ${one1}가 들어있어")
}

    <출력결과>

내 one1 변수에는 김이 들어있어
변경한 one1 변수에는 나가 들어있어

 

    3) 문자열을 나타내는 변수

fun main() {
    // var name:String = "참새"
    var name = "참새"
    println("새의 이름을 저장하는 name 변수에는 ${name}가 들어있어")

    name = "조롱박이"
    println("변경한 name 변수에는 ${name}가 들어있어")
}

    <출력결과>

새의 이름을 저장하는 name 변수에는 참새가 들어있어
변경한 name 변수에는 조롱박이가 들어있어

 

  - 상수

fun main() {
    // var가 아니라 val를 앞에 붙임
    val num1 = 1
    println("내 첫변수 num1 변수에는 ${num1}이 들어있어")

    // Val cannot be reassigned 에러 발생!!
    // num1은 var이 아니라 val이기때문에 들어있는 값을 변경하지 못함
    num1 = 5

    println("변경한 변수 num1 변수에는 ${num1}이 들어있어")
}

  <출력결과>

Error: Val cannot be reassigned

 

5. 연산자의 종류

  - 산술 연산자(사칙연산 + 나머지 연산에 해당하는 연산자)

fun main() {
    var num1 = 30
    var num2 = 10

    println("num1 : ${num1}, num2 : ${num2}")

    // 덧셈 연산자(+)를 사용해서 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}\n")

    // num2를 10에서 7로 변경
    num2 = 7
    println("num1 : ${num1}, num2 : ${num2}")

    // 나머지 연산자(%)를 사용해서 num1에서 num2를 나눈 나머지를 modResult에 대입함
    var modResult = num1 % num2
    println("num1 % num2 = ${modResult}")
}

  <출력결과>

num1 : 30, num2 : 10
num1 + num2 = 40
num1 - num2 = 20
num1 * num2 = 300
num1 / num2 = 3

num1 : 30, num2 : 7
num1 % num2 = 2

 

  - 대입 연산자(값을 변수에 대입하는 연산자)

fun main() {
    // = 기준으로
    // 오른쪽: "참새"
    // 왼쪽의 이름: name
    // 즉, "참새"를 name변수에 대입한다라고 읽을 수 있음
    var name = "참새"
    println("내 이름은 ${name}")

    // = 기준으로
    // 오른쪽: 10
    // 왼쪽의 이름: age
    // 즉, 10을 age변수에 대입한다라고 읽을 수 있음
    val age = 10
    println("내 나이는 ${age}")
}

  <출력결과>

내 이름은 참새
내 나이는 10

 

  - 복합대입 연산자(산술 연산자 + 대입 연산자)

fun main() {
    var num1 = 30
    var num2 = 10

    println("num1: ${num1}, num2: ${num2}")

    // 산술연산자와 대입연산자를 따로 사용
    // num1의 값을 10 증가시켜서 40을 만들고 싶다면?
    num1 = num1 + 10
    println("산술, 대입 따로 적용한 결과 -> num1 : ${num1}")

    // 복합대입연산자를 사용
    // num2의 값을 10 증가시켜서 20을 만들고 싶다면?
    num2 += 10
    println("복합대입연산자(덧셈) 적용한 결과 -> num2 : ${num2}")

    // 뺄셈, 곱셈, 나눗셈, 나머지연산도 동일하게 사용가능해요
    // 뺄셈: a-=b
    num1 -= 20
    println("복합대입연산자(뺄셈) 적용한 결과 -> num1 : ${num1}")
    // 곱셈: a*=b
    num2 *= 20
    println("복합대입연산자(곱셈) 적용한 결과 -> num2 : ${num2}")
    // 나눗셈: a/=b
    num2 /= 10
    println("복합대입연산자(나눗셈) 적용한 결과 -> num2 : ${num2}")
    // 나머지: a%=b
    num1 %= 3
    println("복합대입연산자(나머지) 적용한 결과 -> num1 : ${num1}")
}

  <출력결과>

num1: 30, num2: 10
산술, 대입 따로 적용한 결과 -> num1 : 40
복합대입연산자(덧셈) 적용한 결과 -> num2 : 20
복합대입연산자(뺄셈) 적용한 결과 -> num1 : 20
복합대입연산자(곱셈) 적용한 결과 -> num2 : 400
복합대입연산자(나눗셈) 적용한 결과 -> num2 : 40
복합대입연산자(나머지) 적용한 결과 -> num1 : 2

 

  - 증감 연산자(특수한 경우에 1을 더하거나 뺄 때에 사용하는 연산자)

fun main() {
    var num1 = 30
    var num2 = 10

    // num1의 값을 1 증가시키고 싶다면?
    // 1) 산술연산자, 대입연산자 따로 사용
    num1 = num1 + 1
    println("(num1_1): 산술,대입 연산자 따로 사용해서 1증가 ${num1}")

    // 2) 복합대입연산자 사용
    num1 += 1
    println("(num1_2): 복합대입연산자 사용해서 1증가 ${num1}")

    // 3) 증감 연산자
    num1++
    println("(num1_3): 증가연산자 사용해서 1증가 ${num1}")

    println("====================================================")

    // num2의 값을 1 감소시키고 싶다면?
    // 1) 산술연산자, 대입연산자 따로 사용
    num2 = num2 - 1
    println("(num2_1): 산술,대입 연산자 따로 사용해서 1감소 ${num2}")

    // 2) 복합대입연산자 사용
    num2 -= 1
    println("(num2_2): 복합대입연산자 사용해서 1감소 ${num2}")

    // 3) 증감 연산자
    num2--
    println("(num2_3): 증가연산자 사용해서 1감소 ${num2}")

    // 후위연산자는 println연산을 실행후에 증감해요
    println("후위연산자")
    println(num1++)
    println(num1)
    println(num2--)
    println(num2)

    // 전위연산자는 println연산 실행전에 증감해요
    println("전위연산자")
    println(++num2)
    println(num2)
    println(--num1)
    println(num1)
}

  <출력결과>

(num1_1): 산술,대입 연산자 따로 사용해서 1증가 31
(num1_2): 복합대입연산자 사용해서 1증가 32
(num1_3): 증가연산자 사용해서 1증가 33
====================================================
(num2_1): 산술,대입 연산자 따로 사용해서 1감소 9
(num2_2): 복합대입연산자 사용해서 1감소 8
(num2_3): 증가연산자 사용해서 1감소 7
후위연산자
33
34
7
6
전위연산자
7
7
33
33

 

  - 비교 연산자

fun main() {
    // 수학은 94점
    var mathScore = 94
    // 영어는 60점
    var englishScore = 60

    // 수학점수가 90점 초과인지 판단
    var isMathHighRank = mathScore > 90
    // 영어점수가 60점 이상인지 판단
    var isEnglishMiddleRank = englishScore >= 60

    // 90점 초과라면 true (참)
    // 90점 이하라면 false (거짓)
    println("내 수학점수는 1등급이 맞나요? ${isMathHighRank}")
    // 60점 이상이라면 true (참)
    // 60점 미만이라면 false (거짓)
    println("내 영어점수는 턱걸이로 3등급이 맞나요? ${isEnglishMiddleRank}")
    println("=======================================")
    
    var baseAge = 20
    var myAge = 20
    var babyAge = 7

    var isMyAgePass = myAge == baseAge
    var isBabyAgeNoPass = babyAge != baseAge

    println("어서오세요~")
    println("이번 이벤트는 ${baseAge}살만 참여할 수 있습니다!")

    println("================신분증 검사중================")

    println("내 나이는 ${myAge}니까 ${isMyAgePass}다!")
    println("${babyAge}살은 참여할수 없는게 맞아요! ${isBabyAgeNoPass}")
}

  <출력결과>

내 수학점수는 1등급이 맞나요? true
내 영어점수는 턱걸이로 3등급이 맞나요? true
=======================================
어서오세요~
이번 이벤트는 20살만 참여할 수 있습니다!
================신분증 검사중================
내 나이는 20니까 true다!
7살은 참여할수 없는게 맞아요! true

 

6. 조건문의 사용

  - if-else문(최악의 경우에 모든 조건을 비교한다는 단점을 가짐)

fun main() {
    var todayNumber = readLine()!!.toInt()

    if (todayNumber == 1) {
        println("재물이 들어올것입니다")
    } else if (todayNumber == 2) {
        println("검정색을 조심하세요")
    } else if (todayNumber == 3) {
        println("지인과의 관계에 조심하세요")
    } else {
        println("물을 조심하십시오...")
    }
}

  <출력결과>

3
지인과의 관계에 조심하세요

 

  - when문(elseif가 많을 때는 when문을 사용하는게 더욱 가독성이 좋음)

fun main() {
    var todayNumber = readLine()!!.toInt()

    when(todayNumber) {
        1 -> {
            println("재물이 들어올것입니다")
        }
        2 -> {
            println("검정색을 조심하세요")
        }
        3 -> {
            println("지인과의 관계에 조심하세요")
        }
        else -> {
            println("물을 조심하십시오...")
        }
    }
}

  <출력결과>

2
검정색을 조심하세요

 

7. 반복문의 사용

  - for문

fun main() {
    var infos = arrayOf("꿩", "닭", "참새", "오목눈이", "공작새")

    for(info in infos) {
        if(info == "참새") {
            println("찾았다 참새!")
            // 반복문 탈출
            break
        } else {
            // 다음 요소로 넘어감
            continue
        }
    }

    for(idx in 0..infos.size - 1) {
        if(infos[idx] == "참새") {
            println("찾았다 참새!")
            // 반복문 탈출
            break
        } else {
            // 다음 요소로 넘어감
            continue
        }
    }

    for(idx in 0 until infos.size) {
        if(infos[idx] == "참새") {
            println("찾았다 참새!")
            // 반복문 탈출
            break
        } else {
            // 다음 요소로 넘어감
            continue
        }
    }

    for(idx in infos.indices) {
        if(infos[idx] == "참새") {
            println("찾았다 참새!")
            // 반복문 탈출
            break
        } else {
            // 다음 요소로 넘어감
            continue
        }
    }
}

  <출력결과>

찾았다 참새!
찾았다 참새!
찾았다 참새!
찾았다 참새!

 

  - while문

fun main() {
    var infos = arrayOf("꿩", "닭", "참새", "오목눈이", "공작새")

    val target = "참새"
    var index = 0
    var currentInfo = infos[index]
    while (true) {
        if (currentInfo == target) {
            println("찾았다 참새!")
            // 반복문 탈출
            break
        } else {
            currentInfo = infos[++index]
            // 다시 반복문의 처음으로 감
            continue
        }
    }
}

  <출력결과>

찾았다 참새!
반응형