Everyday Growing Engineer 2023. 3. 3. 15:50

차례 : 

  • a. 변수 상수 타입
  • b. 조건문과 조건식
  • c. functoin (함수)

a. 변수 상수 타입

1 변수 선언 방법

var experiencePoint : Int = 5

2 코틀린 내장 타입 : String, Char, Boolean, Int, Double, List, Set, Map

 

3 읽기 전용 변수 : val(value) vs var(variable)

 

4. 타입추론 (type inference)

초기값을 지정하는 경우에 해당 변수의 타입을 생략할 수 있게 해주는 기능
var experiencePoint = 5

5 const : val 앞에 추가하면 이 변수의 값이 절대 변경되지 않는다는것

ex) const val MAX_EXPERIENCE

b. 조건문과 조건식

< <= > >= == != 생략

===  !==

자바에서는 string 같은 것을 비교할때는 == (주소값을 비교함) 
String a = "hi" // 주소값 : 1번지
String b = "hi" // 주소값 : 2번지
System.out.println(a==b) // false

equal (자바에서는 두 객체(참조 타입)의 동등성을 알기 위해서 equals를 호출해야 한다.)


kotlin 에서는 ==equal 개념이 들어가있음 (String 비교에서 조차)
대신 === 이 자바에서의 == 역할을 한다. 
=== !=== (왼쪽 오른쪽 두개의 인스턴스가 같은 객체인지 아닌지 검사한다)

 

2 kotlin 에서의 범위 표현 (ex in 1..10    1<=x <=10)

val healthStatus = if (healthPoints == 100) {
   "Best"
} else if (healthPoints in 11..99) {
   "Best and Worst"
} else {
   "worst"
}

 

3. when 표현식

3개이상의 조건분기에 적합함. if else의 간결한 버전이랄까?

val healthStatus = when(healthPoints){
   100 -> "Best"
   in 90..99 -> "good"
   in 20..89 -> if(isBlessed){
       "중간 그리고 치유중"
   } else {
       "중간 그리고 안치유중"
   }
   in 10..19 -> "bad"
   else -> "worst"
}

 

4 문자열 템플릿

문자열 템플릿을 사용하면 문자열 값 안에 변수의 값을 포함시킬수 있다. 

$기호가 문자열 템플릿을 나타냄. 그리고 ${} 괄호안에 표현식도 가능 

println("이름 $name 건강상태 $healthStatus ${if (isBlessed) "blessed" else "no-blesssed"}")

 

functoin (함수)

fun formatHealthStatus(healthPoints: Int, isBlessed: Boolean): String {

  return healthStatus

}

 

미리 default 값을 넣어줄수도 있음.

fun formatHealthStatus(healthPoints: Int = 3): String {

  return healthStatus

}

 

함수 이름은 카멜 표기법을 사용하는게 좋다네.

 

local variable : 함수 내부에서만 존재하는 변수, 함수 실행이 끝나면 소멸

 

Unit 함수 : void 함수 개념같음.

 

Nothing 타입: 

  1.  함수의 실행이 끝나더라도 호출 코드로 제어가 복귀 되지 않는다
  2.  exception을 발생시킬때 사용가능(TODO 함수랑)
fun shouldReturnAString(): String {
   TODO("문자열을 변환하는 코드를 여기에 구현해야 함")
}

 

  1.  아직 다른게 완성 안되서 만들지 못할 경우 씀

 

파일수준함수 : 자바 vs 코틀린

-> 자바에서는 클래스 내부에서만 함수와 변수를 정의할수 있었다

-> but 코틀린에서는 클래스에 얽매이지 않고 외부에도 함수와 변수 정의 가능!!!

 

함수 오버로딩(function overloading): 자바랑 똑같음

ex) fun performcombat() {},   fun performcombat(enemyName: String){}

 

단일 표현식 함수 : 중괄호와 몸체를 return 생략 가능

fun chapter4(a:Int, b: Boolean) =
       when (healthPoints) {
           100 -> "good"
           in 10..99 -> "soos"
           else -> "bad"
       }