Kotlin/ 클래스 연습문제

yellow·2021년 4월 14일
0

Kotlin

목록 보기
9/13

📝 1.사칙연산을 수행하는 클래스

1-1.피연산자가 2개인 사칙연산을 지원하는 클래스

class Calculator1{

    // 더하기
    fun plus(a: Int, b: Int): Int{
        return a + b
    }

    // 빼기
    fun minus(a: Int, b: Int): Int{
        return a - b
    }
    
    // 곱하기
    fun multiply(a: Int, b:Int): Int{
        return a * b
    }
    
    // 나누기
    fun divide(a: Int, b: Int): Int{
        return a / b
    }
}

1-2. 피연산자가 여러개인 사칙연산을 지원하는 클래스

class Calculator2{

    // 더하기
    fun plus(vararg numbers:Int): Int{
        var result:Int = 0
        numbers.forEach {
            result += it
        }

        return result
    }

    // 빼기
    fun minus(vararg numbers:Int): Int{
        var result = numbers[0]
        numbers.forEachIndexed { index, i ->
            if(index != 0){
                result -= i
            }
        }
        return result
    }

    // 곱하기
    fun multiply(vararg numbers: Int): Int{
        var result:Int = 1
        numbers.forEach {
            if(it != 0){
                result *= it
            }
        }
        return result
    }

    // 나누기
    fun divide(vararg numbers: Int): Int{
        var result = numbers[0]
        for((index, i) in numbers.withIndex()){
            if(index != 0 && i != 0){
                result /= i
            }
        }
        return result
    }
}

⭐ 1-3 앞의 두 방법을 보완하는 클래스

  • 피연산자를 여러개 받을 수 있다.
  • 연산 순서를 매끄럽게 지정할 수 있다.
  • 자신 클래스를 리턴해서 체이닝 기능을 사용하는 방법이다.
class Calculator3(val initialValue: Int){
    
    // 더하기
    fun plus(number:Int): Calculator3{
        val result = this.initialValue + number
        return Calculator3(result)
    }

    // 빼기
    fun minus(number:Int): Calculator3{
        val result = this.initialValue - number
        return Calculator3(result)
    }

    // 곱하기
    fun multiply(number:Int): Calculator3{
        val result = this.initialValue * number
        return Calculator3(result)
    }

    // 나누기
    fun divide(number:Int): Calculator3{
        val result = this.initialValue / number
        return Calculator3(result)
    }
}

fun main(array:Array<String>){

    val calc3 = Calculator3(3)
    calc3.plus(5).minus(5).divide(2).initialValue
    //---/calc3(3)
    //-----------/calc(8)
    //--------------------/calc(3)
    //------------------------------/calc(3).divide(2)
    // Chaining(체이닝)
}

📝 2. 은행계좌 클래스

  • 계좌 생성 기능(이름, 생년월일)
  • 잔고를 확인하는 기능
  • 출금 기능
  • 예금 기능

2-1. 기본 문제 풀이

class Account1{
    val name: String
    val birth: String
    var balance: Int
    
    constructor(name: String, birth: String, balance: Int){
        this.name = name
        this.birth = birth
        if(0 <= balance){
            this.balance = balance
        }else{
            this.balance = 0
        }
    }

    fun checkBalance(): Int{
        return balance
    }

    fun withdraw(amount: Int): Boolean{
        if(this.balance < amount){
            println("출금 불가능")
            return false
        }else{
            balance -= amount
            return true
        }
    }

    fun save(amount: Int){
        balance += amount
    }
}

2-2. 만약 은행에서 계좌개설 이벤트를 하면

  • 계좌를 만들면 1000원을 계좌에 넣어주는 이벤트
  • 생성자에 디폴트값을 넣어준다.
class Account2(val name: String, val birth: String, var balance: Int = 1000){
    fun checkBalance(): Int{
        return balance
    }

    fun withdraw(amount: Int): Boolean{
        if(this.balance < amount){
            println("출금 불가능")
            return false
        }else{
            balance -= amount
            return true
        }
    }

    fun save(amount: Int){
        balance += amount
    }
}

2-3. 방법1 코드 더 간단하게 만들기

클래스 생성자 파라미터 중에서 val이나 var 키워드가 없는 경우

  • 해당 매개변수는 멤버변수에 값을 할당할 때 사용한다.
  • 클래스의 멤버함수에서는 사용할 수 없다.
  • 밑에 있는 예시 코드에서 initialBalance에 해당
class Account3(val name: String, val birth: String, initialBalance: Int){

    // 멤버변수에 값을 할당할 때 사용
    var balance: Int = if(initialBalance >= 0) initialBalance else 0

    fun checkBalance(): Int{
        return balance
    }

    fun withdraw(amount: Int): Boolean{
        if(this.balance < amount){
            println("출금 불가능")
            return false
        }else{
            balance -= amount
            return true
        }
    }

    fun save(amount: Int){
        balance += amount
    }
}

📝 3. TV 클래스

  • on/off 기능
  • 채널을 돌리는 기능
  • 초기 채널은 (S사 M사 K사 3개)
class TV(val channels: List<String>){
    var on: Boolean = false
    var currentChannelNumber: Int = 0
        set(value) { // currentChannelNumber함수에 value를 할당할 때 호출되는 함수
            field = value
            if(field > 2){
                field = 0
            }
            if(field < 0){
                field = 2
            }
        }
        get() { // currentChannel이 밖에서 사용될 때 호출되는 함수
            println("호출되었습니다.")
            return field
        }

    fun switch(){
        on = !on
    }

    fun checkCurrentChannel(): String{
        return channels[currentChannelNumber]
    }

    fun channelUp(){
        currentChannelNumber++
    }

    fun channelDown(){
        currentChannelNumber--
    }
}
profile
할 수 있어! :)

0개의 댓글