본문 바로가기
728x90

카테고리249

아이템 25 - 공통 모듈은 추출해서 여러 플랫폼에서 재사용하라 공통모듈을 추출하거 야러 플랫폼에서 재사용하는 방법을 권장코드 중복의 문제코드 공유의 이점코틀린 멀티플랫폼 프로젝트(KMP) 라는것도 있더라..API 정도만 같이 사용하면 좋치 않을까..다른방법은 해봐야 느낄 수 있을 것 같다. 2024. 6. 20.
아이템 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.
application.yml 또는 application.properties 파일의 설정을 클래스로 매핑하여 관리해볼까요~? Spring Boot에서는 application.yml 또는 application.properties 파일의 설정을 클래스로 매핑하여 보다 편리하게 관리할 수 있습니다. 이를 통해 설정 값을 보다 쉽게 사용할 수 있고, 타입 세이프티(Type Safety)를 보장할 수 있습니다. 예시 YAML 설정 파일site-map: xmlns: "http://www.sitemaps.org/schemas/sitemap/0.9" base-url: "https://example.com/base" magazine-url: "https://example.com/magazine" aws: bucket: s3-test-bucket path: sitemap magazine: /magazine file-.. 2024. 5. 29.
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.
728x90