profile
어려울수록 기본에 미치고 열광하라
태그 목록
전체보기 (114)android(26)kotlin(22)swift(21)스위프트(21)iOS(21)RxJava(17)반응형 프로그래밍(16)rxkotlin(16)비동기 데이터 스트림(15)RX(15)CS(13)observable(12)Reactive X(11)코틀린(10)Java(6)reactivex(6)안드로이드(6)coroutine(6)코루틴(5)동시성(5)비동기(5)디자인 패턴(4)Thread(4)JVM(3)Design Pattern(3)RecyclerView(3)Apollo client(3)graphql(3)Android Component(3)TCP/IP(3)View(3)MVVM(2)상속(2)Broadcast Receiver(2)자바(2)정렬 알고리즘(2)Generics(2)멀티 쓰레딩(2)Map(2)RxAndroid(2)추상화(2)취준(2)SOLID(2)OOP(2)context(2)네트워크(2)dependency injection(2)di(2)jetpack(2)제너릭 함수(2)알고리즘(2)lifecycle(2)Observer(2)List(2)garbage collection(2)GC(2)자료구조(2)객체지향 프로그래밍(2)제너릭 클래스(2)카카오페이(2)다형성(2)제너릭(2)service(2)scope function(2)클린 아키텍처(2)회고(2)Adapter(2)의존성 주입(2)Flowable(2)스코프 함수(2)동기화(1)날먹(1)stack(1)소마 면접(1)garbage collector(1)CustomType(1)레포지(1)process(1)data class(1)heap(1)Activity(1)inline function(1)카카오(1)Inflating(1)junit(1)Cache(1)Local Data(1)Handler(1)velog(1)구조화된 동시성(1)Mutext(1)onDraw(1)quicksort(1)delegate pattern(1)callback(1)Hash Collision(1)캡슐화(1)Thread Pool(1)Frameworks(1)연말(1)RecyclerView.Adapter(1)with(1)임계 영역(1)andoird(1)clean architecture(1)input(1)requestLayout()(1)캐시 메모리(1)debounce(1)LRU(1)high order function(1)by(1)BST(1)tistory(1)hasFixedSize(1)Use Cases(1)RxBinding(1)티스토리 단점(1)브로드캐스트 리시버(1)Content Provider(1)composition(1)신입 개발자(1)콘텐트 프로바이더(1)Datastore(1)network(1)scheduler(1)XML(1)고차함수(1)entity(1)ip(1)tcp(1)퀵 소트(1)Looper(1)layout(1)데드락(1)LRU Cache(1)Hashing(1)Open Addressing(1)객체지향 패러다임(1)double linked list(1)test code(1)PendingIntent(1)명령형 프로그래밍(1)CustomTypeAdapter(1)2021년(1)hash function(1)notifyDataSetChanged()(1)Apollo-graphql(1)Application Context(1)꿀팁(1)ANR(1)싱글톤 패턴(1)커스텀 타입(1)DiffUtil(1)Deadlock(1)application(1)onLayout(1)interface(1)Runtime Data Areas(1)when(1)Collection(1)슬라이딩 윈도우(1)Day(1)jetbrains(1)뮤텍스(1)취업준비(1)dagger(1)GitHub 소스코드(1)flow(1)Adapter Pattern(1)HashTable(1)인라인 함수(1)Broadcast(1)가비지 컬렉션(1)Enum(1)VS Code(1)세마포어(1)Process Control Block(1)Chaining(1)inflate(1)소마 지원 팁(1)AAC(1)절차적 프로그래밍(1)Spring boot(1)HashMap(1)inline(1)main thread(1)LayoutInflater(1)이진 트리(1)이진 탐색 트리(1)SharedPreferences(1)수습기간(1)listview(1)환승(1)notification(1)array(1)안드로이드 개발(1)TCP 통신(1)어댑터 패턴(1)Application Not Responding(1)Intent(1)Method Area(1)교착상태(1)github(1)toString(1)Executor(1)ViewHolder(1)병합 정렬(1)EditText(1)다크모드(1)ExecutorService(1)Class Loader(1)mutation(1)view lifecycle(1)SW 마에스트로(1)Android view(1)Kotlin 유용한 함수(1)객체지향 프로그래밍 설계원칙(1)합병 정렬(1)sealed(1)UI Test(1)Field Injection(1)Drivers(1)AlarmManager(1)delegate(1)Critical Section(1)깃허브(1)시간 복잡도(1)Activity Context(1)Android Studio(1)흐름제어(1)운영체제(1)LRU 알고리즘(1)Singleton(1)RxKoltin(1)소프트웨어 마에스트로(1)set(1)run(1)Listener(1)CustomView(1)OS(1)배압현상(1)브로드캐스트(1)스프링 부트(1)ScalarType(1)Native Method Stack(1)비동기 처리(1)function(1)UI thread(1)페이지 교체(1)프로세스(1)유닛 테스트(1)key-value(1)Interface Adapters(1)infix(1)3 Way-Handshake(1)unit test(1)file upload(1)MergeSort(1)VSC(1)서비스(1)Pair(1)Kotlin Function(1)Night(1)다크모드 비활성화(1)Semaphore(1)소마(1)쓰레드(1)패킷 교환(1)소마 코테(1)PublishSubject(1)Wrapper Pattern(1)Subject(1)4-way Handshake(1)apollo(1)옵저버 패턴(1)안드로이드 스타일(1)Backpressure(1)네트워킹(1)PCB(1)Context Switching(1)
post-thumbnail

[Kotlin] Generics 도장깨기 2편

💡 이전 포스팅과 이어집니다! 이전 포스팅에선 제너릭 함수, 제너릭 클래스 등의 용법과 제약 조건에 대해서도 배워보았다. 이번 시간엔 더 나아가 불변성 및 공변성, 반공변성의 개념에 대해서 알아보고자 한다. 용어는 생소할 수 있지만, 개념은 그리 어렵지 않으니 천천히 하나씩 살펴보도록 하자. Invariance (불변성) 이전 포스팅에서 우리는 아래와 같은 제너릭 클래스를 만들었다. 일단 한 번 Rectangel 클래스를 만드는 상황을 가정해보자. Double 이라는 자료형 (클래스) 는 아래와 같은 상속관계가 있다. Double 의 부모 클래스는 Number 이고, Comparable 을 구현하고 있다. 그런데, **

2021년 9월 3일
·
0개의 댓글
·
post-thumbnail

[Kotlin] Generics 도장깨기 1편

Generics 는 자바에도 있었던 개념이다. 클래스나 함수 등을 정의할 때, 파라미터 및 변수의 타입을 명시하지 않는 것이다. 즉, 어떤 타입이든 수용할 수 있는 형태가 된다. 따라서 클래스나 함수를 다양한 타입으로 오버로딩하여 여러 가지 정의해두지 않아도, 외부에서 타입을 정해줄 수 있다. 이번 포스팅에선 이 Generics 를 활용한 클래스와 함수 등을 정의하는 방법에 대해서 알아보자. Generic 함수 타입이 정해지지 않는 변수 및 파라미터의 경우, 함수의 이름 앞에 명시를 해줘야 한다. 아래 예시는 T 라는 제너릭 타입 변수를 사용하기 때문에 함수 이름 앞에 ` 라고 명시해주었다. T 타입 파라미터 a 과 b` 를 더하여 T 타입 형태로 결과를 리턴하는 동작을 한다. 제너릭 함수를 정의할 땐, 호환성을 높이기 위해 최대한 특정 데이터 타입과 관계없이 동작을 하게끔 해야 하는 것이 중요하다

2021년 9월 2일
·
2개의 댓글
·