
몇년 개발을 편하게 하고 십수년 유지보수를 힘들게 할지?
몇년 개발을 힘들게 하고 십수년 유지보수를 편하게 할지?
개발의 용이성
반복되는 코드를 줄임으로써 수정을 용이하게하고 전체 작업량을 줄임
fun 함수이름() {
관리할 코드들
}
fun test2(a1:Int, a2:Double) {
println("test2 함수 호출")
println("a1 : $a1")
println("a2 : $a2")
}
// 매개변수를 가지고 있는 함수 호출
test2(100,11.11)
test2(200,22.22)
var k1 = 100
var k2 = 22.22
test2(k1, k2)
test2 함수 호출
a1 : 100
a2 : 11.11
test2 함수 호출
a1 : 200
a2 : 22.22
test2 함수 호출
a1 : 100
a2 : 22.22
함수에 값을 리터럴로 직접 넘길때 인텔리제이에서는 해당 값이 어떤 매개변수에 담기게 되는지 아래 이미지와 같이 자동으로 표시해준다.(해당 표시 부분은 직접 타이핑하는게 아니다!)

함수를 호출할 때 전달하는 값을 어떤 매개변수에 저장할지 정할 수 있다.(자바는 안되고 코틀린에서는 가능함)
test2(a2=33.33, a1=300)
test2 함수 호출
a1 : 300
a2 : 33.33
test2(44.44, 44.44) // 에러 발생
test2(500) // 에러 발생
test2(600, 66.66, true) // 에러 발생
** 코틀린에서는 매개변수의 개수에 맞지 않는 값을 전달하더라도 다른 방법으로 값을 전달하는 방법이 있다고 한다.(기존의 C나 Java와 같은 언어에는 없는 방법) ↓ 아래에서 설명
fun test3(a1:Int, a2:Double=11.11, a3:String="기본문자열"){
println("test3 함수 호출")
println("a1 : $a1")
println("a2 : $a2")
println("a3 : $a3")
}
// a2와 a3에는 기본값이 설정되어 있지만 함수 호출 시 값을 전달하고 있기 때문에
// 기본값은 무시되고 전달해주는 값이 저장된다.
test3(200, 22.22, "새로운 문자열")
// a2에 저장된 값을 전달하지 않았으므로 기본값이 a2와 a3에 저장된다.
test3(300)
test3 함수 호출
a1 : 200
a2 : 22.22
a3 : 새로운 문자열
test3 함수 호출
a1 : 300
a2 : 11.11
a3 : 기본문자열
test3(400, a3="새로운 문자열3")
test3 함수 호출
a1 : 400
a2 : 11.11
a3 : 새로운 문자열3
return은 함수 내부에 코드가 더 있다고 하더라도 함수의 수행을 끝내고 함수를 호출한 쪽으로 돌아가라는 명령어return을 사용fun test4(){
println("test4 함수 호출")
return
println("이 부분이 수행 될까요???")
}
test4()
test4 함수 호출
return을 만나게 되면 함수의 수행이 종료되며, 이 때 함수를 호출한 쪽으로 값을 전달할 수 있다.// fun 함수명(매개변수들):반환타입
fun test5(a1:Int, a2:Int):Int{
var r1 = a1 + a2
// 함수의 수행을 종료하고 값을 반환한다.
return r1
}
// 반환값을 전달하는 함수를 호출한다.
// 함수가 전달하는 반환값은 바로 변수에 저장해주면 된다.
var r100 = test5(100, 200)
println("r100 : $r100")
r100 : 300
fun add(a1:Int, a2:Int) : Int{
var r1 = a1 + a2
return r1
}
fun add(a1:Double, a2:Double): Double{
var r1 = a1 + a2
return r1
}
// 정수값을 받는 함수 호출
var r200 = add(100,200)
println("r200 : $r200")
// 실수값을 받는 함수 호출
var r300 = add(11.11,22.22)
println("r300 : $r300")
r200 : 300
r300 : 33.33
var a1:Int = 10 + 2 * 4
var a2:Int = (10 + 2) * 4
println("a1 : $a1")
println("a2 : $a2")
a1 : 18
a2 : 48
var a3 = true
var a4 = !a3
var a5 = !a4
println("a4 : $a4")
println("a5 : $a5")
a4 : false
a5 : true
var a6 = 100
var a7 = +a6
var a8 = -a6
println("a7 : $a7")
println("a8 : $a8")
a7 : 100
a8 : -100
var a9 = 100
a9++
println("a9 : $a9")
var a10 = 100
a10 = a10 + 1
println("a10 : $a10")
++a9
println("a9 : $a9")
a9--
println("a9 : $a9")
--a9
println("a9 : $a9")
a9 : 101
a10 : 101
a9 : 102
a9 : 101
a9 : 100
var a11 = 10
var a12 = 10
// 증감연산자가 앞에 있는 경우
// 최우선 연산자를 제외한 모든 연산자보다 먼저 수행됨
var a13 = ++a11
var a14 = --a12
println("a11 : ${a11}, a13 : $a13") // 변수 뒤에 문자열이 이어지는 경우에는 {} 중괄호를 써줘야 함
println("a12 : ${a12}, a14 : $a14")
// 증감연산자가 뒤에 있는 경우
// 모든 연산자들 보다 가장 마지막에 수행된다.
a11 = 10
a12 = 10
a13 = a11++
a14 = a12--
println("a11 : ${a11}, a13 : $a13") // 변수 뒤에 문자열이 이어지는 경우에는 {} 중괄호를 써줘야 함
println("a12 : ${a12}, a14 : $a14")
a11 : 11, a13 : 11
a12 : 9, a14 : 9
a11 : 11, a13 : 10
a12 : 9, a14 : 10
// 더하기
var b1 = 10 + 3
// 빼기
var b2 = 10 - 3
// 곱하기
var b3 = 10 * 3
// 나누기
var b4 = 10 / 3
// 나머지
var b5 = 10 % 3
println("b1 : $b1")
println("b2 : $b2")
println("b3 : $b3")
println("b4 : $b4")
println("b5 : $b5")
b1 : 13
b2 : 7
b3 : 30
b4 : 3
b5 : 1
// 좌측의 값이 우측의 값보다 작은가
var b6 = 10 < 3
var b7 = 10 < 20
println("b6 : $b6")
println("b7 : $b7")
// 좌측의 값이 우측의 값보다 작거나 같은가
b6 = 10 <= 3
b7 = 10 <= 20
var b8 = 10 <= 10
println("b6 : $b6")
println("b7 : $b7")
println("b8 : $b8")
// 좌측의 값이 우측의 값보다 큰가
b6 = 10 > 3
b7 = 10 > 20
println("b6 : $b6")
println("b7 : $b7")
// 좌측의 값이 우측의 값보다 크거나 같은가
b6 = 10 >= 3
b7 = 10 >= 20
b8 = 10 >= 10
println("b6 : $b6")
println("b7 : $b7")
println("b8 : $b8")
// 좌측의 값과 우측의 값이 같은가
b6 = 10 == 20
b7 = 10 == 10
println("b6 : $b6")
println("b7 : $b7")
// 좌측의 값과 우측의 값이 다른가
b6 = 10 != 20
b7 = 10 != 10
println("b6 : $b6")
println("b7 : $b7")
b6 : false
b7 : true
b6 : false
b7 : true
b8 : true
b6 : true
b7 : false
b6 : true
b7 : false
b8 : true
b6 : false
b7 : true
b6 : true
b7 : false
// && : 좌우의 수식의 결과가 모두 true인 경우는 결과가 true이고 하나라도 false라면 결과는 false가 된다.
// 주어진 모든 조건에 만족하는 경우인지 확인할 때 사용한다.
var c1 = 10 > 2 && 10 < 20
var c2 = 10 < 2 && 10 < 20
var c3 = 10 > 2 && 10 > 20
var c4 = 10 < 2 && 10 > 20
println("c1 : $c1")
println("c2 : $c2")
println("c3 : $c3")
println("c4 : $c4")
c1 : true
c2 : false
c3 : false
c4 : false
// ||(or) : 좌우의 수식의 결과가 모두 false 경우는 결과가 false이고 하나라도 true라면 결과는 true가 된다.
// 주어진 조건들 중에 하나라도 만족하는지 확인할 때 사용한다.
c1 = 10 > 2 || 10 < 20
c2 = 10 < 2 || 10 < 20
c3 = 10 > 2 || 10 > 20
c4 = 10 < 2 || 10 > 20
println("c1 : $c1")
println("c2 : $c2")
println("c3 : $c3")
println("c4 : $c4")
c1 : true
c2 : true
c3 : true
c4 : false
var d1 = 10
var d2 = 10
d1 = d1 + 10
d2 += 10
println("d1 : $d1")
println("d2 : $d2")
d1 : 20
d2 : 20
if(조건식) {
코드
}
val a1 = 10
// 조건식의 결과가 true이므로 if문이 관리하는 코드가 수행된다.
if(a1 == 10){
println("a1은 10입니다")
}
// 조건식의 결과가 false이므로 if문이 관리하는 코드가 수행되지 않는다.
if(a1 == 20){
println("a1은 20입니다")
}
a1은 10입니다
// 조건식의 결과가 true이므로 if문이 관리하는 코드가 수행되고
// else가 관리하는 코드는 수행되지 않는다.
if(a1 == 10){
println("a1은 10입니다")
} else {
println("a1은 10이 아닙니다")
}
// 조건식의 결과가 false이므로 if문이 관리하는 코드가 수행되지 않고
// else가 관리하는 코드가 수행된다.
if(a1 == 20){
println("a1은 20입니다")
} else {
println("a1은 20이 아닙니다")
}
a1은 10입니다
a1은 20이 아닙니다
// 위에서 부터 아래 방향으로 조건식들을 수행하다가 true 인 부분을 만나면 그 부분을 수행하고 밖으로 나간다.
// 만약 모든 조건 수식의 결과가 false 일 경우 else 가 있으면 else 부분을 수행하고
// else 부분이 없으면 아무것도 수행하지 않는다.
if(a1 == 0){
println("a1은 0입니다")
} else if(a1 == 10){
println("a1은 10입니다")
} else if(a1 == 20){
println("a1은 20입니다")
} else {
println("a1은 0, 10, 20이 아닙니다")
}
a1은 10입니다
// 조건식의 결과에 따라 변수에 값을 저장한다.
var a4 = ""
var a5 = 10
if(a5 == 10){
a4 = "10 입니다"
}else{
a4 = "10이 아닙니다"
}
println("a4 : $a4")
a4 : 10 입니다
// if문에 있는 조건식이 true면 첫 번째 값이 반환되어 변수에 저장되고
// false라면 두 번째 값이 반환되어 변수에 저장된다.
var a6 = if(a5 == 10) "10 입니다" else "10이 아닙니다"
println("a6 : $a6")
a6 : 10 입니다
// if 문이 관리하는 코드가 다수의 줄로 구성되어 있다면..
var a7 = ""
if(a5 == 10){
var r1 = 10 + 20
a7 = "r1은 $r1 입니다"
} else {
var r1 = 100 + 200
a7 = "r1은 $r1 입니다"
}
println("a7 : $a7")
a7 : r1은 30 입니다
// 조건식의 결과가 true라면 if문이 관리하는 코드 중 제일 마지막에 작성한 값이 변수에 저장되고
// false라면 else가 관리하는 코드 중 제일 마지막에 작성한 값이 저장된다.
var a9 = if(a5==10){
var r1 = 10 + 20
"r1은 $r1 입니다"
} else {
var r1 = 100 + 200
"r1은 $r1 입니다"
}
println("a9 : $a9")
a9 : r1은 30 입니다
val a1 = 10
// 변수 a1의 값에 맞는 부분이 수행된다.
when(a1){
// 수행될 코드가 한 줄 이라면 { }로 묶지 않아도 된다
1 -> println("a1은 1입니다")
5 -> println("a1은 5입니다")
// 수행될 코드가 여러 줄이라면 { }로 묶어 준다.
10 -> {
println("a1은 10입니다")
println("코드가 두 줄")
println("코드가 세 줄")
}
else -> println("a1은 1, 5, 10이 아닙니다")
}
a1은 10입니다
코드가 두 줄
코드가 세 줄
val a2 = 3
when (a2){
1, 2 -> println("a2는 1이거나 2입니다")
3, 4 -> println("a2는 3이거나 4입니다")
5, 6, 7 -> println("a2는 5이거나 6이거나 7입니다")
else -> println("a2는 1, 2, 3, 4, 5, 6, 7이 아닙니다")
}
a2는 3이거나 4입니다
var a3 = 55.55
when(a3){
33.33 -> println("a3은 33.33입니다")
55.55 -> println("a3은 55.55입니다")
77.77 -> println("a3은 77.77입니다")
else -> println("a3은 33.33, 55.55, 77.77이 아닙니다")
}
a3은 55.55입니다
var a4 = "문자열2"
when(a4){
"문자열1" -> println("첫 번째 문자열 입니다")
"문자열2" -> println("두 번째 문자열 입니다")
"문자열3" -> println("세 번째 문자열 입니다")
else -> println("else 문자열 입니다")
}
두 번째 문자열 입니다
// 논리값을 사용할 경우 true, false 모두 처리해줘야 한다.
var a5 = true
when(a5){
true -> println("a5는 true 입니다")
false -> println("a5는 false 입니다")
}
a5는 true 입니다
val a6 = 5
when(a6){
in 1..3 -> println("a6는 1부터 3사이 입니다")
in 4..6 -> println("a6는 4부터 6사이 입니다")
else -> println("a6는 1부터 6사이의 숫자가 아닙니다")
}
a6는 4부터 6사이 입니다
// 1 ~ 10
if(a6 in 1..10){
println("a6은 1이상 10 이하입니다")
}
// 1 ~ 10 - 1
if(a6 in 1 until 10){
println("a6은 1이상 10 미만입니다")
}
a6은 1이상 10 이하입니다
a6은 1이상 10 미만입니다
fun setValue1(a1:Int) : String{
if(a1 == 1){
return "문자열1"
} else if(a1 == 2){
return "문자열2"
} else {
return "그 외의 문자열"
}
}
// 조건에 따라 값을 반환하는 함수를 사용하여 변수에 값을 저장
var a7 = setValue1(1)
var a8 = setValue1(2)
var a9 = setValue1(3)
println("a7 : $a7")
println("a8 : $a8")
println("a9 : $a9")
a7 : 문자열1
a8 : 문자열2
a9 : 그 외의 문자열
fun setValue2(a1:Int) = when(a1){
1 -> "문자열1"
2 -> "문자열2"
else -> "그 외의 문자열"
}
var a10 = setValue2(1)
var a11 = setValue2(2)
var a12 = setValue2(3)
println("a10 : $a10")
println("a11 : $a11")
println("a12 : $a12")
a10 : 문자열1
a11 : 문자열2
a12 : 그 외의 문자열
※ 출처 : 멋쟁이사자 앱스쿨 2기, 소프트캠퍼스