728x90 공부158 아이템 24 - 제네릭 타입과 variance 한정자를 활용하라 기본 - 제네릭 클래스 => 무공변성 -> 즉 공변이 없다out -> 공변성 => 자기자신과 자식 객체 허용 -> 생산만 -> 꺼낼수만 있다.in -> 반공변성 => 자기자신과 부모 객체 허용 -> 소비만 -> 넣을수만 있다.*변성 -> 제네릭 클래스 타입 파라미터에 따라 제네릭 클래스 간의 상속 관계가 어떻게 되는지를 나타내는 용어 선언 지점 변성 -> 클래스 자ㅔ를 공변하거나 반공변하게 만드는 방법사용 지점 변셩 -> 특정 함수 또는 특정 변수에 대해 공변/반공변을 만드는 방법제네릭 제약: class Cage 처럼 제네릭 클래스의 타입 파라미터의 제약을 걸 수 있다. 그외로는 where 로 여러 제약을 줄 수 있다.타입소거: JDK 의 호환성을 위해 런타임 때 제네릭 클래스의 타입 파라미터 정보가 지.. 2024. 6. 13. 아이템 23 - 타입 파라미터의 섀도잉을 피하라 섀도잉프로퍼티와 파라미터가 같은 이름을 가지게 되면, 지역 파라미터가 외부 스코프에 있는 프로퍼티를 가립니다.이름이 같은 순간부터 별로인듯..타입 파라미터 섀도잉을 피해야하고, 타입 파라미터 섀도잉이 발생한 코드는 이해하기 어려울 수 있다. 타입 파라미터 섀도잉을 피하기 위해 명확하고 구체적인 이름을 사용합니다.동일한 이름의 타입 파라미터를 중첩 범위에서 사용하지 않도록 주의합니다.이러한 방법을 통해 코드의 가독성과 유지보수성을 높일 수 있습니다. 2024. 6. 13. 아이템 22 - 일반적인 알고리즘을 구현할 때 제네릭을 사용하라 타입 아규먼트를 사용하는 함수를 제네릭 함수라고 부릅니다.함수에서는 fun 키워드와 함수 이름 사이에 형태의 코드를 입력합니다.클래스와 인터페이스는 이름 뒤에 형태의 코드를 입력합니다.타입 파라미터를 사용하면 개발자는 여러 가지 이득을 얻지만, 프로그램은 실질적인 이득이 없습니다.JVM 바이트 코드의 제한으로 인해, 컴파일 시점에 제네릭과 관련된 정보는 사라집니다.따라서 런타임 때 어떤 이득도 얻을 수 없습니다.제네릭 제한타입 파라미터의 중요한 기능 중 하나는 구체적인 타입의 서브타입만 사용하게 타입을 제한하는 것기본 사용// T는 Number 또는 Number의 하위 타입이어야 함fun processNumber(value: T) { println(value.toDouble())}fun mai.. 2024. 6. 13. 아이템 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. 이전 1 2 3 4 5 6 7 ··· 18 다음 728x90