[Kotlin/코틀린] 3. 연산자의 종류, 조건문 사용, 반복문 사용

2023. 12. 10. 16:50스파르타/Kotlin

4주차 ' Kotlin 프로그래밍의 기초' 강의 내용 정리

 

3-1. 연산자의 종류

 

 

1. 산술 연산자

덧셈, 뺄셈, 곱셈, 나눗셈 그리고 나머지 연산을 가능하게 하는 연산자이다.

+ (더하기)

- (빼기)

* (곱하기)

/ (나누기)

% (나머지)

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}야")

 

 

 

 

2. 대입 연산자

변수나 상수를 만들 때 사용한 ' = ' 을 대입 연산자라고 한다.

' = ' 을 기준으로 오른쪽에 있는 값을 왼쪽의 변수명 또는 상수명에 대입한다.

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

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

 

 

 

 

3. 복합대입 연산자

산술 연산자와 대입 연산자를 한 번에 사용할 수 있는 연산자이다.

+= 더하고 대입

-= 빼고 대입

*= 곱하고 대입

/= 나누고 대입

%= 나머지 구하고 대입

 

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

 

 

 

 

4. 증감 연산자

1을 더하거나 빼는 특수한 경우에 사용할 수 있는 연산자이다.

++ (증가)

-- (감소)

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}")

 

 

증감 연산자는 변수의 왼쪽이나 오른쪽에 위치할 수 있다.

변수의 왼쪽에 위치하면 전위연산자 라고 한다.

변수의 오른쪽에 위치하면 후위연산자 라고 한다.

단독적으로 사용하면 결과값을 동일한다.

다른 연산과 같이 사용했을 때 차이가 발생한다.

 

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)

 

 

 

5. 비교 연산자

두 개의 변수 또는 상수의 관계나 값을 비교할 때 사용하는 연산자이다.

로직 연산자라고도 하며, 결과는 참 또는 거짓이므로 boolean 자료형과 함께 사용한다.

> (크다)

>= (크거나 같다)

< (작다)

<= (작거나 같다)

== (같음)

!= (같지않음) 

// 수학은 94점
var mathScore = 94

// 수학점수가 90점 초과인지 판단
var isMathHighRank = mathScore > 90

// 90점 초과라면 true (참)
// 90점 이하라면 false (거짓)
println("내 수학점수는 고등급이 맞나요? ${isMathHighRank}")
// 영어는 60점
var englishScore = 60

// 국어점수가 60점 이상인지 판단
var isEnglishMiddleRank = englishScore >= 60

// 60점 이상이라면 true (참)
// 60점 미만이라면 false (거짓)
println("내 영어점수는 턱걸이로 중위권이 맞나요? ${isEnglishMiddleRank}")
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}")

 

 

이외에도 다양한 연산자가 존재하며,

프로그래밍 언어마다 지원하는 연산자의 종류가 조금씩 달라진다.

 

 

 

 

 

3-2. 조건문 (if, else, when)

 

코틀린에서는 if, else, when 키워드를 활용해서 조건문을 작성할 수 있다.

앞서 배운 연산자와 함께 사용할 수 있다.

else if 가 많아질 때는 when을 사용하는 것이 가독성에 좋다.

if는 최악의 경우 모든 조건을 비교한다는 단점을 고려해야 한다.

 

if, else의 구조

// 조건식은 앞서배운 비교 연산자를 사용합니다
// 즉, 조건식 자리에는 true 또는 false의 결과가 들어갑니다
// 조건식이 true일때 중괄호 안의 코드를 실행합니다
if(조건식) {
    // 실행할 코드
}


// 둘 중 한개의 코드만 실행됩니다
if(조건식) {
    // 조건식이 true일때 실행할 코드
} else {
    // 조건식이 false일때 실행할 코드
}

 

 

when의 구조

when(변수 또는 상수) {
    값1 -> {
        // 변수 또는 상수가 값1일때 실행할 코드
    }
    값2 -> {
        // 변수 또는 상수가 값2일때 실행할 코드
    }
    in 값3..값9 -> {
        // 변수 또는 상수가 값3~값9사이일 때 실행할 코드
    }
    else {
        // 변수 또는 상수가 윗 조건에 해당되지 않을때 실행할 코드
    }
}

 

 

 

 

 

실습 예제 1. 특정 이름을 가진 사람일 때 축하메세지 띄워주기

var eventName = "참새"
var myName = "참새"

if(myName == eventName) {
    println("환영합니다 ${myName}님! 이벤트에 당첨됐어요!")
} else {
    println("환영합니다 ${myName}님!")
}

 

 

 

 

실습 예제 2. 티켓 100개가 전부 매진되면 더이상 구매할 수 없다는 알림창 띄우기

var currentTicketCounts = 0

// 사람들이 티켓 구매를 눌렀을 때 실행
if(currentTicketCounts == 0) {
    println("죄송해요 매진입니다...")
} else {
    println("구매 성공!")
}

 

 

 

 

실습 예제 3. 기말고사 평균 점수를 구간별로 나눠서 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입니다")
}

 

 

 

 

실습 예제 4. 행운의 숫자를 뽑아서 운세 알려주기

var todayNumber = readLine()!!.toInt()

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

 

 

 

 

3-3. 반복문 (for, while)

 

코틀린에서는 for, while 키워드를 활용해서 반복적인 로직을 관리한다.

앞서 배운 연산자와 함께 사용할 수 있다.

 

 

 

for의 구조

// 코틀린의 for 반복문은 다양한 형태가 존재합니다.

// 리스트(묶음)에서 하나의 요소들을 반복해서 가져오는 경우입니다
for(요소 in 리스트) {
    소스코드 (로직)
}

// 숫자의 범위를 기준으로 반복하는 경우입니다
// 시작값이 0이고, 마지막값이 5라면 인덱스는 0,1,2,3,4이므로 총 5번 반복해요
// until을 생략해서 시작값..마지막값으로 사용할수도 있어요
for(인덱스 in 시작값 until 마지막값) {
    소스코드 (로직)
}

 

 

 

 

while의 구조

// 코틀린의 while 반복문은 조건식, 증감식을 이용합니다

while(조건식) {
    소스코드 (로직)
    증감식
}

 

 

 

 

 

실습 예제 1. 내 이름 10번 출력하기 (for)

for(i in 0 until 10) {
    println("${i}번째: 내 이름은 참새")
    i++
}

 

 

 

 

실습 예제 2. 내 이름 10번 출력하기 (while)

var i = 0

while(i < 10) {
    println("${i}번째: 내 이름은 참새")
    i++
}

 

 

 

실습 예제 3. 전화번호부에서 이름이 "참새"인 사람을 찾을 때까지 한명씩 조회하고 비교하기

break는 가장 가까운 반복문에서 탈출하고 다음 블록으로 넘어간다

continue는 이후의 코드를 실행하지 않는다

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

for(info in infos) {

    if(info == "참새") {
        println("찾았다 참새!")
        break
    } else {
        continue
    }
}

 

 

 

 

실습 예제 4. 상자에서 사료를 꺼내 고양이에게 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("배부른 고양이입니다")
}