본문 바로가기
코틀린 문법

7. 조건문과 비교연산자, 흐름제어와 논리연산자

by 농농씨 2023. 4. 30.

 

코드테스트 사이트:play.kotlinlang.org

참조:유튜브 디모의 코틀린

 

조건문과 비교연산자

fun main(){

//조건문,비교연산자

var a =11 //조건문 테스트 위해 변수 만들고 정수 대입

if(a > 10) {

println("a는 10보다 크다.") //조건문 하나면 중괄호 생략 가능

} else{

println("a는 10보다 작거나 같다.") //거짓일 경우의 조건문

}

a is int //자료형 맞는지 체크하는 연산자

a !is int //자료형 틀린지 체크

 

//when //다중비교문, 하나의 변수를 여러 개의 값과 비교 가능,

//다른 언어의 switch문을 개편

fun doWhen (a:Any){

//Any자료형:어떤 자료형이든 호환되는 코틀린 최상위 자료형!

when(a) {

//조건값들 나열

1-> println("정수 1입니다") //숫자

"Dimo"->println("디모의 코틀린 강좌입니다") //문자

is Long ->println("Long 타입입니다") //is 조건문

!is String -> println("String 타입입니다") //!is 조건문

else->println("어떤 조건값도 만족하지 않습니다")

//등호나 부등호는 사용 불가능하다!

}

 

}

}

<when을 조건에 맞는 동작을 하는 '조건문으로서' 이용한 경우>

-->string 타입이 아닙니다 라고 써야하는데 깜빡함

근데 왜 여러값을 비교한다면서 1도 string 타입이 아닌데 "string타입아닙니다"를 출력 안하지? 한번에 내부 구문 하나만 동작하는건가? 흐으음...

<when이 동작 대신 '값'을 반환하는 '표현식'으로서 동작하게 하기>

해당하는 거 있으면 when함수를 빠져나오는군요...

+var a,b=0,0 같은 변수 동시 초기화는 안되는건가? 흐음

반복문과 증감연산자

fun main() {

//조건형반복문:조건이 참인 경우 반복유지 ex.while, do...while

//범위형 반복문:반복 범위 정해 반복 수행

//증감연산자:++a,a++,--a,a--

//전위연산자:연산자가 포함된 구문에서 이미 증감된 수를 반영하여 연산 진행

//후위연산자:증가나 감소된 수를 해당구문에서 사용하지 않고 '다음구문'부터

//사용함

// 조건형 반복문

var a = 0

var b = 0

while(a < 5){

println(a++) //후위증가연산자, 화면에 출력된 후에야 증가값 반영

//5까지 증가하고 나서 조건문 확인했을때 while문 거짓되면

//반복 중단하고 다음 구문으로 넘어감(0~4까지 출력)

}

while(b < 5){

println(++b)//증가된 값 즉시반영해서 출력, 12345출력

}

var c=0

 

do //dowhile문, 최초한번은 조건없이 do에서 구문실행 후에 while조건체크

{

println(++c)

} while(c<5) //12345출력됨

 

//여기부터 범위형 반복문

for(i in 0..9 step 3){ //인덱스로 사용할 변수는 var등을 붙이지 않아도 됨

//0부터 9까지, step을 붙이면 3씩 증가!

print(i) //print는 println과 달리 줄 안떼고 붙여서 출력

 

}

for(j in 9 downTo 0 step 2){ //감소는 ..대신 downto 사용

print(j)

}

for (k in 'a'..'e'){while은 char타입에서도 증감 가능

print(k) //abcde출력됨

}

 

}

흐름제어와 논리연산자

fun main() {

//return:코드 흐름 제어하는 키워드중 하나

//'함수종료'하고 '값 반환'하는 역할

//또다른 키워드:break, continue

//break:반복문 내의 구문이실행되는 중간에 즉시 반복문 종료하고다음구문으로.

//continue:다음 반복조건으로 즉시 넘어감

 

for (i in 1..10) {

if (i==3) break

println(i) //3에서 반복문 종료, 1 2까지만 출력

}

for (i in 1..10) {

if (i==3) continue //i가 3일때 println 건너뛰고 for문으로 돌아가서

//다음 반복조건인 4 진행

println(i) //3빼고 1에서 10까지 출력

}

}

fun main() {

//코틀린에서 추가된 기능

//"다중 반복문"에서 break나 continue가 적용되는 반복문을

//label을 통해 지정

var a=0

for (i in 1..10){

for (j in 1..10){ //i 하나당 j 10번 반복

println (a++) //a값 0부터 99까지 출력됨

}

} //여기까지 고전반복문 예시

var b=0 //i랑 j 는 초기화 안해도 되는듯!

for (i in 1..10){

for (j in 1..10){

if(i==1&&j==2)break //i는1,j는2일때 반복문 탈출

println (b++) //2까지만 출력되어야하는데 90까지 출력됨(why??)

}

//또 체크 필요?? 수동적!!

}

}

//코틀린에서는 외부반복문에 '레이블이름'과 @(at)기호를 달고

//break 문에서 @과 레이블 이름을 달아주면

//레이블이 달린 반복문을 기준으로 '즉시' break!

loop@for (i in 1..10) {

for (j in 1..10) {

if(i==1&&j==2)break@loop //레이블이름@for문{}@레이블이름

println("i:$i, j:$j") //이런식으로 '가두는'건가...?

//따옴표 안에서 변수출력할때는 '$'를 앞에 붙여서 사용!

} //i:1, j:1까지만 출력돼서 break 의도한대로 작동했음을 알수있음!

}

}

fun main() {

//논리연산자:논리값을 연산하여 새로운 논리값을 도출할 때 쓰는 연산자!

//&&(and연산자),||(or연산자),!(not 연산자,뒤에 붙는 값 반전시킴)

println(true&&false) //false, 둘다 참이어야하는데 아니라서 false

println(true||false) //true, 하나라도 참이어서 true

println(!true) //false,반전됨

println(!false) //true, 반전됨

var a =6 //변수에 값 할당

var b =4

println(a>5 && b>5) //false

}

아 유튜브 생각보다 자세하긴 한데 5분짜리 강의도 정리하면서 들으려니까 오래걸린다.

31개중에 이제 7개들었는데 내가 공부를 안한 탓인가 ㅎㅋㅎㅋ

참고자료:유튜브 디모의 Kotlin 강좌