[TIL] 2023.11.28

Gahyeon Lee·2023년 11월 28일
0

TIL

목록 보기
12/47
post-thumbnail

🍗 연산자

1. 산술 연산자

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

fun main() {
    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야 */

2. 대입 연산자

변수나 상수를 만들 때 사용한 '='
=을 기준으로 오른쪽에 있는 값을 왼쪽의 변수명 또는 상수명에 대입한다고 한다.

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

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

/* 결과
내 이름은 참새
내 나이는 10 */

3. 복합대입 연산자

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

fun main() {
    var num1 = 30

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

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

    // 뺄셈, 곱셈, 나눗셈, 나머지연산도 동일하게 사용가능하다
    // 뺄셈: a-=b
    // 곱셈: a*=b
    // 나눗셈: a/=b
    // 나머지: a%=b
}

/* 결과
산술, 대입 따로 적용한 결과 40
복합대입연산자 적용한 결과 50 */

4. 증감 연산자

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

/* 결과
(num1_1): 산술,대입 연산자 따로 사용해서 1증가 31
(num1_2): 복합대입연산자 사용해서 1증가 32
(num1_3): 증가연산자 사용해서 1증가 33
====================================================
(num2_1): 산술,대입 연산자 따로 사용해서 1감소 9
(num2_2): 복합대입연산자 사용해서 1감소 8
(num2_3): 증가연산자 사용해서 1감소 7 */
  • 증감연산자는 변수의 왼쪽이나 오른쪽에 위치할 수 있다.
  • 변수의 왼쪽에 위치하면 전위연산자, 오른쪽에 위치하면 후위연산자 라고 한다.
  • 단독적으로 사용하면 결과값은 동일하고, 다른 연산과 같이 사용했을때 차이가 발생한다.
fun main() {
    var num1 = 10
    var num2 = 20
    var num3 = 30

    // 후위연산자는 println연산을 실행 후에 증감
    println(num1++)
    println(num1)

    // 전위연산자는 println연산 실행 전에 증감
    println(++num2)
    println(num2)

    num3++               // 만약 println(num3++)했다면 결과에 30이 나옴
    println(num3)    

    ++num3
    println(num3)
}

/* 결과
10
11
21
21
31
32 */

5. 비교 연산자

  • 두 개의 변수 또는 상수의 관계나 값을 비교할때 사용하는 연산자를 의미한다.
  • 로직 연산자라고도 하며 결과는 또는 거짓이므로 boolean자료형과 함께 사용한다.
  • 우선 >, >=, <, <=, ==, != 까지만 이해하자.
fun main() {
    // 수학은 94점
    var mathScore = 94

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

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

// 결과 : 내 수학점수는 고등급이 맞나요? true
fun main() {
    // 영어는 60점
    var englishScore = 60

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

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

// 결과 : 내 영어점수는 턱걸이로 중위권이 맞나요? true
fun main() {
    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, else, when 키워드를 활용해서 조건을 관리한다.
  • 앞서 배웠던 연산자들과 함께 사용한다.

[ Kotlin의 조건식 종류 ]

1. if-else의 구조

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


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

2. when의 구조

when(변수 또는 상수) {1 -> {
		  // 실행할 코드
   }2 -> {
		  // 실행할 코드
   }
   else -> {
		  // 실행할 코드
	 }
}

[ 조건식 사용 위치 ]

  • 특정 이름을 가진 사람에게 축하메시지 띄워주기
  • 일반게임과 랭크게임을 선택해서 게임방을 만들기
  • 티켓 100개가 전부 매진되면 더 이상 구매할 수 없다고 알림창 띄우기
  • 비가오면 잔잔한 음악이 재생되도록 하기
  • 기말고사 평균점수를 구간별로 나눠서 A,B,C,D 등급을 매기기

⭐️ else if가 많아질때는 when을 사용하는게 더욱 가독성이 좋다.
⭐️ if는 최악의 경우에 위 조건부터 아래 조건까지 모든 조건을 비교한다는 단점을 고려하자.

[ 예시 코드 ]

▶️ 특정 이름을 가진 사람에게 축하메시지 띄워주기

fun main() {
    var eventName = "참새"
    var myName = "참새"

    if(myName == eventName) {
        println("환영합니다 ${myName}님! 이벤트에 당첨되셨어요!")
    } else {
        println("환영합니다 ${myName}님!")
    }
}
// 결과 : 환영합니다 참새님! 이벤트에 당첨되셨어요!

▶️ 티켓 100개가 전부 매진되면 더 이상 구매할 수 없다고 알림창 띄우기

// 1. 티켓이 매진되었을 때
fun main() {
    var ticketCount = 0

    if(ticketCount > 0) {
        println("티켓을 구매했어요")
    } else {
        println("티켓이 모두 매진되었습니다")
    }
}
// 결과 : 티켓이 모두 매진되었습니다

// 2. 티켓이 3장 남았을 때
fun main() {
    var ticketCount = 3

    if(ticketCount > 0) {
        println("티켓을 구매했어요")
        ticketCount--            // 티켓 1장 줄어듦
    } else {
        println("티켓이 모두 매진되었습니다")
    }
}
// 결과 : 티켓을 구매했어요

▶️ 기말고사 평균점수를 구간별로 나눠서 A,B,C,D 등급을 매기기(고정값)

fun main() {
    var koreanScore = 88
    var englishScore = 92
    var mathScore = 99
    var average = (koreanScore + englishScore + mathScore) / 3

    if(average >= 90) {
        println("당신의 등급은 A입니다")
    } else if(average >= 80) {        // 80점 이상이면서 90점 미만인가?
        println("당신의 등급은 B입니다")
    } else if(average >= 70) {
        println("당신의 등급은 C입니다")
    } else {
        println("당신의 등급은 F입니다")
    }
}
// 결과 : 당신의 등급은 A입니다

▶️ 기말고사 평균점수를 구간별로 나눠서 A,B,C,D 등급을 매기기(입력값)

// 직접 input하기
// ⭐️ 입력을 받아와서 숫자로 바꿔줄때 readLine()!!.toInt()를 쓴다는 것을 알아두자.
fun main() {
    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입니다")
    }
}
// 실행하면 콘솔창에 입력할 수 있게 되고, 90, 98, 67을 넣고 엔터치면 아래와 같은 결과가 나온다.

▶️ 행운의 숫자를 뽑아서 운세를 알려주기

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

    when(todayNumber) {
        1 -> {
            println("재물이 들어올것입니다")
        }
        2 -> {
            println("검정색을 조심하세요")
        }
        3 -> {
            println("지인과의 관계에 조심하세요")
        }
        else -> {
            println("물을 조심하십시오...")
        }
    }
}
// 실행하면 콘솔창에 입력할 수 있게 되고, 을 넣고 엔터치면 아래와 같은 결과가 나온다.


🍗 반복문

  • 논리에 맞게 코드를 반복해서 실행하는 반복문!
  • 코틀린에서는 for, while 키워드를 활용해서 반복적인 로직을 관리한다.
  • 앞서 배웠던 연산자와 함께 사용한다.
  • for는 특정 횟수만큼 반복하기 위해 사용하고, while은 특정 조건을 만족할 때까지 코드를 반복한다. 즉, while은 if문처럼 조건식을 사용하여 언제까지 반복할지를 결정한다.

[Kotlin의 반복문 종류]

1. for의 구조
코틀린의 for 반복문은 다양한 형태가 존재한다.

  • 리스트(묶음)에서 하나의 요소들을 반복해서 가져오는 경우
for(요소 in 리스트) {
	  소스코드 (로직)
}
  • 숫자의 범위를 기준으로 반복하는 경우
for(인덱스 in 시작값 until 마지막값) {
		소스코드 (로직)
}    // --> 시작값이 0이고, 마지막값이 5라면 인덱스는 0,1,2,3,4이므로 총 5번 반복한다.

for(인덱스 in 시작값 .. 마지막값) {
		소스코드 (로직)
}    // --> 시작값이 0이고, 마지막값이 5라면 인덱스는 0,1,2,3,4,5이므로 총 6번 반복한다.

2. while의 구조

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

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

[ 반복문 사용 위치 ]

  • 예시
    • 매일 10시에 A,B,C의 주식가격을 출력하기
    • 매일 퇴근전에 검색 → 엑셀에 저장 → 메일전송하는 행위를 코드로 반복시키기
    • 전화번호부에서 이름이 “참새”인 사람을 찾을때까지 한명씩 조회하고 비교하기
    • 상자에서 사료를꺼내 고양이에게 10번 먹여주기

[예시 코드]

▶️ 내 이름을 10번 출력하기 (for)

fun main() {
    for(i in 1 .. 10) {
        println("${i}번째: 내 이름은 참새")
        i++
    }
}

/* 결과
❌ 에러!! : Val은 재할당할 수 없고, 6번째 줄에서 9번째 글자(띄어쓰기 포함)인 i에서 에러남.
e: file:///Users/t2023-m0040/AndroidStudioProjects/BasicSyntax/app/src/main/java/com/leegahyeon/basicsyntax/test.kt:6:9 Val cannot be reassigned

--> for문 사용하면 내부적으로 알아서 i가 1씩 증가하면서 val(상수)로 만들어지기 때문에 i++은 필요 없으니 지워주자. */


// 올바른 코드1
fun main() {
    for(i in 1 .. 10) {
        println("${i}번째: 내 이름은 참새")
    }
}

// 올바른 코드2
fun main() {
    for(i in 1 until 11) {
        println("${i}번째: 내 이름은 참새")
    }
}
/* 결과
1번째: 내 이름은 참새
2번째: 내 이름은 참새
3번째: 내 이름은 참새
4번째: 내 이름은 참새
5번째: 내 이름은 참새
6번째: 내 이름은 참새
7번째: 내 이름은 참새
8번째: 내 이름은 참새
9번째: 내 이름은 참새
10번째: 내 이름은 참새 */

▶️ 내 이름을 10번 출력하기 (while)

fun main() {
    var i = 0

    while(i < 10) {
        println("${i}번째: 내 이름은 참새")
        i++
    }
}
/* 결과
0번째: 내 이름은 참새
1번째: 내 이름은 참새
2번째: 내 이름은 참새
3번째: 내 이름은 참새
4번째: 내 이름은 참새
5번째: 내 이름은 참새
6번째: 내 이름은 참새
7번째: 내 이름은 참새
8번째: 내 이름은 참새
9번째: 내 이름은 참새*/
// 위의 for문과 다르게 i++를 넣어도 에러가 뜨지 않는다. for문은 알아서 상수로 만들었지만,  여기서는 i를 따로 변수로 만들어서 사용했기 때문에 1증가가 가능하다.


fun main() {
    var i = 0

    while(i < 10) {
        println("${i+1}번째: 내 이름은 참새")
        i++
    }
}
/* 결과
1번째: 내 이름은 참새
2번째: 내 이름은 참새
3번째: 내 이름은 참새
4번째: 내 이름은 참새
5번째: 내 이름은 참새
6번째: 내 이름은 참새
7번째: 내 이름은 참새
8번째: 내 이름은 참새
9번째: 내 이름은 참새
10번째: 내 이름은 참새 */

▶️ 전화번호부에서 이름이 “참새”인 사람을 찾을때까지 한명씩 조회하고 비교하기
- break는 가장 가까운 반복문에서 탈출하고 다음 블록으로 넘어감
- continue는 이후의 코드를 실행하지 않음

fun main() {
    var infos = arrayOf("꿩", "닭", "참새", "오목눈이", "공작새")   // infos 안에 5개의 변수가 들어있음

    for(info in infos) {            						  // infos 안의 5개의 변수가 for문이 돌면서 차례대로 하나씩 info에 들어감.

        if(info == "참새") {
            println("찾았다 참새!")
            break											  // 가장 가까운 반복문인 for문을 탈출 --> 프로그램 종료
        } else {
            continue										  // 이후의 코드를 수행하지 않고 바로 for문 처음으로 돌아가서 다음 info를 가져옴
        }
    }
}
// 결과 : 찾았다 참새!

▶️ 상자에서 사료를꺼내 고양이에게 10번 먹여주기🐱

fun main() {
    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번째: 냠냠
배부른 고양이입니다 */
profile
코린이 강아지 집사🐶

1개의 댓글

comment-user-thumbnail
2023년 11월 29일

글 잘 읽었습니다! 정리를 열심히 한 것 같아요 TIL 끝까지 화이팅입니다!!!!!! :>

답글 달기