📌 함수
fun 함수명(파라미터 이름: 타입): 반환 타입 {
return 값
}
1. 반환값과 입력값이 있는 함수의 정의
- Int 타입의 x라는 입력 파라미터를 갖는 함수 square() 를 정의해보았다.
fun square(x: Int): Int {
return x * x
}
-> square 함수가 호출되면 입력값을 제곱해서 호출한 측으로 반환하고 실행이 종료된다.
2. 반환값이 없는 함수의 정의
- 반환값 없이 입력값을 받아서 Log 로 출력하는 함수 printSum() 을 정의해보았다.
fun printSum(x: Int, y: Int) {
Log.d("fun", "x+y= ${x+y}")
}
-> printSum 함수가 호출되면 결과값을 Log 로 출력하고 실행이 종료된다.
3. 입력값 없이 반환값만 있는 함수의 정의
- getPi 함수는 호출한 측으로 3.14를 반환하고 실행이 종료된다.
fun getPi(): Double {
return 3.14
}
▼ 함수의 사용
함수명(값)
1. 반환값과 입력값이 있는 함수의 호출
- 파라미터에 전달할 값을 입력하고 반환값은 대입 연산자(=)로 변수에 담은 후에 사용
var squareResult = square(30)
Log.d("fun", "30의 제곱은 ${squareResult}입니다")
2. 반환값이 없는 함수의 호출
- 반환값이 없으면 대입 연산자(=)를 사용하지 않고 바로 호출해서 실행
printSum(3, 5)
3. 입력값이 없는 함수의 호출
- 입력값이 없다면 괄호만으로 실행하고 결과값을 받을 수 있다.
val PI = getPi()
Log.d("fun", "지름이 10인 원의 둘레는 ${10 * PI} 입니다")
▼ 함수 파라미터의 정의
- '이름 : 타입' 형태로 정의
- 여러 개의 파라미터가 정의될 경우는 콤마로 구분
- 코틀린에서 함수 파라미터를 통해 입력되는 모든 값은 변하지 않는 이뮤터블 이다.
- 코틀린에서의 함수 파라미터는 모두 읽기 전용 키워드 val 이 생략된 형태이다.
fun 함수명((val 생략) name1: String, name2: Int, name3: Double) { 실행 코드 }
1. 파라미터의 기본값 정의와 호출
- 파라미터는 정의할 때 등호(=)를 사용해서 기본값을 설정할 수 있다.
fun 함수명((val 생략) name1: String, name2: Int = 157, name3: Double) { 실행 코드 }
2. 파라미터 이름으로 값을 입력하기
- 순서와 상관없이 정의된 파라미터 이름을 지정해서 직접 값을 입력할 수 있다.
newFunction("Michael", weight = 67.5)
📌 클래스와 설계
- 클래스는 단지 변수와 함수의 모음이다.
- 그룹화할 수 있는 함수와 변수를 한군데에 모아 놓고 사용하기 쉽게 이름을 붙여놓은 것을 클래스라고 이해하자.
▼ 클래스의 기본 구조
class 클래스명 {
var 변수
fun 함수( ) {
// 코드
}
}
▼ 클래스 코드 작성하기
class 클래스이름 {
// 클래스 스코프 (class scope)
}
- 몇몇 예외는 있지만 대부분의 코드는 클래스 스코프 안에 작성된다.
- 작성된 클래스를 사용하기 위해서는 생성자라고 불리는 함수가 호출되어야 하는데, 코틀린은 프라이머리 와 세컨더리 2개의 생성자를 제공한다.
1. 프라이머리(Primary) 생성자
class Person 프라이머리 생성자( ) {
}
- 프라이머리 생성자는 마치 클래스의 헤더처럼 사용할 수 있으며 constructor 키워드를 사용해서 정의하는데 조건에 따라 생략할 수 있다.
- 프라이머리 생성자도 결국은 함수이기 때문에 파라미터를 사용할 수 있다.
class Person constructor(value: String) {
// 코드
}
- 클래스의 생성자가 호출되면 init 블록의 코드가 실행되고, init 블록에서는 생성자를 통해 넘어온 파라미터에 접근할 수 있다.
2. 세컨더리 생성자
- 세컨더리생성자는 constructor 키워드를 마치 함수처럼 클래스 스코프 안에 직접 작성할 수 있다.
- init 블록을 작성하지 않고 constructor 다음에 괄호를 붙여서 코드를 작성할 수 있다.
- 파라미터의 개수, 또는 파라미터의 타입이 다르다면 여러 개를 중복해서 만들 수 있다.
class Person {
constructor (value: String) {
Log.d("class", "생성자로부터 전달받은 값은 ${value} 이다")
}
}
3. Default 생성자
- 생성자는 작성하지 않을 경우 파라미터가 없는 프라이머리 생성자가 하나 있는 것과 동일하다.
class Student { // 생성자를 작성하지 않아도 기본 생성자가 동작합니다.
init {
// 기본 생성자가 없더라도 초기화가 필요하면 여기에 코드를 작성합니다.
}
}
▒ 프로퍼티와 메서드
프로퍼티와 메서드
클래스 내부에 정의되는 변수와 함수를 멤버 변수, 멤버 함수라고 부른다.
또 다른 용어로 프로퍼티, 메서드 라고 부른다.
클래스의 변수 > 멤버 변수 > ------- 프로퍼티 (Property)
클래스의 함수 > 멤버 함수 > ------- 메서드 (Method)
클래스 안에 정의된 변수는 프로퍼티라고 하지만
함수 안에 정의된 변수는 프로퍼티라고 하지 않고 그냥 변수(또는 지역변수)라고 한다.
class 클래스명 {
var 변수A --------프로퍼티 : 함수 밖에 있어야 한다.
fun 함수( ) {
var 변수 B ---------- 변수(또는 지역변수) : 함수 안에 있어야 한다.
}
}
프로퍼티와 메서드를 사용하기 위해서 프로퍼티 1개와 메서드 1개를 갖는 클래스를 만든다.
class Pig {
var name: String = "Pinky"
fun printName( ) {
Log.d("class", "Pig의 이름은 ${name}이다")
}
}
위에서 정의한 클래스를 생성자로 인스턴스화해서 변수에 담는다.
var pig = Pig( )
인스턴스가 담긴 변수명 다음에 도트 연산자 (.) 를 붙여서 프로퍼티와 메서드를 사용한다.
pig.name = "Pooh"
pig.printName( )
'안드로이드 프로그래밍 > kotlin' 카테고리의 다른 글
[kotlin syntax] package, Return and Jumps (1) | 2022.02.20 |
---|---|
[Android Studio] # date and time 다루기 (0) | 2022.02.16 |
[Android Studio] kotlin 기본 문법2( 배열, 컬렉션 ) (0) | 2022.02.13 |
[Android Studio] kotlin 기본 문법1( 변수, 조건문 ) (0) | 2022.02.13 |
[Android Studio] 로그(Log), 로그캣(Logcat) (0) | 2022.02.13 |