-
[Android] 간단한 계산기 피드백 적용안드로이드 2024. 3. 11. 17:05
✏️ TIL(Today I Learned)
추상화를 사용하였으니, num1, num2 또한 추상화하면 좋을 것 같다고 피드백을 받아서 적용해봤다.
우선 아래와 같이 AbstractOperation부터 수정을 하였고
// 수정 전 abstract class AbstractOperation { abstract fun operate(num1: Double, num2: Double): Double } // 수정 후 abstract class AbstractOperation { abstract val num1: Double abstract val num2: Double abstract fun operate(num1: Double, num2: Double): Double }
상속을 받은 클래스들을 수정했다.
// 수정 전 class Calculator { fun calculate(operation: AbstractOperation, operand1: Double, operand2: Double): Double { return operation.operate(operand1, operand2) } } // 수정 후 class Calculator { fun calculate(operation: AbstractOperation): Double { return operation.operate(operation.num1, operation.num2) } }
그러면서 예외를 throw하는 대신 require()을 사용했다.
// 수정 전 class DivideOperation(override val num1: Double, override val num2: Double) : AbstractOperation() { override fun operate(num1: Double, num2: Double): Double { if (num2 == 0.0) { throw IllegalArgumentException("0으로 나눌 수 없습니다.") } return num1 / num2 } } // 수정 후 class DivideOperation(override val num1: Double, override val num2: Double) : AbstractOperation() { override fun operate(num1: Double, num2: Double): Double { // 0.0보다 크지 않을 경우 메세지를 이용하여 익셉션을 던진다 require(num2>0.0) { "0으로 나눌 수 없습니다." } return num1 / num2 } }
매개변수에 추상화를 적용했으니까, 객체 생성하는 코드도 수정했다. 그러면서 named parameter을 사용했다.
// 수정 전 "+" -> Calculator.calculate(num1, num2, AddOperation()) "-" -> Calculator.calculate(num1, num2, SubtractOperation()) // 수정 후 val calculator by lazy { Calculator() } // lazy를 사용함으로써 초기화를 필요로 하는 시점까지 객체를 생성X // calculator 변수를 이용하게 될 경우 Calculator 인스턴스 생성O "+" -> calculator.calculate(AddOperation(num1=num1, num2=num2)) // 이 때, calculator 속성 초기화 "-" -> calculator.calculate(SubtractOperation(num1=num1, num2=num2)) // named parameter을 사용
📝 공부한 Kotlin 요약 정리
require(): 코틀린에서 주어진 조건이 충족되지 않으면 예외를 발생시키는 역할을 한다.
이 함수는 주로 사전조건을 검증하거나 함수의 입력 매개변수 등에서 특정 조건이 만족되는지 확인할 때 사용한다.// 예시) 만약 require() 조건이 충족되지 않으면, IllegalArgumentException 발생 fun divide(a: Int, b: Int) { require(b != 0) { "Divider 'b' should not be zero." } val result = a / b println("Result: $result") } fun main() { divide(10, 2) // 정상 동작 divide(10, 0) // IllegalArgumentException이 발생 }
named parameter: 함수 호출 시에 파라미터의 이름을 명시적으로 지정하여 인자를 전달하는 방식이다.
함수 혹은 생성자를 호출하면서 argument를 파라미터에 넘길때는 항상 named parameter를 사용하는 것이 코드를 명확하게 만들 수 있다.class Person(val name: String, val age: Int) val person = Person("Law", 26) val person = Person(name = "John", age = 30) // 훨씬 명확하다.
'안드로이드' 카테고리의 다른 글
[Kotlin 문법 강의] 5주차: Kotlin 심화 (스레드(Thread), 코루틴(Coroutine)) (0) 2024.03.13 [Kotlin 문법 강의] 5주차: Kotlin 심화 (Scope Functions/ 확장 함수) (0) 2024.03.12 [Android] 'com.example'은(는) 제한되어 있으므로 다른 패키지 이름을 사용해야 합니다. (프로젝트 패키지 명 변경 방법) (0) 2024.03.10 [Android] 플레이스토어 배포 (0) 2024.03.08 [Android] 간단한 계산기 (추상화) (0) 2024.03.07