참조:유튜브 디모의 코틀린
코드테스트사이트:play.kotlinlang.org
*맥북 탭 이동 단축키:command+shift+{/}
//함수를 더 다양한 방법으로 사용할 수 있는 여러 기능들 알아보자
//overloading(overriding과 혼돈 유의)
//:같은 scope안에서 같은 이름의 함수를 여러 개 만들 수 있는 기능
// 함수 이름이 같더라도 패러미터의 자료형이 다르거나 패러미터의 개수가 다르면
// 서로 다른 함수로 동작할 수 있음
// 다만, 패러미터의 이름만 다르게 붙고, 자료형과 개수가 동일하다면
// ex.fun same(x:Int, y:Int)
// fun same(a:Int, b:Int)
// 오버로딩을 할 수 없다!
fun main(){
read(7)
read("감사합니다")
//함수 이름은 같지만 자료형을 구분하여 함수가 매칭되어 실행됨
}
fun read(x: Int){//함수 만들고 패러미터로 int값 받고
println("숫자 $x 입니다")//문자열 출력하게 함
}
fun read(x: String){//함수 이름 같고 패러미터가 이름은 같은데 자료형다름
println(x)//패러미터 그대로 출력
}
//만약
//패러미터를 받아야하는 함수이지만 별다른 패러미터가 없더라도
//기본값으로 동작해야한다면?
//이럴땐 default arguments를 사용한다
fun main(){
deliveryItem("짬뽕")
deliveryItem("책",3)
deliveryItem("노트북",30,"학교")
//패러미터를 채워진 경우에는 입력받은 패러미터 사용해서 출력되지만
//패러미터가 없다면 지정된 기본값으로 출력됨
}
fun deliveryItem(name: String,count:Int=1,destination:String="집"){
//함수 만들고 이름,개수,목적지 받음, equal사용해서
//개수패러미터에 숫자 1 넣어주고 목적지패러미터는 문자열"집"넣어줌
println("${name},${count}개를 ${destination}에 배달하였습니다")
}
//만약 개수는 기본으로 하고 이름이랑 목적지만 넣고싶다면?
//가운데를 비우면 동작하지 않음!
//이때 쓰는 것이 named arguments~
//named arguments
//:패러미터의 순서와 관계없이 패러미터의 이름을 사용하여 직접 패러미터의
// 값을 할당하는 기능
fun main(){
deliveryItem("선물",destination="친구집")
//문자열 "선물":'이게 첫 패러미터니까 name이겠군'
//equal을 사용하여 destination이 지정된
//"친구집"이라는 문자열은 해당 패러미터로 할당됨!
//중간에 있는 개수(count)는 기본값인 1로 출력되고 나머지 두 패러미터만 할당되어 실행되게 됨!
}
fun deliveryItem(name: String,count:Int=1,destination:String="집"){
println("${name},${count}개를 ${destination}에 배달하였습니다")
}
//variable number of arguments(vararg)
//:같은 자료형을 개수에 상관없이 패러미터로 받고 싶을 때 사용
fun main(){
sum(1,2,3,4)
//실행해보면 모든 숫자의 합인 10이 출력됨
}
fun sum(vararg numbers: Int){
//새로 함수 만들고 패러미터에서 vararg가 붙은 int값 받음
//vararg가 붙은 패러미터는 마치 '배열'처럼 for문으로
//참조할 수 있음!
var sum=0//숫자들을 더할 변수 sum을 0으로 초기화
for (n in numbers)
{
sum+=n//sum에, 받아온 모든 정수값 더해봅시다
}
print(sum)//왜... println이 아닌거지
}
//vararg는 개수가 지정되지 않은 패러미터라는 특징이 있으므로
//다른 패러미터와 같이 쓸 때는 반드시 맨 마지막에 위치해야함!!!!
//주의!
// ex. fun sample(text:String, vararg x:Int)
//마지막으로,
//infix function:마치 연산자처럼 쓸 수 있는 함수
fun main(){
println(6 multiply 4)
//좌측의 6이 infix 함수가 적용되는 객체 자신, 즉 this에 해당
//우측의 4가 패러미터 x에 해당(?흐음....왜?;)
//그냥 일반적인 class의 함수처럼 사용할 수도 있음
println(6.multiply(4))
//실행해보면 윗줄이랑 결과 동일
//참고로 class 안에서 infix함수를 선언할때는
//적용할 클래스가 자기자신이므로 클래스 이름은 쓰지 않는다(뭔말이지)
// ex.infix fun multiply(x:Int):Int=this*x
}
infix fun Int.multiply(x:Int):Int=this*x
//함수를 정의할 때 앞에 infix를 붙인 후
//함수 이름을 infix 함수가 적용될 자료형.이름으로 지정함
//여기서는 Int값에 사용할 multiply()함수를 만들어봅시다
//그리고 패러미터로 Int 값 x를 지정하고 반관값도 Int로 만듦
//그리고 this와 x를 곱해서 반환
//코틀린은 많은 언어들이 지원하는 함수의 다양한 편의기능을 대부분 가짐
//이를 이용하면 더욱 편리하다~
'코틀린 문법' 카테고리의 다른 글
17. Data Class와 Enum Class (1) | 2023.05.14 |
---|---|
16. 중첩클래스와 내부클래스 (0) | 2023.05.14 |
14. null값을 처리하는 방법, 동일한지 확인하는 방법 (0) | 2023.05.14 |
13. 문자열을 다루는 법 (0) | 2023.05.11 |
12. 리스트 (0) | 2023.05.11 |