본문 바로가기

개발자/kotlin 코틀린

kotlin 04. 매개변수, 인수, 범위, 함수 오버로딩, 스택 예제 코드

반응형

 

 

031 매개변수(Parameter)와 인수(Argument)

 

함수는 고정된 구문으로 이루어져 있지만 함수에 값을 전달하는 방식으로 함수가 다양한 일을 할 수 있도록 한다. 함수 이름 옆의 소괄호 안에 변수를 선언하는 방식으로 값을 전달하는 데 이를 매개변수라 한다.

 

매개변수를 선언할 때는 var, val 키워드를 붙이지 않는다. 매개변수는 무조건 val 선언이므로 값을 수정할 수 없는 변수다.

 

fun main(args: Array<String>): Unit
{
	println(cToF(30))
	println(getAverage(89, 96))
}

fun cToF(celsius: Int): Double
{
	return celsius * 1.8 + 32
}

fun getAverage(a: Int, b: Int): Double
{
	return (a + b) / 2.0
}

결과

86.0
92.5

 

032 Unit 타입

함수가 값을 반환하지 않을 때 사용한다. 함수 끝에 return을 쓰지 않아도 된다. 결국 함수의 반환타입을 생략하면 자동으로 Unit이 된다. 모든 메인 함수의 반환 타입은 Unit 이므로 생략 가능하다. 

 

fun main(args: Array<String>): Unit
{
	celsiusToFah(27)
}

fun celsiusToFah(celsius: Int): Unit
{
	println(celsius * 1.8 + 32)
}

결과

80.6

 

 

033 디폴트 인수

매개 변수를 선언과 동시에 초기화 한다. 이렇게 하면 함수 호출시 해당 매개변수에 인수를 할당하지 않아도 된다. 인수가 할달되지 않은 매개변수는 디폴트 값으로 초기화된다.

 

fun main(args: Array<String>)
{
	println(getAverage(89, 96))
	getAverage(100, 50, true)
	println(getAverage(90))
	getAverage(66, print = true)
	getAverage(print = true)
	getAverage(print = true, a = 10, b = 30)
}

fun getAverage(a: Int = 0, b: Int = 0, print: Boolean = false): Double
{
	val result = (a + b) / 2.0
	if (print)
		println(result)
	return result
}

결과

92.5
75.0
45.0
33.0
0.0
20.0

 

034 가변 인수

여러개의 인수를 받을 경우 매개 변수 앞에 vararg 키워드를 붙여 여러 개의 인수를 받는다.

 

fun main(args: Array<String>)
{
	println(getSumOf(1, 2, 3, 4, 5, 6, 7))
	println(getSumOf(32, 57, 12))
	println(getSumOf())
}

fun getSumOf(vararg numbers: Int): Int
{
	val count = numbers.size
	var i = 0
	var sum = 0

	while (i < count)
	{
		sum += numbers[i]
		i += 1
	}

	return sum
}

결과

28
101
0

 

035 함수 오버로딩(Function Overloading)

 

한 줄 인쇄하는 println 도 함수다. Intellij IDEA 에디터에서 ctrl 키를 누른채로 소스코드의 println을 클릭하면 println 함수가 선언된 파일 console.kt 파일로 이동할 수 있다. @로 시작하는 부분은 어노테이션이라고 하는데 다른 부분에서 다루고, 매개 변수만 다른 같은 이름의 함수가 보인다. 이름은 같고 함수 시그니처가 다른 함수를 여러 개 선언하는 것을 함수 오버로딩이라고 한다.  println은 겅의 모든 데이터 타입에 오버로딩 되어 있다.

 

@kotlin.internal.InlineOnly
public inline fun println(message: Int) {
    System.out.println(message)
}

/** Prints the given [message] and the line separator to the standard output stream. */
@kotlin.internal.InlineOnly
public inline fun println(message: Long) {
    System.out.println(message)
}

/** Prints the given [message] and the line separator to the standard output stream. */
@kotlin.internal.InlineOnly
public inline fun println(message: Byte) {
    System.out.println(message)
}

 

036 지역 변수(Local Variable)와 전역 변수(Global Variable)

함수 밖에 선언한 변수를 전역변수, 블록 안에서 선언된 변수를 지역변수라 한다.

 

var count = 0

fun main(args: Array<String>)
{
	val a = 15
	println(a)

	count += 1
	printCount()
	println(count)
}

fun printCount()
{
	println(count)
	count += 1
}

결과

15
1
2

 

037 지역 변수와 전역 변수의 이름이 중복될 때

 

var a = 5

fun main(args: Array<String>)
{
	val a = 30
	println(a)
	func()
}

fun func()
{
	println(a)
}

결과

30
5

 

038 지역 변수와 다른 함수의 지역 변수가 중복될 때

 

fun main(args: Array<String>)
{
	val a = 52
	println(a)

	printA()
	printA2()
}

fun printA()
{
	val a = 17
	println(a)
}

fun printA2()
{
	val a = 120
	println(a)
}

결과

52
17
120

 

039 지역 함수(Local Function)

 

fun main(args: Array<String>)
{
	fun printFomular(a: Int, b: Int)
	{
		println(a * b + a - b)
	}

	printFomular(73, 1)
	printFomular(4, 6)
}

결과

145
22

 

040 메모리의 스택(Stack) 영역

 

메모리의 스택 영역에 지역 변수가 저장된다.

 

fun main(args: Array<String>)
{
	val a = -36
	val result = absolute(a)
	println(result)
}

// 입력받은 정수의 절대값을 반환하는 함수
fun absolute(number: Int): Int
{
	return if (number >= 0)
		number
	else -number
}

결과

36

 

 

 

 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩