본문 바로가기
728x90

공부155

아이템 21 - 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 프로퍼티 위임을 사용하여, 다양한 조건에서 적용해보자.코틀린에서는 디자인 패턴 Delegate Pattern 을 쉽게 구현할 수 있다.by lazy {}보일러플레이트 코드를 줄일 수 있다. /** * 아래 코드를 보시면 인터페이스 IWindow, 클래스 TransparentWindow, UI가 있습니다. * 클래스들은 모두 IWindow 인터페이스를 상속받았습니다. * UI는 TransparentWindow 를 상속받지 않고, mWindow 를 클래스 내부에 갖고 있습니다. * 그리고 UI는 mWindow.getWidth()처럼 mWindow 의 함수를 호출해주고 있습니다. * 이 구조에서, UI 클래스는 TransparentWindow 의 기능을 내부 변수 mWindow 에 위임하였습니다. * 이 구조.. 2024. 6. 6.
아이템 20 - 일반적인 알고리즘을 반복해서 구현하지 stdlib 에 대부분의 알고리즘이 구현되어있다. 시간 되면 자주쓰이는 것들을 확인해 봐야겠다.코틀린의 확장함수 또한 살펴봐야겠다..ex)coerceIn 함수같은..쓸만한 함수들을 익혀놔야겠다.표준 라이브러리에 없는 알고리즘이 필요할 경우 범용 유틸리티로 만들것을 고민해 보자.https://kotlinlang.org/api/latest/jvm/stdlib/ kotlin-stdlib - Kotlin Programming Language kotlinlang.org  @Test fun coerceInTest() { // coerceIn 확장함수 val coerceIn1 = (-1).coerceIn(0, 100) // 0 val coerceIn2 = 0.coerc.. 2024. 6. 6.
MP4 (MPEG-4 Part 14), M3U8 (UTF-8 M3U) MP4 (MPEG-4 Part 14)MP4 는 디지털 멀티미디어 컨테이너 형식주로 비디오와 오디오를 저장하는 데 사용, 자막과 이미지를 포함할 수 있다특징.mp4 확장자저장: 비디오, 오디오, 자막 이미지 등의 데이터를 하나의 파일로 저장재생: 로컬 저장 장치나 스프리밍 서버에서 직접 재생할 수 있다.호환성: 대부분의 미디어 플레이어, 디바이스 지원압축: 고효울 압축을 통해 품질을 유지하면서 파일 크기를 줄임M3U8 (UTF-8 M3U)M3U8 은 미디어 파일 목록을 저장하는 플레이리스트 파일 형식.주로 HTTP 라이브 스트리밍(HLS)에서 사용됨특징.m3u8 확장자저장: 미디어 파일(주로 비디오)의 URL 목록을 저장한다.파일 자체를 포함하지 않는다.재생: 클라이언트가 목록에 있는 URL 을 따라가며 .. 2024. 6. 1.
2.6 숫자를 거듭제곱하기, 2.7 비트 시프트 연산자 사용하기 숫자를 거듭제곱하기 코틀린에는 자바처럼 내장 거듭제곱 연산자가 없다. 정수의 값을 거듭제곱하려면 -> Double 또는 Float 형으로 치환 후 pow 연산자를 호출후에 다시 원래의 타입으로 되돌려줘야 한다 이는 infix 연산자로 정의하는 방법이 있을 수 있다. infix fun Int.`**`(x: Int) = toDouble().pow(x).toInt() infix fun Long.`**`(x: Int) = toDouble().pow(x).toLong() infix fun Float.`**`(x: Int) = this.toDouble().pow(x.toDouble()).toFloat() infix fun Double.`**`(x: Int) = pow(x.toDouble()).toInt() // F.. 2024. 4. 21.
아이템 19 - knowledge 를 반복하여 사용하지 말라 저자가 생각하는 프로그램의 가장 큰 규칙은 다음과 같다 프로젝트에서 이미 있던 코드를 복사해서 붙여넣고 있다면, 무언가가 잘못된 것이다. 실용주의 프로그래머 라는 책에서는 DRY 규칙(Don't Repeat Yourself)으로 표현하고 있다. 프로그래밍에서 knowledge 는 넓은 의미로 의도적인 정보 를 뜻합니다. 프로그램에서 중요한 knowledge 를 크게 두 가지 뽑는다면, 다음과 같다 로직: 프로그램이 어떠한 식으로 동작하는지와 프로그램이 어떻게 보이는지 공통 알고리즘: 원하는 동작을 하기 위한 알고리즘 둘의 가장 큰 차이점은 시간에 따른 변화 이다. 비즈니스 로직은 시간이 지나면서 계속해서 변하지만, 공통 알고리즘은 한 번 정의된 이후에는 크게 변하지 않습니다. 모든것은 변화한다 프로그래밍.. 2024. 4. 16.
아이템 18 - 코딩 컨벤션을 지켜라 코틀린 코딩 컨벤션 문서 https://kotlinlang.org/docs/coding-conventions.html#naming-rules 코딩 컨벤션을 최대한 지켜 주는 것이 좋다. 인텔리제이 - Preferences > Editor > Coding Style > Kotlin > 오른쪽 상단에 Set form.. > Kotlin Style Guide 선택 생각: 지금 하던대로 가독성 있게, 잘 지키면 될듯. 2024. 4. 11.
아이템 17 - 이름 있는 아규먼트를 사용하라 코드에서 아규먼트의 의미가 명확하지 않는 경우가 있다. 예를들어 다음과 같은 코드이다. val text = (1..10).joinToString { "|" } "|" 가 무엇을 의미하는지는 joinToString 대해서 이미 알고 있다면 이것이 구분자(separator) 를 의미한다는 것을 알 것이다. 하지만 모른다면 접두사로 생각할 수도있을것이다. 명확하지 않는 경우 이를 직접 지정해서 명확하게 만들어 줄 수 있다 val text2 = (1..10).joinToString(separator = "|") 또는 val seperator = "|" val text3 = (1..10).joinToString(seperator) 또는 val test4 = (1..10).joinToString(separator .. 2024. 4. 10.
아이템 16 - 프로퍼티는 동작이 아니라 상태를 나타내야 한다 코틀린의 프로퍼티는 자바의 필드와 비슷해 보이지만, 사실 서로 완전히 다른 개념입니다. 둘 다 데이터를 저장한다는 점은 같습니다. 하지만 프로퍼티에는 더 많은 기능이 있습니다. 일단 기본적으로 프로퍼티는 사용자 정의 세터와 게터를 가질 수 있습니다. class User { var name: String = "initial name" get() = field // getter에서 백킹 필드에 접근 set(value) { field = value // setter에서 백킹 필드에 값을 할당 } } 위 코드에서 setter 에 name = value 를 하지않지 않고 field를 사용한 이유와 백킹필드란? 백킹필드 프로퍼티의 값을 저장하는 데 사용되는 내부적인 필드 코틀린에서는 프로퍼티의 값을 저장하고 검색할.. 2024. 4. 8.
아이템 15 - 리시버를 명시적으로 참조하라 리시버? 확장 함수나 확장 속성, 또는 수신 객체 람다에서 대상이 되는 객체를 의미한다 확장 함수나 속성을 호출할 때, 그 앞에 오는 객체가 바로 리시버 객체이다. 수신 객체 지정 람다에서는 람다 내부에서 사용 가능한 컨텍스트 객체를 가리킨다. 확장 함수: 특정 타입의 객체에 대해 호출되며, 그 타입의 객체가 리시버 수신 객체 지정 람다: applu, run, with, also, let 같은 함수는 모두 리시버 객체를 가지며, 람다 내부에서 직접 호출할 수 있다. fun User.printInfo() { println("Name: $name, Age: $age") // 확장 함수 내에서 'this' 생략 가능 } val user = User("injin Jeong", 10).apply { name = .. 2024. 4. 7.
728x90