📝 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
}
📝 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) {
field = value
if(field > 2){
field = 0
}
if(field < 0){
field = 2
}
}
get() {
println("호출되었습니다.")
return field
}
fun switch(){
on = !on
}
fun checkCurrentChannel(): String{
return channels[currentChannelNumber]
}
fun channelUp(){
currentChannelNumber++
}
fun channelDown(){
currentChannelNumber--
}
}