13강. 고차 함수와 함수 리터럴고차함수파라미터로 함수를 받거나 함수를 반환하는 함수두 수를 연산하는 함수파라미터에 함수를 받고있음, 즉 고차함수임fun compute(num1: Int, num2: Int, op: (Int, Int) -> Int): Int { return op(num1, num2)}compute를 호출하는 방법람다식, 익명함수를 함숫값 또는 함수 리터럴이라고 함리터럴: 소스 코드의 고정된 값을 나타내는 방법fun main() { // 람다식 compute(5, 3) { a, b -> a + b } // 익명함수 compute(5, 3, fun(a: Int, b: Int) = a + b) // 익명함수 + 타입추론 compute(5, 3, fun(a, b..
8강. lateinit, lazy()class Person( private val name: String) { val isKim: Boolean get() = this.name.startsWith("최") // 홍길동 -> 홍** val maskingName: String get() = name[0] + (1 until name.length).joinToString("") { "*" }}fun main() { val person = Person("홍길동")}클래스 인스턴스화가 이뤄지며 name에 '홍길동'이 들어감만약, 인스턴스화 시점과 프로퍼티 초기화 시점을 분리하고 싶다면?테스트 코드 작성테스트 코드의 특징은 각 테스트 메소드가 Person을 각각 ..
1강 제네릭과 타입 파라미터Cage 클래스동물을 넣거나 꺼낼 수 있음methodsgetFirst() - 첫번째 동물을 가져옴put(animal) - 동물을 넣는다.moveFrom(cage) - 다른 cage에 있는 동물을 모두 가져온다.Codeclass Cage { private val animals: MutableList = mutableListOf() fun getFirst(): Animal { return this.animals.first() } fun put(animal: Animal) { this.animals.add(animal) } fun moveFrom(cage: Cage) { this.animals.addAll(cage..
제습기제습기 작동원리제습기는 공기 중 수증기를 제거하고, 고온건조한 공기를 배출하여 실내 습도를 낮춘다.공기가 제습기로 유입되어 차가운 냉각핀을 지나면서 수증기가 물로 변해 물통에 저장된다.이 과정에서 발생한 열 때문에 뜨겁고 건조한 공기가 실내로 배출된다.제습 방식압축기식원리: 냉매사이클을 통해 발열부는 뜨거워지고 흡열부는 차가워지면서 공기를 통과시켜 응결된 수분을 모아 물통에 받는 방식입니다.장점: 제습 효과가 크지만 뜨거운 바람이 나와 주변 온도가 올라갈 수 있습니다.펠티어식원리: 펠티어 소자를 이용한 열전 현상으로 온도를 낮추는 방식입니다.장점: 소음이 적지만 제습 효율이 떨어집니다.제습 능력과 실내 면적의 관계 이해하기예를 들어, 제습기의 제습 능력이 1일 제곱미터당 0.25리터라면, 100제곱..

객체지향 설계의 3가지 관점 아래 3가지 관점은 순서가 아닌 동일한 클래스를 3가지 다른 방향에서 바라보는 것을 의미 개념 관점 설계 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는것이 핵심 명세 관점 설계 실제 소프트웨어 안에서 살아 숨쉬는 객체들의 책임에 초점을 맞춰 설계 인터페이스와 구현을 분리하는 것은 훌륭한 객체지향 설계를 낳는 가장 기본적인 원칙 구현 관점 설계 객체들이 책임을 수행하는데 필요한 동작을 코드로 작성하는 것 실전 - 커피 전문점 커피 전문점 커피 전문점이라는 도메인은 손님, 메뉴 항목, 메뉴판, 바리스타, 커피 객체로 구성된 작은 세상 도메인 모델 소프트웨어가 대상으로 하는 영역인 도메인을 단순화해서 표현한 모델을 도메..

객체 지향은 자주 변경되는 기능이 아닌 안정적인 구조를 기반으로 시스템을 구조화함 구조 설계 소프트웨어 제품 설계의 두가지 측면 기능: 제품이 사용자를 위해 무엇을 할 수 있는지에 초점 구조: 제품의 형태가 어떠해야 하는지에 초점 요구사항 변경과 대비 소프트웨어 분야에서 예외가 없는 유일한 규칙은 요구사항이 항상 변경된다는것 설계가 어려운 이유는 오늘의 기능이 내일 변경될지도 모르는 요구사항을 수용할 수 있는 코드를 창조해야하지 때문 미래에 대비하는 가장 좋은 방법은 변경을 예측하는것이 아닌 수용할 수 있는 설계를 하는것 자주 변경되지 않는 객체 구조를 바탕으로 시스템 기능을 객체간의 책임으로 분배해야 함 기능과 구조 구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계로 표현 ..