본문 바로가기

안드로이드 프로그래밍/kotlin

[Android Studio] kotlin 기본 문법3( 함수, 클래스 )

📌 함수

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( )

 

728x90
반응형